[
  {
    "path": ".gitignore",
    "content": "# Created by .ignore support plugin (hsz.mobi)\n\n.idea/\n*.iml\n_site/\n.sass-cache/\n.jekyll-cache/\n"
  },
  {
    "path": "404.md",
    "content": "---\nlayout: missingpage\n---\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 ics-portfolios\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Technical Portfolio\n\nThis repository hosts a technical portfolio built using [TechFolio](http://techfolios.github.io). \n\nSee the quick start guide for instructions on how to tailor the template to your own needs.\n\n\n"
  },
  {
    "path": "_config.yml",
    "content": "# Site settings\n\n# REQUIRED CHANGES\n# Edit next line, providing your own name.\ntitle: Molly Maluhia | Professional Portfolio\n# Edit next line, replacing 'techfolios' with your github username\nurl: \"https://techfolios.github.io\"\n# Edit next line so that baseurl is \"\" if your repo is <username>.github.io\nbaseurl: \"/template\"\n\n# OPTIONAL CHANGES\n# You might want to change the bio page label to something else, such as CV\nbio-page-label: Resume\n# You might want to change the theme associated with one or more sections of the site.\n# Defining your own custom theme variations is easy. See the documentation.\ntheme-home: theme-home-builtin-1.html\ntheme-projects: theme-projects-builtin-1.html\ntheme-essays: theme-essays-builtin-1.html\ntheme-bio: theme-bio-builtin-1.html\n\n# Specify the rouge syntax highlighter theme. Pick one from css/rouge.\nrouge-theme: igorpro\n\n# YOU NORMALLY NEVER CHANGE THE FOLLOWING\nmarkdown: kramdown\ninclude: [_data]\n\n"
  },
  {
    "path": "_data/bio.json",
    "content": "{\n  \"basics\": {\n    \"name\": \"Molly Maluhia\",\n    \"label\": \"Student\",\n    \"picture\": \"https://techfolios.github.io/template/images/molly.png\",\n    \"email\": \"molly@hawaii.edu\",\n    \"phone\": \"808-333-4444\",\n    \"website\": \"https://mmaluhia.github.io\",\n    \"summary\": \"I am studying for a B.S. in Computer Science in the Department of Information and Computer Sciences at the University of Hawaii. I expect to graduate in Spring, 2020.\",\n    \"location\": {\n      \"address\": \"\",\n      \"postalCode\": \"96822\",\n      \"city\": \"Honolulu\",\n      \"countryCode\": \"USA\",\n      \"region\": \"Hawaii\"\n    },\n    \"profiles\": [\n      {\n        \"network\": \"github\",\n        \"username\": \"mmaluhia\",\n        \"url\": \"http://github.com/changeme\"\n      },\n      {\n        \"network\": \"linkedin\",\n        \"username\": \"mollymaluhia\",\n        \"url\": \"http://linkedin.com/in/changeme\"\n      },\n      {\n        \"network\": \"twitter\",\n        \"username\": \"mollymal\",\n        \"url\": \"http://twitter.com/changeme\"\n      },\n      {\n        \"network\": \"instagram\",\n        \"username\": \"molly\",\n        \"url\": \"http://instagram.com/changeme\"\n      }\n    ]\n  },\n  \"interests\": [\n    {\n      \"name\": \"internet of things\",\n      \"keywords\": [\n        \"Arduino\",\n        \"TI MSP430\"\n      ]\n    },\n    {\n      \"name\": \"data mining\",\n      \"keywords\": [\n      ]\n    },\n    {\n      \"name\": \"artificial intelligence\",\n      \"keywords\": [\n      ]\n    }\n  ],\n  \"skills\": [\n    {\n      \"name\": \"Languages and Frameworks\",\n      \"level\": \"\",\n      \"keywords\": [\n        \"C\",\n        \"C++\",\n        \"Java\",\n        \"Javascript\",\n        \"Assembly\",\n        \"Common Lisp\"\n      ]\n    },\n    {\n      \"name\": \"Toolsets/OS\",\n      \"level\": \"\",\n      \"keywords\": [\n        \"MacOS\",\n        \"Ubuntu\",\n        \"Git/GitHub\",\n        \"g++\",\n        \"TI LaunchPad\"\n      ]\n    }\n  ],\n  \"education\": [\n    {\n      \"institution\": \"University of Hawaii, Honolulu, HI\",\n      \"area\": \"Computer Science (expected Spring, 2018)\",\n      \"studyType\": \"B.S.\",\n      \"startDate\": \"2013-09-01\",\n      \"endDate\": \"Present\",\n      \"gpa\": \"\",\n      \"courses\": [\n      ]\n    }\n  ],\n  \"work\": [\n    {\n      \"company\": \"UH Manoa Board of Publications\",\n      \"position\": \"Web Developer\",\n      \"website\": \"\",\n      \"startDate\": \"2015-08-01\",\n      \"endDate\": \"Present\",\n      \"summary\": \"Head of online presence for Ka Leo\",\n      \"highlights\": [\n        \"Maintain, update, and oversee official college newspaper website\",\n        \"Drive, design and build student-community projects for UH Manoa\"\n      ]\n    },\n    {\n      \"company\": \"UH Information Technology Services\",\n      \"position\": \"Help Desk Consultant\",\n      \"website\": \"http://www.hawaii.edu/its/\",\n      \"startDate\": \"2015-01-01\",\n      \"endDate\": \"2016-03-15\",\n      \"summary\": \"\",\n      \"highlights\": [\n        \"Troubleshoot software, hardware and networking issues over the phone\",\n        \"Answer phone and email responses to the ITS Help Desk\"\n      ]\n    }\n  ],\n  \"volunteer\": [\n    {\n      \"organization\": \"Center for Renewable Energy and Island Sustainability\",\n      \"website\": \"http://manoa.hawaii.edu/reis\",\n      \"position\": \"Software Developer\",\n      \"startDate\": \"2016-01-01\",\n      \"endDate\": \"Present\",\n      \"summary\": \"Lead developer for weather sensing project\",\n      \"highlights\": [\n        \"Design firmware for distributed weather sensor network\",\n        \"Maintain custom data collection and storage infrastructure\"\n      ]\n    },\n    {\n      \"organization\": \"\",\n      \"website\": \"\",\n      \"position\": \"Professional organization involvement\",\n      \"startDate\": \"\",\n      \"endDate\": \"\",\n      \"summary\": \"\",\n      \"highlights\": [\n        \"Chair, ACM Manoa, 2016-Present\",\n        \"Member, IEEE Student Branch, 2014-Present\",\n        \"Webmaster/IT Officer, IEEE Student Branch, UH Manoa, 2012-2013\"\n      ]\n    }\n  ],\n  \"awards\": [\n    {\n      \"title\": \"B+ Scholarship\",\n      \"date\": \"2013-Present\",\n      \"awarder\": \"State of Hawaii\",\n      \"summary\": \"Scholarships awarded to incoming freshmen and continuing students who complete a rigorous high school curriculum with a minimum overall GPA of 3.0 at a Hawai'i public school.\"\n    },\n    {\n      \"title\": \"First place\",\n      \"date\": \"2015\",\n      \"awarder\": \"University of Hawaii Micromouse Competition\",\n      \"summary\": \"My team won first place in 2015.  See my portfolio site for more details.\"\n    }\n  ],\n  \"references\": [\n    {\n      \"name\": \"Available upon request\",\n      \"reference\": \"\"\n    }\n  ]\n}"
  },
  {
    "path": "_includes/bio-address.html",
    "content": "<!-- Used by theme-bio-builtin-1,2 -->\n\n<p class=\"ui no-bottom\">{{ site.data.bio.basics.location.address }}</p>\n<p class=\"ui no-bottom\">{{ site.data.bio.basics.location.city }}, {{ site.data.bio.basics.location.region }} {{ site.data.bio.basics.location.postalCode }} {{ site.data.bio.basics.location.countryCode }}</p>\n<p class=\"ui no-bottom\">{{ site.data.bio.basics.phone }}</p>"
  },
  {
    "path": "_includes/bio-awards-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n{% if site.data.bio.awards %}\n<div class=\"row\">\n  <div class=\"two wide column\">\n    <h3 class=\"ui left aligned header no-bottom\">Awards</h3>\n  </div>\n\n  <div class=\"fourteen wide column no-bottom\">\n    {% for entry in site.data.bio.awards %}\n\n    <div class=\"ui grid\">\n      <div class=\"sixteen wide column no-bottom\">\n        <p class=\"ui no-bottom\">\n          <b>{{ entry.title }}</b>, {{ entry.awarder }}{% if entry.date %}, {{ entry.date }}{% endif %}\n        </p>\n        <p class=\"ui\">{{ entry.summary }}</p>\n      </div>\n    </div>\n\n    {% endfor %}\n  </div>\n</div>\n{% endif %}"
  },
  {
    "path": "_includes/bio-awards-2.html",
    "content": "<!-- Used by theme-bio-builtin-2 -->\n\n{% assign hasGrant = false %}\n{% assign hasNonGrant = false %}\n{% for entry in site.data.bio.awards %}\n  {% if entry.type == \"grant\" %}\n     {% assign hasGrant = true %}\n  {% elsif entry.type != \"grant\" %}\n     {% assign hasNonGrant = true %}\n  {% endif %}\n{% endfor %}\n\n{% if hasGrant %}\n  <div class=\"sixteen wide column no-bottom\">\n    <h3 class=\"ui left aligned header no-bottom\">Grant Support</h3>\n    <hr style=\"margin: 0px;\">\n  </div>\n\n  <div class=\"sixteen wide column no-bottom\">\n    {% for entry in site.data.bio.awards %}\n      {% if entry.type == \"grant\" %}\n        <p class=\"ui no-bottom\">\n          <b>{{ entry.title }}</b>, {{ entry.awarder }}{% if entry.date %}, {{ entry.date }}{% endif %}\n        </p>\n        <p class=\"ui\">{{ entry.summary }}</p>\n      {% endif %}\n    {% endfor %}\n  </div>\n{% endif %}\n\n{% if hasNonGrant %}\n  <div class=\"sixteen wide column no-bottom\">\n    <h3 class=\"ui left aligned header no-bottom\">Awards and Honors</h3>\n    <hr style=\"margin: 0px;\">\n  </div>\n\n  <div class=\"sixteen wide column no-bottom\">\n    {% for entry in site.data.bio.awards %}\n      {% if entry.type != \"grant\" %}\n        <p class=\"ui no-bottom\">\n          <b>{{ entry.title }}</b>, {{ entry.awarder }}, {{ entry.date }}\n        </p>\n        <p class=\"ui\">{{ entry.summary }}</p>\n      {% endif %}\n    {% endfor %}\n  </div>\n{% endif %}\n\n\n"
  },
  {
    "path": "_includes/bio-education-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n\n<div class=\"row\">\n<div class=\"two wide column\">\n  <h3 class=\"ui left aligned header no-bottom\">Education</h3>\n</div>\n\n<div class=\"fourteen wide column no-bottom\">\n  {% for entry in site.data.bio.education %}\n\n  <div class=\"ui grid\">\n    <div class=\"twelve wide column no-bottom\">\n      <p class=\"ui no-bottom\"><b>{{ entry.institution }}</b></p>\n      <p class=\"ui no-bottom\">{{ entry.studyType }}, {{ entry.area }}</p>\n      {% if entry.courses %}\n      <ul style=\"margin: 0px;\">\n        {% for course in entry.courses %}\n        <li>{{ course }}</li>\n        {% endfor %}\n      </ul>\n      {% endif %}\n    </div>\n    <div class=\"four wide right aligned column no-bottom\">\n      <p class=\"ui no-bottom\"><b>\n        {% if entry.startDate %}\n        {{ entry.startDate | slice: 0,4 }}\n        {% endif %}\n        {% if entry.startDate and entry.startDate != '' and entry.endDate and entry.endDate != '' %}\n        -\n        {% endif %}\n        {% if entry.endDate %}\n          {% if entry.endDate != \"Present\" %}\n            {{ entry.endDate | slice: 0,4 }}\n          {% else %}\n            {{ entry.endDate }}\n          {% endif %}\n        {% endif %}\n      </b></p>\n    </div>\n  </div>\n\n  {% endfor %}\n</div>\n</div>\n\n"
  },
  {
    "path": "_includes/bio-education-2.html",
    "content": "<!-- Used by theme-bio-builtin-2 -->\n\n<div class=\"sixteen wide column no-bottom\">\n  <h3 class=\"ui left aligned header no-bottom\">Education</h3>\n  <hr style=\"margin: 0px;\">\n</div>\n\n{% for entry in site.data.bio.education %}\n  <div class=\"twelve wide column no-bottom\">\n    <p class=\"ui no-bottom\"><b>{{ entry.institution }}</b></p>\n    <p class=\"ui no-bottom\">{{ entry.studyType }}, {{ entry.area }}</p>\n    {% if entry.courses %}\n      <ul style=\"margin: 0px;\">\n        {% for course in entry.courses %}\n          <li>{{ course }}</li>\n        {% endfor %}\n      </ul>\n    {% endif %}\n  </div>\n  <div class=\"four wide right aligned column no-bottom\">\n    <p class=\"ui no-bottom\"><b>\n      {% if entry.startDate %}\n        {{ entry.startDate | slice: 0,4 }}\n      {% endif %}\n      {% if entry.startDate and entry.startDate != '' and entry.endDate and entry.endDate != '' %}\n        -\n      {% endif %}\n      {% if entry.endDate %}\n        {% if entry.endDate != \"Present\" %}\n          {{ entry.endDate | slice: 0,4 }}\n        {% else %}\n          {{ entry.endDate }}\n        {% endif %}\n      {% endif %}\n    </b></p>\n  </div>\n{% endfor %}\n\n"
  },
  {
    "path": "_includes/bio-interests-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n{% if site.data.bio.interests %}\n<div class=\"row\">\n  <div class=\"two wide column\">\n    <h3 class=\"ui left aligned header no-bottom\">Interests</h3>\n  </div>\n\n  <div class=\"fourteen wide column no-bottom\">\n    <p class=\"ui no-bottom\">\n    {% for entry in site.data.bio.interests %}\n      {{ entry.name }}\n      <!-- Unfortunately the following must all be on a single line so that there are no spaces before the commas. -->\n      {% if entry.keywords and entry.keywords.size > 0 %}({% for keyword in entry.keywords %}{{ keyword }}{% if forloop.last != true %}, {% endif %}{% endfor %}){% endif %}{% if forloop.last != true %}, {% endif %}\n    {% endfor %}\n    </p>\n  </div>\n</div>\n{% endif %}"
  },
  {
    "path": "_includes/bio-network-links.html",
    "content": "<!-- Used by theme-bio-builtin-1,2 -->\n\n{% if site.data.bio.basics.website %}\n  <p class=\"ui no-bottom\"><a href=\"{{ site.data.bio.basics.website }}\"> <i class=\"large home icon \"></i>{{ site.data.bio.basics.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n{% endif %}\n\n{% if site.data.bio.basics.email %}\n<p class=\"ui no-bottom\"><a href=\"mailto:{{ site.data.bio.basics.email }}\"> <i class=\"large mail outline icon \"></i>{{ site.data.bio.basics.email }}</a></p>\n{% endif %}\n\n{% for entry in site.data.bio.basics.profiles %}\n     <p class=\"ui no-bottom\"><a href=\"{{ entry.url }}\"> <i class=\"large {{ entry.network | downcase }} icon \"></i>{{ entry.username }}</a></p>\n{% endfor %}\n"
  },
  {
    "path": "_includes/bio-publications-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n{% if site.data.bio.publications %}\n<div class=\"row\">\n  <div class=\"two wide column\">\n    <h3 class=\"ui left aligned header no-bottom\">Publications</h3>\n  </div>\n\n  <div class=\"fourteen wide column no-bottom\">\n    {% for entry in site.data.bio.publications %}\n\n    <div class=\"ui grid\">\n      <div class=\"sixteen wide column no-bottom\">\n        <p class=\"ui no-bottom\">\n          <b>{{ entry.name }}</b>{% if entry.author and entry.author != \"\" %}, {{ entry.author }}{% endif %}, <em>{{ entry.publisher }}</em>, {{ entry.releaseDate }}\n          {% if entry.website %}\n        <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n        {% endif %}\n        </p>\n        <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n      </div>\n    </div>\n\n    {% endfor %}\n  </div>\n</div>\n{% endif %}"
  },
  {
    "path": "_includes/bio-publications-2.html",
    "content": "<!-- Used by theme-bio-builtin-2 -->\n\n{% assign hasJournal = false %}\n{% assign hasConference = false %}\n{% assign hasWorkshop = false %}\n{% assign hasTechReport = false %}\n{% assign hasThesis = false %}\n{% for entry in site.data.bio.publications %}\n  {% if entry.type == \"journal\" %}\n     {% assign hasJournal = true %}\n  {% elsif entry.type == \"conference\" %}\n     {% assign hasConference = true %}\n  {% elsif entry.type == \"workshop\" %}\n     {% assign hasWorkshop = true %}\n  {% elsif entry.type == \"techreport\" %}\n    {% assign hasTechreport = true %}\n  {% elsif entry.type == \"thesis\" %}\n    {% assign hasThesis = true %}\n  {% endif %}\n{% endfor %}\n\n{% if hasThesis %}\n<div class=\"sixteen wide column no-bottom\">\n  <h3 class=\"ui left aligned header no-bottom\">Thesis</h3>\n  <hr style=\"margin: 0px;\">\n</div>\n\n<div class=\"sixteen wide column no-bottom\">\n  {% for entry in site.data.bio.publications %}\n    {% if entry.type == \"thesis\" %}\n    <p class=\"ui no-bottom\">\n      <b>{{ entry.name }}</b>{% if entry.author and entry.author != \"\" %}, {{ entry.author }}{% endif %}, <em>{{ entry.publisher }}</em>, {{ entry.releaseDate }}\n      {% if entry.website %}\n        <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n      {% endif %}\n    </p>\n    <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n    {% endif %}\n  {% endfor %}\n</div>\n{% endif %}\n\n{% if hasJournal %}\n  <div class=\"sixteen wide column no-bottom\">\n    <h3 class=\"ui left aligned header no-bottom\">Journal articles</h3>\n    <hr style=\"margin: 0px;\">\n  </div>\n\n  <div class=\"sixteen wide column no-bottom\">\n  {% for entry in site.data.bio.publications %}\n    {% if entry.type == \"journal\" %}\n      <p class=\"ui no-bottom\">\n        <b>{{ entry.name }}</b>{% if entry.author and entry.author != \"\" %}, {{ entry.author }}{% endif %}, <em>{{ entry.publisher }}</em>, {{ entry.releaseDate }}\n        {% if entry.website %}\n          <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n        {% endif %}\n      </p>\n      <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n    {% endif %}\n  {% endfor %}\n  </div>\n{% endif %}\n\n{% if hasConference %}\n<div class=\"sixteen wide column no-bottom\">\n  <h3 class=\"ui left aligned header no-bottom\">Conference Proceedings</h3>\n  <hr style=\"margin: 0px;\">\n</div>\n\n<div class=\"sixteen wide column no-bottom\">\n  {% for entry in site.data.bio.publications %}\n    {% if entry.type == \"conference\" %}\n      <p class=\"ui no-bottom\">\n        <b>{{ entry.name }}</b>{% if entry.author and entry.author != \"\" %}, {{ entry.author }}{% endif %}, <em>{{ entry.publisher }}</em>, {{ entry.releaseDate }}\n      {% if entry.website %}\n         <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n      {% endif %}\n      </p>\n      <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n    {% endif %}\n  {% endfor %}\n</div>\n{% endif %}\n\n{% if hasWorkshop %}\n<div class=\"sixteen wide column no-bottom\">\n  <h3 class=\"ui left aligned header no-bottom\">Workshop Proceedings</h3>\n  <hr style=\"margin: 0px;\">\n</div>\n\n<div class=\"sixteen wide column no-bottom\">\n  {% for entry in site.data.bio.publications %}\n    {% if entry.type == \"workshop\" %}\n       <p class=\"ui no-bottom\">\n       <b>{{ entry.name }}</b>{% if entry.author and entry.author != \"\" %}, {{ entry.author }}{% endif %}, <em>{{ entry.publisher }}</em>, {{ entry.releaseDate }}\n       {% if entry.website %}\n         <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n       {% endif %}\n       </p>\n       <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n    {% endif %}\n  {% endfor %}\n</div>\n{% endif %}\n\n{% if hasTechreport %}\n<div class=\"sixteen wide column no-bottom\">\n  <h3 class=\"ui left aligned header no-bottom\">Technical Reports</h3>\n  <hr style=\"margin: 0px;\">\n</div>\n\n<div class=\"sixteen wide column no-bottom\">\n  {% for entry in site.data.bio.publications %}\n    {% if entry.type == \"techreport\" %}\n      <p class=\"ui no-bottom\">\n      <b>{{ entry.name }}</b>{% if entry.author and entry.author != \"\" %}, {{ entry.author }}{% endif %}, <em>{{ entry.publisher }}</em>, {{ entry.releaseDate }}\n      {% if entry.website %}\n        <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n      {% endif %}\n      </p>\n      <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n    {% endif %}\n  {% endfor %}\n</div>\n{% endif %}\n"
  },
  {
    "path": "_includes/bio-references-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n{% if site.data.bio.references %}\n<div class=\"row\">\n  <div class=\"two wide column\">\n    <h3 class=\"ui left aligned header no-bottom\">References</h3>\n  </div>\n\n  <div class=\"fourteen wide column no-bottom\">\n    <p class=\"ui no-bottom\">\n    {% for entry in site.data.bio.references %}\n      {{ entry.name }}\n      {% if entry.reference and entry.reference.size > 0 %}\n        <em>{{ entry.reference }}</em>\n      {% endif %}\n    {% endfor %}\n    </p>\n  </div>\n</div>\n{% endif %}"
  },
  {
    "path": "_includes/bio-skills-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n{% if site.data.bio.skills %}\n<div class=\"row\">\n  <div class=\"two wide column\">\n    <h3 class=\"ui left aligned header no-bottom\">Skills</h3>\n  </div>\n\n  <div class=\"fourteen wide column no-bottom\">\n    <p class=\"ui no-bottom\">\n    {% for entry in site.data.bio.skills %}\n      <p class=\"ui no-bottom\">\n      <b>{{ entry.name }}:</b>\n      {% for keyword in entry.keywords %}\n        {{ keyword }}{% if forloop.last != true %}, {% endif %}\n      {% endfor %}\n      </p>\n    {% endfor %}\n\n  </div>\n</div>\n{% endif %}"
  },
  {
    "path": "_includes/bio-volunteer-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n{% if site.data.bio.volunteer %}\n<div class=\"row\">\n  <div class=\"two wide column\">\n    <h3 class=\"ui left aligned header no-bottom\">Activities</h3>\n  </div>\n\n  <div class=\"fourteen wide column no-bottom\">\n    {% for entry in site.data.bio.volunteer %}\n\n    <div class=\"ui grid\">\n      <div class=\"twelve wide column no-bottom\">\n        <p class=\"ui no-bottom\">\n          <b>\n            {{ entry.position }}{% if entry.organization and (entry.organization != \"\") %}, {{ entry.organization }}{% endif %}\n          </b>\n        </p>\n        <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n        <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n        {% if entry.highlights %}\n        <ul style=\"margin: 0px;\">\n          {% for highlight in entry.highlights %}\n          <li>{{ highlight }}</li>\n          {% endfor %}\n        </ul>\n        {% endif %}\n      </div>\n      <div class=\"four wide right aligned column no-bottom\">\n        <p class=\"ui no-bottom\"><b>\n          {% if entry.startDate %}\n          {{ entry.startDate | slice: 0,4 }}\n          {% endif %}\n          {% if entry.startDate and entry.startDate != '' and entry.endDate and entry.endDate != '' %}\n          -\n          {% endif %}\n          {% if entry.endDate %}\n            {% if entry.endDate != \"Present\" %}\n              {{ entry.endDate | slice: 0,4 }}\n            {% else %}\n              {{ entry.endDate }}\n            {% endif %}\n          {% endif %}\n        </b></p>\n      </div>\n    </div>\n\n    {% endfor %}\n  </div>\n</div>\n{% endif %}"
  },
  {
    "path": "_includes/bio-volunteer-2.html",
    "content": "<!-- Used by theme-bio-builtin-2 -->\n\n{% if site.data.bio.volunteer %}\n<div class=\"sixteen wide column no-bottom\">\n  <h3 class=\"ui left aligned header no-bottom\">Professional Activities</h3>\n  <hr style=\"margin: 0px;\">\n</div>\n\n{% for entry in site.data.bio.volunteer %}\n  <div class=\"twelve wide column no-bottom\">\n    <p class=\"ui no-bottom\">\n      <b>\n      {{ entry.position }}{% if entry.organization and (entry.organization != \"\") %}, {{ entry.organization }}{% endif %}\n      </b>\n    </p>\n    <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n  </div>\n  <div class=\"four wide right aligned column no-bottom\">\n    <p class=\"ui no-bottom\"><b>\n      {% if entry.startDate %}\n        {{ entry.startDate | slice: 0,4 }}\n      {% endif %}\n      {% if entry.startDate and entry.startDate != '' and entry.endDate and entry.endDate != '' %}\n        -\n      {% endif %}\n      {% if entry.endDate %}\n        {% if entry.endDate != \"Present\" %}\n          {{ entry.endDate | slice: 0,4 }}\n         {% else %}\n          {{ entry.endDate }}\n        {% endif %}\n      {% endif %}\n    </b></p>\n  </div>\n\n  <div style=\"padding-top: 0px;\" class=\"sixteen wide column no-bottom\">\n    <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n    {% if entry.highlights %}\n      <ul style=\"margin: 0px;\">\n        {% for highlight in entry.highlights %}\n          <li>{{ highlight }}</li>\n        {% endfor %}\n      </ul>\n    {% endif %}\n  </div>\n{% endfor %}\n{% endif %}\n"
  },
  {
    "path": "_includes/bio-work-1.html",
    "content": "<!-- Used by theme-bio-builtin-1 -->\n\n{% if site.data.bio.work %}\n<div class=\"row\">\n  <div class=\"two wide column\">\n    <h3 class=\"ui left aligned header no-bottom\">Work</h3>\n  </div>\n\n  <div class=\"fourteen wide column no-bottom\">\n    {% for entry in site.data.bio.work %}\n\n    <div class=\"ui grid\">\n      <div class=\"twelve wide column no-bottom\">\n        <p class=\"ui no-bottom\"><b>{{ entry.position }}, {{ entry.company }}</b></p>\n        <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\"\n          }}</a></p>\n        <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n        {% if entry.highlights %}\n        <ul style=\"margin: 0px;\">\n          {% for highlight in entry.highlights %}\n          <li>{{ highlight }}</li>\n          {% endfor %}\n        </ul>\n        {% endif %}\n      </div>\n      <div class=\"four wide right aligned column no-bottom\">\n        <p class=\"ui no-bottom\"><b>\n          {% if entry.startDate %}\n          {{ entry.startDate | slice: 0,4 }}\n          {% endif %}\n          {% if entry.startDate and entry.endDate %}\n          -\n          {% endif %}\n          {% if entry.endDate %}\n            {% if entry.endDate != \"Present\" %}\n              {{ entry.endDate | slice: 0,4 }}\n            {% else %}\n              {{ entry.endDate }}\n            {% endif %}\n          {% endif %}\n        </b></p>\n      </div>\n    </div>\n\n    {% endfor %}\n  </div>\n</div>\n{% endif %}"
  },
  {
    "path": "_includes/bio-work-2.html",
    "content": "<!-- Used by theme-bio-builtin-2 -->\n\n{% if site.data.bio.work %}\n<div class=\"sixteen wide column no-bottom\">\n  <h3 class=\"ui left aligned header no-bottom\">Professional Experience</h3>\n  <hr style=\"margin: 0px;\">\n</div>\n\n{% for entry in site.data.bio.work %}\n  <div class=\"twelve wide column no-bottom\">\n    <p class=\"ui no-bottom\"><b>{{ entry.position }}, {{ entry.company }}</b></p>\n    <p class=\"ui no-bottom\"><a href=\"{{ entry.website }}\">{{ entry.website | remove: \"http://\" | remove: \"https://\" }}</a></p>\n  </div>\n  <div class=\"four wide right aligned column no-bottom\">\n    <p class=\"ui no-bottom\"><b>\n      {% if entry.startDate %}\n        {{ entry.startDate | slice: 0,4 }}\n      {% endif %}\n      {% if entry.startDate and entry.endDate %}\n        -\n      {% endif %}\n      {% if entry.endDate %}\n        {% if entry.endDate != \"Present\" %}\n          {{ entry.endDate | slice: 0,4 }}\n         {% else %}\n          {{ entry.endDate }}\n        {% endif %}\n      {% endif %}\n    </b></p>\n  </div>\n\n  <div style=\"padding-top: 0px;\" class=\"sixteen wide column no-bottom\">\n    <p class=\"ui no-bottom\">{{ entry.summary }}</p>\n    {% if entry.highlights %}\n      <ul style=\"margin: 0px;\">\n        {% for highlight in entry.highlights %}\n          <li>{{ highlight }}</li>\n        {% endfor %}\n      </ul>\n    {% endif %}\n  </div>\n{% endfor %}\n\n{% endif %}"
  },
  {
    "path": "_includes/essay-card-1a.html",
    "content": "<!-- Used by theme-essays-builtin-1 -->\n\n<a class=\"card\" href=\"{{ site.baseurl}}{{ include.page.url }}\">\n  <div class=\"content\">\n    <span class=\"header\">{{ include.page.title }}</span>\n    <div class=\"meta\">\n      <span class=\"date\">{{ include.page.date | date_to_string }}</span>\n    </div>\n\n    <div class=\"description\">\n      {{ include.page.content | markdownify | strip_html | truncatewords: 40 }}\n    </div>\n  </div>\n\n  <div class=\"extra content\">\n    <div class=\"ui mini labels\">\n      {% for label in include.page.labels %}\n      <div class=\"ui basic label\">{{ label }}</div>\n      {% endfor %}\n    </div>\n  </div>\n\n</a>"
  },
  {
    "path": "_includes/essay-card.html",
    "content": "<!-- Used by theme-essays-builtin-1 -->\n\n<div class=\"card\">\n  <div class=\"content\">\n    <span class=\"header\">{{ include.page.title }}</span>\n    <div class=\"meta\">\n      <span class=\"date\">{{ include.page.date | date_to_string }}</span>\n    </div>\n\n    <div class=\"description\">\n      {{ include.page.content | markdownify | strip_html | truncatewords: 40 }}\n    </div>\n  </div>\n\n  <div class=\"extra content\">\n    <div class=\"ui mini labels\">\n      {% for label in include.page.labels %}\n        <div class=\"ui basic label\">{{ label }}</div>\n      {% endfor %}\n    </div>\n  </div>\n\n  <a class=\"ui bottom attached button\" href=\"{{ site.baseurl}}{{ include.page.url }}\">Read More</a>\n</div>"
  },
  {
    "path": "_includes/essay-row.html",
    "content": "<!-- Used by theme-essays-builtin-2 -->\n\n<div class=\"row\">\n  <div style=\"text-align: center\" class=\"three wide column\">\n    <p style=\"margin-top: 10px\" class=\"ui red label\">{{ include.page.date | date_to_string }}</p>\n  </div>\n\n  <div class=\"ten wide column\">\n    <h2 class=\"header\">{{ include.page.title }}</h2>\n    <p>{{ include.page.content | markdownify | strip_html | truncatewords: 40 }}</p>\n\n    <p>\n    <div style=\"text-align: center\" class=\"ui mini labels\">\n      {% for label in include.page.labels %}\n      <div class=\"ui basic label\">{{ label }}</div>\n      {% endfor %}\n    </div>\n    </p>\n\n    <div style=\"text-align: center\">\n      <a class=\"ui basic button\" href=\"{{ site.baseurl}}{{ include.page.url }}\">Read More</a>\n    </div>\n    <hr style=\"margin-top: 20px\">\n  </div>\n</div>\n"
  },
  {
    "path": "_includes/footer.html",
    "content": "<!-- Always create iframes to embed videos if present. See: http://semantic-ui.com/modules/embed.html -->\n\n<script>\n  $('.ui.embed').embed();\n</script>\n"
  },
  {
    "path": "_includes/head.html",
    "content": "<head>\n  <meta charset=\"utf-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"mobile-web-app-capable\" content=\"yes\">\n\n  <title>\n    {% if page.title %}\n      {{ page.title }} |\n    {% endif %}\n    {{ site.title }}\n  </title>\n\n  <!-- Load Javascript and CSS for Semantic UI -->\n  <script src=\"//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js\"></script>\n  <script src=\"{{ site.baseurl }}/css/semantic-ui/semantic.min.js\"></script>\n  <link rel=\"stylesheet\" href=\"{{ site.baseurl }}/css/semantic-ui/semantic.min.css\">\n\n  <!-- Load Techfolio CSS customizations -->\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ site.baseurl}}/css/stylesheet-default.css\">\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ site.baseurl}}/css/stylesheet-customizations.css\">\n\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ site.baseurl}}/css/print-default.css\" media=\"print\">\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ site.baseurl}}/css/print-customizations.css\" media=\"print\">\n\n  <!-- Load a rouge theme from the sample themes in css/rouge.\n       See https://benhur07b.github.io/2017/03/25/add-syntax-highlighting-to-your-jekyll-site-with-rouge.html\n  -->\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ site.baseurl}}/css/rouge/{{ site.rouge-theme}}.css\">\n\n  <!-- Load MathJax if 'mathjax: true' is found in your _config.yml. -->\n  {% if site.mathjax %}\n  <script type=\"text/javascript\"\n          src=\"//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"></script>\n  {% endif %}\n\n\n</head>\n"
  },
  {
    "path": "_includes/header.html",
    "content": "<!-- if you want a global header, put the code here. -->"
  },
  {
    "path": "_includes/home-network-links.html",
    "content": "<!-- Used by theme-home-builtin-1,2,3 -->\n\n{% for profile in site.data.bio.basics.profiles %}\n   <a href=\"{{ profile.url }}\"> <i class=\"big {{ profile.network | downcase }} icon icon-color\"></i> </a>\n{% endfor %}\n\n{% if site.data.bio.basics.email %}\n  <a href=\"mailto:{{ site.data.bio.basics.email }}\"> <i class=\"big mail square icon icon-color\"></i> </a>\n{% endif %}"
  },
  {
    "path": "_includes/menubar.html",
    "content": "<!-- Used by all builtin themes. Now we list number of essays and projects. -->\n\n{% assign essay_pages = site.pages | where: \"type\", \"essay\"  | where_exp: \"page\", \"page.draft != true\" %}\n{% assign project_pages = site.pages | where: \"type\", \"project\" | where_exp: \"page\", \"page.draft != true\" %}\n{% assign num_essays = essay_pages.size %}\n{% assign num_projects = project_pages.size %}\n\n<div class=\"nonprintable\">\n  <nav class=\"ui stackable menu\">\n    <a href=\"{{ site.baseurl}}/\" class=\"brand item\">\n      <img class=\"ui avatar image\" src=\"{{ site.data.bio.basics.picture }}\"><span>{{ site.data.bio.basics.name }}</span>\n    </a>\n    {% if num_projects > 0 %}\n    <a href=\"{{ site.baseurl }}/projects\" class=\" {% if include.active == \"projects\" %} active {% endif %}item\">Projects ({{ num_projects }})</a>\n    {% endif %}\n    {% if num_essays > 0 %}\n    <a href=\"{{ site.baseurl }}/essays\" class=\" {% if include.active == \"essays\" %} active {% endif %} item\">Essays ({{ num_essays }})</a>\n    {% endif %}\n    <a href=\"{{ site.baseurl }}/bio\" class=\" {% if include.active == \"bio\" %} active {% endif %} item\">{{ site.bio-page-label }}</a>\n  </nav>\n</div>"
  },
  {
    "path": "_includes/project-card-1a.html",
    "content": "<!-- Used by theme-projects-builtin-1a, entire card is the link. -->\n\n\n<a class=\"card\" href=\"{% if page.projecturl %}{{ page.projecturl }}{% else %}{{ site.baseurl}}{{ include.page.url }}{% endif %}\">\n  {% if include.page.image %}\n  <div class=\"image\">\n    <img src=\"{{ site.baseurl }}/{{ include.page.image }}\">\n  </div>\n  {% endif %}\n  <div class=\"content\">\n    <span class=\"header\">{{ include.page.title }}</span>\n    <div class=\"meta\">\n      <span class=\"date\">{{ include.page.date }}</span>\n    </div>\n\n    <div class=\"description\">\n      {{ include.page.summary }}\n    </div>\n  </div>\n\n  <div class=\"extra content\">\n    <div class=\"ui mini labels\">\n      {% for label in include.page.labels %}\n      <div class=\"ui basic label\">{{ label }}</div>\n      {% endfor %}\n    </div>\n  </div>\n\n</a>\n"
  },
  {
    "path": "_includes/project-card.html",
    "content": "<!-- Used by theme-projects-builtin-1 -->\n\n<div class=\"card\">\n  {% if include.page.image %}\n    <div class=\"image\">\n      <img src=\"{{ site.baseurl }}/{{ include.page.image }}\">\n    </div>\n  {% endif %}\n  <div class=\"content\">\n    <span class=\"header\">{{ include.page.title }}</span>\n    <div class=\"meta\">\n      <span class=\"date\">{{ include.page.date }}</span>\n    </div>\n\n    <div class=\"description\">\n      {{ include.page.summary }}\n    </div>\n  </div>\n\n  <div class=\"extra content\">\n    <div class=\"ui mini labels\">\n      {% for label in include.page.labels %}\n        <div class=\"ui basic label\">{{ label }}</div>\n      {% endfor %}\n    </div>\n  </div>\n    {% if page.projecturl %}\n      <a class=\"ui bottom attached button\" href=\"{{ page.projecturl }}\">Read More</a>\n    {% else %}\n      <a class=\"ui bottom attached button\" href=\"{{ site.baseurl}}{{ include.page.url }}\">Read More</a>\n    {% endif %}\n\n</div>"
  },
  {
    "path": "_includes/project-row.html",
    "content": "<!-- Used by theme-projects-builtin-2 -->\n\n<div class=\"row\">\n  <div style=\"text-align: center\" class=\"three wide column\">\n    {% if include.page.image %}\n    <img class=\"ui middle aligned medium circular image\" src=\"{{ site.baseurl }}/{{ include.page.image }}\">\n    {% endif %}\n  </div>\n\n  <div class=\"six wide column\">\n    <h2 class=\"header no-bottom\">{{ include.page.title }}</h2>\n    <p class=\"\">{{ include.page.date }}</p>\n    <p>{{ include.page.summary }}</p>\n\n    <p>\n    <div style=\"text-align: center\" class=\"ui mini labels\">\n      {% for label in include.page.labels %}\n      <div class=\"ui basic label\">{{ label }}</div>\n      {% endfor %}\n    </div>\n    </p>\n\n    <div style=\"text-align: center\">\n      {% if page.projecturl %}\n        <a class=\"ui basic button\" href=\"{{ page.projecturl }}\">Read More</a>\n      {% else %}\n        <a class=\"ui basic button\" href=\"{{ site.baseurl}}{{ include.page.url }}\">Read More</a>\n      {% endif %}\n    </div>\n    <hr style=\"margin-top: 20px\">\n  </div>\n</div>"
  },
  {
    "path": "_includes/theme-bio-builtin-1.html",
    "content": "<div style=\"margin-top: 10px; \" class=\"ui stackable grid container\">\n\n  <div class=\"sixteen wide column no-bottom\">\n    <h2 class=\"ui center aligned header no-bottom\">{{ site.data.bio.basics.name }}</h2>\n  </div>\n\n  <div class=\"eight wide left aligned column\">\n    {% include bio-network-links.html %}\n  </div>\n\n  <div class=\"eight wide right aligned column\">\n    {% include bio-address.html %}\n  </div>\n</div>\n\n<div style=\"margin-bottom: 20px\" class=\"ui stackable grid container\">\n  {% include bio-interests-1.html %}\n  {% include bio-skills-1.html %}\n  {% include bio-education-1.html %}\n  {% include bio-work-1.html %}\n  {% include bio-volunteer-1.html %}\n  {% include bio-publications-1.html %}\n  {% include bio-awards-1.html %}\n  {% include bio-references-1.html %}\n</div>\n"
  },
  {
    "path": "_includes/theme-bio-builtin-2.html",
    "content": "<div style=\"margin-top: 10px; margin-bottom: 20px\" class=\"ui stackable grid container\">\n\n  <div class=\"sixteen wide column no-bottom\">\n    <h2 class=\"ui center aligned header no-bottom\">{{ site.data.bio.basics.name }}</h2>\n  </div>\n\n  <div class=\"eight wide left aligned column\">\n    {% include bio-network-links.html %}\n  </div>\n\n  <div class=\"eight wide right aligned column\">\n    {% include bio-address.html %}\n  </div>\n\n  {% include bio-education-2.html %}\n  {% include bio-work-2.html %}\n  {% include bio-volunteer-2.html %}\n  {% include bio-publications-2.html %}\n  {% include bio-awards-2.html %}\n</div>"
  },
  {
    "path": "_includes/theme-essays-builtin-1.html",
    "content": "<div style=\"padding-top: 20px\" class=\"ui container \">\n\n  <div class=\"ui stackable centered four cards\">\n    {% assign essay_pages = site.pages | where: \"type\", \"essay\" | sort: \"date\" | reverse %}\n      {% for page in essay_pages %}\n        {% unless page.draft %}\n          {% include essay-card.html page=page %}\n        {% endunless %}\n      {% endfor %}\n  </div>\n</div>"
  },
  {
    "path": "_includes/theme-essays-builtin-1a.html",
    "content": "<div style=\"padding-top: 20px\" class=\"ui container \">\n\n  <div class=\"ui stackable centered four cards\">\n    {% assign essay_pages = site.pages | where: \"type\", \"essay\" | sort: \"date\" | reverse %}\n      {% for page in essay_pages %}\n        {% unless page.draft %}\n          {% include essay-card-1a.html page=page %}\n        {% endunless %}\n      {% endfor %}\n  </div>\n</div>"
  },
  {
    "path": "_includes/theme-essays-builtin-2.html",
    "content": "\n<div style=\"padding-top: 20px\" class=\"ui four column centered stackable grid container\">\n  {% assign essay_pages = site.pages | where: \"type\", \"essay\" | sort: \"date\" | reverse %}\n  {% for page in essay_pages %}\n    {% unless page.draft %}\n      {% include essay-row.html page=page %}\n    {% endunless %}\n  {% endfor %}\n</div>"
  },
  {
    "path": "_includes/theme-home-builtin-1.html",
    "content": "<!-- Home page design with small circular image bisecting card. -->\n\n{% assign essay_pages = site.pages | where: \"type\", \"essay\"  | where_exp: \"page\", \"page.draft != true\" %}\n{% assign project_pages = site.pages | where: \"type\", \"project\" | where_exp: \"page\", \"page.draft != true\" %}\n{% assign num_essays = essay_pages.size %}\n{% assign num_projects = project_pages.size %}\n\n<div style=\"height: 100%; margin-top: -75px\" class=\"ui middle aligned grid \">\n\n  <div class=\"column\">\n\n    <div style=\"position: relative; top: 75px; z-index: 1\" class=\"ui fluid centered small circular image\">\n      <img src=\"{{ site.data.bio.basics.picture }}\">\n    </div>\n\n\n    <div style=\"max-width: 500px; padding-top: 75px; margin-top: 0px\" class=\"ui fluid centered card\">\n\n      <div class=\"center aligned content\">\n        <span class=\"header\">{{ site.data.bio.basics.name }}</span>\n        <div class=\"meta\">\n          <span class=\"date\">{{ site.data.bio.basics.label }}</span>\n        </div>\n        <div class=\"left aligned description\">\n          {{ site.data.bio.basics.summary }}\n        </div>\n      </div>\n      <div class=\"center aligned content\">\n        <div class=\"description\">\n          Interests:\n          {% for interest in site.data.bio.interests %}\n            {{ interest.name }}{% if forloop.last != true %}, {% endif %}\n          {% endfor %}\n\n        </div>\n      </div>\n      <div class=\"center aligned extra content\">\n        {% include home-network-links.html %}\n      </div>\n      <div class=\"center aligned content\">\n        <a href=\"{{ site.baseurl}}/projects/\">\n          <button class=\"ui basic button\">Projects ({{ num_projects }})</button>\n        </a>\n        <a href=\"{{ site.baseurl}}/essays/\">\n          <button class=\"ui basic button\">Essays ({{ num_essays }})</button>\n        </a>\n        <a href=\"{{ site.baseurl}}/bio/\">\n          <button class=\"ui basic button\">{{ site.bio-page-label }}</button>\n        </a>\n      </div>\n    </div>\n  </div>\n\n</div>"
  },
  {
    "path": "_includes/theme-home-builtin-2.html",
    "content": "<!-- Home page design with large image to left of bio info. -->\n{% assign essay_pages = site.pages | where: \"type\", \"essay\"  | where_exp: \"page\", \"page.draft != true\" %}\n{% assign project_pages = site.pages | where: \"type\", \"project\" | where_exp: \"page\", \"page.draft != true\" %}\n{% assign num_essays = essay_pages.size %}\n{% assign num_projects = project_pages.size %}\n\n<div style=\"height: 100%;\" class=\"ui middle aligned two column centered stackable grid container\">\n\n  <div style=\"text-align: center\" class=\"column\">\n    <div  class=\"ui rounded image\">\n      <img style=\"max-width: 300px\" src=\"{{ site.data.bio.basics.picture }}\">\n    </div>\n  </div>\n\n  <div class=\"column\">\n    <h2 class=\"header no-bottom\">{{ site.data.bio.basics.name }}</h2>\n    <p class=\"\">{{ site.data.bio.basics.label }}</p>\n    <p class=\"\">\n      {{ site.data.bio.basics.summary }}\n    </p>\n    <p>Interests:\n      {% for interest in site.data.bio.interests %}\n        {{ interest.name }}{% if forloop.last != true %}, {% endif %}\n      {% endfor %}\n    </p>\n    <p style=\"text-align: center\">\n      {% include home-network-links.html %}\n    </p>\n    <p style=\"text-align: center\">\n      <a href=\"{{ site.baseurl}}/projects/\">\n        <button class=\"ui basic button\">Projects ({{ num_projects }})</button>\n      </a>\n      <a href=\"{{ site.baseurl}}/essays/\">\n        <button class=\"ui basic button\">Essays ({{ num_essays }})</button>\n      </a>\n      <a href=\"{{ site.baseurl}}/bio/\">\n        <button class=\"ui basic button\">{{ site.bio-page-label }}</button>\n      </a>\n    </p>\n  </div>\n</div>"
  },
  {
    "path": "_includes/theme-home-builtin-3.html",
    "content": "<!-- Home page design with card including image -->\n{% assign essay_pages = site.pages | where: \"type\", \"essay\"  | where_exp: \"page\", \"page.draft != true\" %}\n{% assign project_pages = site.pages | where: \"type\", \"project\" | where_exp: \"page\", \"page.draft != true\" %}\n{% assign num_essays = essay_pages.size %}\n{% assign num_projects = project_pages.size %}\n\n<div style=\"height: 100%\" class=\"ui middle aligned grid \">\n\n  <div class=\"column\">\n\n    <div style=\"max-width: 400px; margin-top: 0px\" class=\"ui fluid centered card\">\n      <div class=\"image\">\n        <img src=\"{{ site.data.bio.basics.picture }}\">\n      </div>\n\n      <div class=\"center aligned content\">\n        <span class=\"header\">{{ site.data.bio.basics.name }}</span>\n        <div class=\"meta\">\n          <span class=\"date\">{{ site.data.bio.basics.label }}</span>\n        </div>\n        <div class=\"left aligned description\">\n          {{ site.data.bio.basics.summary }}\n        </div>\n      </div>\n      <div class=\"center aligned content\">\n        <div class=\"description\">\n          Interests:\n          {% for interest in site.data.bio.interests %}\n          {{ interest.name }}{% if forloop.last != true %}, {% endif %}\n          {% endfor %}\n\n        </div>\n      </div>\n      <div class=\"center aligned extra content\">\n        {% include home-network-links.html %}\n      </div>\n      <div class=\"center aligned content\">\n        <a href=\"{{ site.baseurl}}/projects/\">\n          <button class=\"ui basic button\">Projects ({{ num_projects }})</button>\n        </a>\n        <a href=\"{{ site.baseurl}}/essays/\">\n          <button class=\"ui basic button\">Essays ({{ num_essays }})</button>\n        </a>\n        <a href=\"{{ site.baseurl}}/bio/\">\n          <button class=\"ui basic button\">{{ site.bio-page-label }}</button>\n        </a>\n      </div>\n    </div>\n  </div>\n\n</div>"
  },
  {
    "path": "_includes/theme-projects-builtin-1.html",
    "content": "<div style=\"padding-top: 20px\" class=\"ui container \">\n\n  <div class=\"ui stackable centered four cards\">\n    {% assign project_pages = site.pages | where: \"type\", \"project\" | sort: \"date\" | reverse %}\n    {% for page in project_pages %}\n      {% unless page.draft %}\n        {% include project-card.html page=page %}\n      {% endunless %}\n    {% endfor %}\n  </div>\n</div>"
  },
  {
    "path": "_includes/theme-projects-builtin-1a.html",
    "content": "<!-- Like theme-projects-builtin-1, but uses project-card-2.html (i.e. entire card is a link). -->\n\n<div style=\"padding-top: 20px\" class=\"ui container \">\n\n  <div class=\"ui stackable centered four cards\">\n    {% assign project_pages = site.pages | where: \"type\", \"project\" | sort: \"date\" | reverse %}\n    {% for page in project_pages %}\n      {% unless page.draft %}\n        {% include project-card-1a.html page=page %}\n      {% endunless %}\n    {% endfor %}\n  </div>\n</div>"
  },
  {
    "path": "_includes/theme-projects-builtin-2.html",
    "content": "<div style=\"padding-top: 20px\" class=\"ui four column centered stackable grid container\">\n\n  {% assign project_pages = site.pages | where: \"type\", \"project\" | sort: \"title\" %}\n  {% for page in project_pages %}\n    {% unless page.draft %}\n      {% include project-row.html page=page %}\n    {% endunless %}\n  {% endfor %}\n\n</div>"
  },
  {
    "path": "_layouts/bio.html",
    "content": "---\nlayout: default\n---\n\n{% include menubar.html active=\"bio\"%}\n\n{{ content }}\n"
  },
  {
    "path": "_layouts/default.html",
    "content": "<!DOCTYPE html>\n<html>\n\n  {% include head.html %}\n\n  <body>\n    {{ content }}\n    {% include footer.html %}\n\n  </body>\n\n</html>\n"
  },
  {
    "path": "_layouts/essay.html",
    "content": "---\nlayout: essays\n---\n\n<div style=\"margin-top: 20px; margin-bottom: 20px\" class=\"ui text container\">\n  <h1>{{ page.title }}</h1>\n  <span class=\"date\">{{ page.date | date_to_string }}</span>\n  <hr>\n  {{ content }}\n</div>"
  },
  {
    "path": "_layouts/essays.html",
    "content": "---\nlayout: default\n---\n\n{% include menubar.html active=\"essays\" %}\n\n{{ content }}\n\n"
  },
  {
    "path": "_layouts/missingpage.html",
    "content": "---\nlayout: default\n---\n\n{% include menubar.html active=\"\" %}\n\n<div style=\"padding-top: 20px\" class=\"ui container \">\n  <p>I'm sorry, that URL could not be found. Perhaps you were looking for one of the following:</p>\n\n  <h3>Essays</h3>\n  <ul>\n    {% assign essay_pages = site.pages | where: \"type\", \"essay\" | sort: \"date\" | reverse %}\n    {% for page in essay_pages %}\n      <li><a href=\"{{ site.baseurl }}{{ page.url }}\">{{ page.title }}</a></li>\n    {% endfor %}\n  </ul>\n\n  <h3>Projects</h3>\n  <ul>\n    {% assign project_pages = site.pages | where: \"type\", \"project\" | sort: \"title\" %}\n    {% for page in project_pages %}\n    <li><a href=\"{{ site.baseurl }}{{ page.url }}\">{{ page.title }}</a></li>\n    {% endfor %}\n  </ul>\n\n</div>\n\n"
  },
  {
    "path": "_layouts/project.html",
    "content": "---\nlayout: projects\n---\n\n<div style=\"margin-top: 20px; margin-bottom: 20px\" class=\"ui text container\">\n <h1>{{ page.title }}</h1>\n {{ content }}\n</div>"
  },
  {
    "path": "_layouts/projects.html",
    "content": "---\nlayout: default\n---\n\n{% include menubar.html active=\"projects\" %}\n\n{{ content }}\n\n"
  },
  {
    "path": "bio/index.html",
    "content": "---\nlayout: bio\n---\n\n{% include {{ site.theme-bio }} %}\n"
  },
  {
    "path": "css/print-customizations.scss",
    "content": "---\n# Provide front matter so Jekyll processes this file as SASS.\n---\n\n// Put your custom CSS for printing pages here."
  },
  {
    "path": "css/print-default.scss",
    "content": "---\n# Provide front matter so Jekyll processes this file as SASS.\n---\n\n@charset \"utf-8\";\n\n// Used to remove menubar from page when printing.\n.nonprintable {\n  display: none;\n}\n\n// Make text smaller, remove spacing between list items when printing.\n@media print {\n\n  p, a, li {\n    font-size: 12px;\n  }\n\n  h1, h2.ui.header, h3.ui.header {\n    font-size: 14px;\n  }\n\n  a {\n    color: black;\n  }\n\n  ul li {\n    padding: 0px;\n    margin: 0px;\n  }\n}"
  },
  {
    "path": "css/rouge/base16.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight, .highlight .w {\n  color: #303030;\n}\n.highlight .err {\n  color: #151515;\n  background-color: #ac4142;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {\n  color: #505050;\n}\n.highlight .cp {\n  color: #f4bf75;\n}\n.highlight .nt {\n  color: #f4bf75;\n}\n.highlight .o, .highlight .ow {\n  color: #d0d0d0;\n}\n.highlight .p, .highlight .pi {\n  color: #d0d0d0;\n}\n.highlight .gi {\n  color: #90a959;\n}\n.highlight .gd {\n  color: #ac4142;\n}\n.highlight .gh {\n  color: #6a9fb5;\n  background-color: #151515;\n  font-weight: bold;\n}\n.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {\n  color: #aa759f;\n}\n.highlight .kc {\n  color: #d28445;\n}\n.highlight .kt {\n  color: #d28445;\n}\n.highlight .kd {\n  color: #d28445;\n}\n.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {\n  color: #90a959;\n}\n.highlight .sr {\n  color: #75b5aa;\n}\n.highlight .si {\n  color: #8f5536;\n}\n.highlight .se {\n  color: #8f5536;\n}\n.highlight .nn {\n  color: #f4bf75;\n}\n.highlight .nc {\n  color: #f4bf75;\n}\n.highlight .no {\n  color: #f4bf75;\n}\n.highlight .na {\n  color: #6a9fb5;\n}\n.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {\n  color: #90a959;\n}\n.highlight .ss {\n  color: #90a959;\n}\n"
  },
  {
    "path": "css/rouge/base16.dark.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight, .highlight .w {\n  color: #d0d0d0;\n  background-color: #151515;\n}\n.highlight .err {\n  color: #151515;\n  background-color: #ac4142;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {\n  color: #505050;\n}\n.highlight .cp {\n  color: #f4bf75;\n}\n.highlight .nt {\n  color: #f4bf75;\n}\n.highlight .o, .highlight .ow {\n  color: #d0d0d0;\n}\n.highlight .p, .highlight .pi {\n  color: #d0d0d0;\n}\n.highlight .gi {\n  color: #90a959;\n}\n.highlight .gd {\n  color: #ac4142;\n}\n.highlight .gh {\n  color: #6a9fb5;\n  background-color: #151515;\n  font-weight: bold;\n}\n.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {\n  color: #aa759f;\n}\n.highlight .kc {\n  color: #d28445;\n}\n.highlight .kt {\n  color: #d28445;\n}\n.highlight .kd {\n  color: #d28445;\n}\n.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {\n  color: #90a959;\n}\n.highlight .sr {\n  color: #75b5aa;\n}\n.highlight .si {\n  color: #8f5536;\n}\n.highlight .se {\n  color: #8f5536;\n}\n.highlight .nn {\n  color: #f4bf75;\n}\n.highlight .nc {\n  color: #f4bf75;\n}\n.highlight .no {\n  color: #f4bf75;\n}\n.highlight .na {\n  color: #6a9fb5;\n}\n.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {\n  color: #90a959;\n}\n.highlight .ss {\n  color: #90a959;\n}\n"
  },
  {
    "path": "css/rouge/base16.light.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight, .highlight .w {\n  color: #303030;\n}\n.highlight .err {\n  color: #151515;\n  background-color: #ac4142;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {\n  color: #505050;\n}\n.highlight .cp {\n  color: #f4bf75;\n}\n.highlight .nt {\n  color: #f4bf75;\n}\n.highlight .o, .highlight .ow {\n  color: #d0d0d0;\n}\n.highlight .p, .highlight .pi {\n  color: #d0d0d0;\n}\n.highlight .gi {\n  color: #90a959;\n}\n.highlight .gd {\n  color: #ac4142;\n}\n.highlight .gh {\n  color: #6a9fb5;\n  background-color: #151515;\n  font-weight: bold;\n}\n.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {\n  color: #aa759f;\n}\n.highlight .kc {\n  color: #d28445;\n}\n.highlight .kt {\n  color: #d28445;\n}\n.highlight .kd {\n  color: #d28445;\n}\n.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {\n  color: #90a959;\n}\n.highlight .sr {\n  color: #75b5aa;\n}\n.highlight .si {\n  color: #8f5536;\n}\n.highlight .se {\n  color: #8f5536;\n}\n.highlight .nn {\n  color: #f4bf75;\n}\n.highlight .nc {\n  color: #f4bf75;\n}\n.highlight .no {\n  color: #f4bf75;\n}\n.highlight .na {\n  color: #6a9fb5;\n}\n.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {\n  color: #90a959;\n}\n.highlight .ss {\n  color: #90a959;\n}\n"
  },
  {
    "path": "css/rouge/base16.solarized.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight, .highlight .w {\n  color: #586e75;\n}\n.highlight .err {\n  color: #002b36;\n  background-color: #dc322f;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {\n  color: #657b83;\n}\n.highlight .cp {\n  color: #b58900;\n}\n.highlight .nt {\n  color: #b58900;\n}\n.highlight .o, .highlight .ow {\n  color: #93a1a1;\n}\n.highlight .p, .highlight .pi {\n  color: #93a1a1;\n}\n.highlight .gi {\n  color: #859900;\n}\n.highlight .gd {\n  color: #dc322f;\n}\n.highlight .gh {\n  color: #268bd2;\n  background-color: #002b36;\n  font-weight: bold;\n}\n.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {\n  color: #6c71c4;\n}\n.highlight .kc {\n  color: #cb4b16;\n}\n.highlight .kt {\n  color: #cb4b16;\n}\n.highlight .kd {\n  color: #cb4b16;\n}\n.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {\n  color: #859900;\n}\n.highlight .sr {\n  color: #2aa198;\n}\n.highlight .si {\n  color: #d33682;\n}\n.highlight .se {\n  color: #d33682;\n}\n.highlight .nn {\n  color: #b58900;\n}\n.highlight .nc {\n  color: #b58900;\n}\n.highlight .no {\n  color: #b58900;\n}\n.highlight .na {\n  color: #268bd2;\n}\n.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {\n  color: #859900;\n}\n.highlight .ss {\n  color: #859900;\n}\n"
  },
  {
    "path": "css/rouge/colorful.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight, .highlight .w {\n  color: #bbbbbb;\n  background-color: #000;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1 {\n  color: #888;\n}\n.highlight .cp {\n  color: #579;\n}\n.highlight .cs {\n  color: #cc0000;\n  font-weight: bold;\n}\n.highlight .k, .highlight .kc, .highlight .kd, .highlight .kn, .highlight .kr, .highlight .kv {\n  color: #080;\n  font-weight: bold;\n}\n.highlight .kp {\n  color: #038;\n}\n.highlight .kt {\n  color: #339;\n}\n.highlight .o {\n  color: #333;\n}\n.highlight .ow {\n  color: #000;\n  font-weight: bold;\n}\n.highlight .nb, .highlight .bp {\n  color: #007020;\n}\n.highlight .nf {\n  color: #06B;\n  font-weight: bold;\n}\n.highlight .nc {\n  color: #B06;\n  font-weight: bold;\n}\n.highlight .nn {\n  color: #0e84b5;\n  font-weight: bold;\n}\n.highlight .ne {\n  color: #F00;\n  font-weight: bold;\n}\n.highlight .nv {\n  color: #963;\n}\n.highlight .vi {\n  color: #33B;\n}\n.highlight .vc {\n  color: #369;\n}\n.highlight .vg {\n  color: #d70;\n  font-weight: bold;\n}\n.highlight .no {\n  color: #036;\n  font-weight: bold;\n}\n.highlight .nl {\n  color: #970;\n  font-weight: bold;\n}\n.highlight .ni {\n  color: #800;\n  font-weight: bold;\n}\n.highlight .na {\n  color: #00C;\n}\n.highlight .nt {\n  color: #070;\n}\n.highlight .nd {\n  color: #555;\n  font-weight: bold;\n}\n.highlight .s, .highlight .sb, .highlight .s2, .highlight .sh, .highlight .s1 {\n  background-color: #fff0f0;\n}\n.highlight .sc {\n  color: #04D;\n}\n.highlight .sd {\n  color: #D42;\n}\n.highlight .si {\n  background-color: #eee;\n}\n.highlight .se {\n  color: #666;\n  font-weight: bold;\n}\n.highlight .sr {\n  color: #000;\n  background-color: #fff0ff;\n}\n.highlight .ss {\n  color: #A60;\n}\n.highlight .sx {\n  color: #D20;\n}\n.highlight .m, .highlight .mb, .highlight .mx {\n  color: #60E;\n  font-weight: bold;\n}\n.highlight .mi, .highlight .il {\n  color: #00D;\n  font-weight: bold;\n}\n.highlight .mf {\n  color: #60E;\n  font-weight: bold;\n}\n.highlight .mh {\n  color: #058;\n  font-weight: bold;\n}\n.highlight .mo {\n  color: #40E;\n  font-weight: bold;\n}\n.highlight .gh {\n  color: #000080;\n  font-weight: bold;\n}\n.highlight .gu {\n  color: #800080;\n  font-weight: bold;\n}\n.highlight .gd {\n  color: #A00000;\n}\n.highlight .gi {\n  color: #00A000;\n}\n.highlight .gr {\n  color: #FF0000;\n}\n.highlight .ge {\n  font-style: italic;\n}\n.highlight .gs {\n  font-weight: bold;\n}\n.highlight .gp {\n  color: #c65d09;\n  font-weight: bold;\n}\n.highlight .go {\n  color: #888;\n}\n.highlight .gt {\n  color: #04D;\n}\n.highlight .err {\n  color: #F00;\n  background-color: #FAA;\n}\n"
  },
  {
    "path": "css/rouge/github.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight .cm {\n  color: #999988;\n  font-style: italic;\n}\n.highlight .cp {\n  color: #999999;\n  font-weight: bold;\n}\n.highlight .c1 {\n  color: #999988;\n  font-style: italic;\n}\n.highlight .cs {\n  color: #999999;\n  font-weight: bold;\n  font-style: italic;\n}\n.highlight .c, .highlight .cd {\n  color: #999988;\n  font-style: italic;\n}\n.highlight .err {\n  color: #a61717;\n  background-color: #e3d2d2;\n}\n.highlight .gd {\n  color: #000000;\n  background-color: #ffdddd;\n}\n.highlight .ge {\n  color: #000000;\n  font-style: italic;\n}\n.highlight .gr {\n  color: #aa0000;\n}\n.highlight .gh {\n  color: #999999;\n}\n.highlight .gi {\n  color: #000000;\n  background-color: #ddffdd;\n}\n.highlight .go {\n  color: #888888;\n}\n.highlight .gp {\n  color: #555555;\n}\n.highlight .gs {\n  font-weight: bold;\n}\n.highlight .gu {\n  color: #aaaaaa;\n}\n.highlight .gt {\n  color: #aa0000;\n}\n.highlight .kc {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .kd {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .kn {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .kp {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .kr {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .kt {\n  color: #445588;\n  font-weight: bold;\n}\n.highlight .k, .highlight .kv {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .mf {\n  color: #009999;\n}\n.highlight .mh {\n  color: #009999;\n}\n.highlight .il {\n  color: #009999;\n}\n.highlight .mi {\n  color: #009999;\n}\n.highlight .mo {\n  color: #009999;\n}\n.highlight .m, .highlight .mb, .highlight .mx {\n  color: #009999;\n}\n.highlight .sb {\n  color: #d14;\n}\n.highlight .sc {\n  color: #d14;\n}\n.highlight .sd {\n  color: #d14;\n}\n.highlight .s2 {\n  color: #d14;\n}\n.highlight .se {\n  color: #d14;\n}\n.highlight .sh {\n  color: #d14;\n}\n.highlight .si {\n  color: #d14;\n}\n.highlight .sx {\n  color: #d14;\n}\n.highlight .sr {\n  color: #009926;\n}\n.highlight .s1 {\n  color: #d14;\n}\n.highlight .ss {\n  color: #990073;\n}\n.highlight .s {\n  color: #d14;\n}\n.highlight .na {\n  color: #008080;\n}\n.highlight .bp {\n  color: #999999;\n}\n.highlight .nb {\n  color: #0086B3;\n}\n.highlight .nc {\n  color: #445588;\n  font-weight: bold;\n}\n.highlight .no {\n  color: #008080;\n}\n.highlight .nd {\n  color: #3c5d5d;\n  font-weight: bold;\n}\n.highlight .ni {\n  color: #800080;\n}\n.highlight .ne {\n  color: #990000;\n  font-weight: bold;\n}\n.highlight .nf {\n  color: #990000;\n  font-weight: bold;\n}\n.highlight .nl {\n  color: #990000;\n  font-weight: bold;\n}\n.highlight .nn {\n  color: #555555;\n}\n.highlight .nt {\n  color: #000080;\n}\n.highlight .vc {\n  color: #008080;\n}\n.highlight .vg {\n  color: #008080;\n}\n.highlight .vi {\n  color: #008080;\n}\n.highlight .nv {\n  color: #008080;\n}\n.highlight .ow {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .o {\n  color: #000000;\n  font-weight: bold;\n}\n.highlight .w {\n  color: #bbbbbb;\n}\n.highlight {\n  background-color: #f8f8f8;\n}\n"
  },
  {
    "path": "css/rouge/gruvbox.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight, .highlight .w {\n  color: #fbf1c7;\n  background-color: #282828;\n}\n.highlight .err {\n  color: #fb4934;\n  background-color: #282828;\n  font-weight: bold;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {\n  color: #928374;\n  font-style: italic;\n}\n.highlight .cp {\n  color: #8ec07c;\n}\n.highlight .nt {\n  color: #fb4934;\n}\n.highlight .o, .highlight .ow {\n  color: #fbf1c7;\n}\n.highlight .p, .highlight .pi {\n  color: #fbf1c7;\n}\n.highlight .gi {\n  color: #b8bb26;\n  background-color: #282828;\n}\n.highlight .gd {\n  color: #fb4934;\n  background-color: #282828;\n}\n.highlight .gh {\n  color: #b8bb26;\n  font-weight: bold;\n}\n.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {\n  color: #fb4934;\n}\n.highlight .kc {\n  color: #d3869b;\n}\n.highlight .kt {\n  color: #fabd2f;\n}\n.highlight .kd {\n  color: #fe8019;\n}\n.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {\n  color: #b8bb26;\n  font-style: italic;\n}\n.highlight .si {\n  color: #b8bb26;\n  font-style: italic;\n}\n.highlight .sr {\n  color: #b8bb26;\n  font-style: italic;\n}\n.highlight .se {\n  color: #fe8019;\n}\n.highlight .nn {\n  color: #8ec07c;\n}\n.highlight .nc {\n  color: #8ec07c;\n}\n.highlight .no {\n  color: #d3869b;\n}\n.highlight .na {\n  color: #b8bb26;\n}\n.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {\n  color: #d3869b;\n}\n.highlight .ss {\n  color: #83a598;\n}\n"
  },
  {
    "path": "css/rouge/igorpro.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight, .highlight .w {\n  color: #444444;\n}\n.highlight .cp {\n  color: #CC00A3;\n}\n.highlight .cs {\n  color: #CC00A3;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1 {\n  color: #FF0000;\n}\n.highlight .kc {\n  color: #C34E00;\n}\n.highlight .kd {\n  color: #0000FF;\n}\n.highlight .kr {\n  color: #007575;\n}\n.highlight .k, .highlight .kn, .highlight .kp, .highlight .kt, .highlight .kv {\n  color: #0000FF;\n}\n.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .se, .highlight .sh, .highlight .si, .highlight .sx, .highlight .sr, .highlight .s1, .highlight .ss {\n  color: #009C00;\n}\n.highlight .nb, .highlight .bp {\n  color: #C34E00;\n}\n"
  },
  {
    "path": "css/rouge/molokai.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight .c, .highlight .cd {\n  color: #5e5d83;\n  font-style: italic;\n}\n.highlight .cm {\n  color: #5e5d83;\n  font-style: italic;\n}\n.highlight .c1 {\n  color: #5e5d83;\n  font-style: italic;\n}\n.highlight .cp {\n  color: #465457;\n  font-weight: bold;\n}\n.highlight .cs {\n  color: #465457;\n  font-weight: bold;\n  font-style: italic;\n}\n.highlight .err {\n  color: #f8f8f2;\n  background-color: #403d3d;\n}\n.highlight .gi {\n  color: #a6e22e;\n}\n.highlight .gd {\n  color: #f92672;\n}\n.highlight .ge {\n  color: #1b1d1e;\n  font-style: italic;\n}\n.highlight .gr {\n  color: #f92672;\n}\n.highlight .gt {\n  color: #f92672;\n}\n.highlight .gh {\n  color: #403d3d;\n}\n.highlight .go {\n  color: #403d3d;\n}\n.highlight .gp {\n  color: #66d9ef;\n}\n.highlight .gs {\n  font-weight: bold;\n}\n.highlight .gu {\n  color: #465457;\n}\n.highlight .k, .highlight .kv {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kc {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kd {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kp {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kr {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kt {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kn {\n  color: #f92672;\n  font-weight: bold;\n}\n.highlight .ow {\n  color: #f92672;\n  font-weight: bold;\n}\n.highlight .o {\n  color: #f92672;\n  font-weight: bold;\n}\n.highlight .mf {\n  color: #af87ff;\n}\n.highlight .mh {\n  color: #af87ff;\n}\n.highlight .il {\n  color: #af87ff;\n}\n.highlight .mi {\n  color: #af87ff;\n}\n.highlight .mo {\n  color: #af87ff;\n}\n.highlight .m, .highlight .mb, .highlight .mx {\n  color: #af87ff;\n}\n.highlight .se {\n  color: #af87ff;\n}\n.highlight .sb {\n  color: #d7d787;\n}\n.highlight .sc {\n  color: #d7d787;\n}\n.highlight .sd {\n  color: #d7d787;\n}\n.highlight .s2 {\n  color: #d7d787;\n}\n.highlight .sh {\n  color: #d7d787;\n}\n.highlight .si {\n  color: #d7d787;\n}\n.highlight .sx {\n  color: #d7d787;\n}\n.highlight .sr {\n  color: #d7d787;\n}\n.highlight .s1 {\n  color: #d7d787;\n}\n.highlight .ss {\n  color: #d7d787;\n}\n.highlight .s {\n  color: #d7d787;\n}\n.highlight .na {\n  color: #a6e22e;\n}\n.highlight .nc {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .nd {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .ne {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .nf {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .no {\n  color: #66d9ef;\n}\n.highlight .bp {\n  color: #f8f8f2;\n}\n.highlight .nb {\n  color: #f8f8f2;\n}\n.highlight .ni {\n  color: #f8f8f2;\n}\n.highlight .nn {\n  color: #f8f8f2;\n}\n.highlight .vc {\n  color: #f8f8f2;\n}\n.highlight .vg {\n  color: #f8f8f2;\n}\n.highlight .vi {\n  color: #f8f8f2;\n}\n.highlight .nv {\n  color: #f8f8f2;\n}\n.highlight .w {\n  color: #f8f8f2;\n}\n.highlight .nl {\n  color: #f8f8f2;\n  font-weight: bold;\n}\n.highlight .nt {\n  color: #f92672;\n}\n.highlight {\n  color: #f8f8f2;\n  background-color: #1b1d1e;\n}\n"
  },
  {
    "path": "css/rouge/monokai.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight .c, .highlight .cd {\n  color: #75715e;\n  font-style: italic;\n}\n.highlight .cm {\n  color: #75715e;\n  font-style: italic;\n}\n.highlight .c1 {\n  color: #75715e;\n  font-style: italic;\n}\n.highlight .cp {\n  color: #75715e;\n  font-weight: bold;\n}\n.highlight .cs {\n  color: #75715e;\n  font-weight: bold;\n  font-style: italic;\n}\n.highlight .err {\n  color: #960050;\n  background-color: #1e0010;\n}\n.highlight .gi {\n  color: #ffffff;\n  background-color: #324932;\n}\n.highlight .gd {\n  color: #ffffff;\n  background-color: #493131;\n}\n.highlight .ge {\n  color: #000000;\n  font-style: italic;\n}\n.highlight .gr {\n  color: #aa0000;\n}\n.highlight .gt {\n  color: #aa0000;\n}\n.highlight .gh {\n  color: #999999;\n}\n.highlight .go {\n  color: #888888;\n}\n.highlight .gp {\n  color: #555555;\n}\n.highlight .gs {\n  font-weight: bold;\n}\n.highlight .gu {\n  color: #aaaaaa;\n}\n.highlight .k, .highlight .kv {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kc {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kd {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kp {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kr {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kt {\n  color: #66d9ef;\n  font-weight: bold;\n}\n.highlight .kn {\n  color: #f92672;\n  font-weight: bold;\n}\n.highlight .ow {\n  color: #f92672;\n  font-weight: bold;\n}\n.highlight .o {\n  color: #f92672;\n  font-weight: bold;\n}\n.highlight .mf {\n  color: #ae81ff;\n}\n.highlight .mh {\n  color: #ae81ff;\n}\n.highlight .il {\n  color: #ae81ff;\n}\n.highlight .mi {\n  color: #ae81ff;\n}\n.highlight .mo {\n  color: #ae81ff;\n}\n.highlight .m, .highlight .mb, .highlight .mx {\n  color: #ae81ff;\n}\n.highlight .se {\n  color: #ae81ff;\n}\n.highlight .sb {\n  color: #e6db74;\n}\n.highlight .sc {\n  color: #e6db74;\n}\n.highlight .sd {\n  color: #e6db74;\n}\n.highlight .s2 {\n  color: #e6db74;\n}\n.highlight .sh {\n  color: #e6db74;\n}\n.highlight .si {\n  color: #e6db74;\n}\n.highlight .sx {\n  color: #e6db74;\n}\n.highlight .sr {\n  color: #e6db74;\n}\n.highlight .s1 {\n  color: #e6db74;\n}\n.highlight .ss {\n  color: #e6db74;\n}\n.highlight .s {\n  color: #e6db74;\n}\n.highlight .na {\n  color: #a6e22e;\n}\n.highlight .nc {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .nd {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .ne {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .nf {\n  color: #a6e22e;\n  font-weight: bold;\n}\n.highlight .no {\n  color: #66d9ef;\n}\n.highlight .bp {\n  color: #f8f8f2;\n}\n.highlight .nb {\n  color: #f8f8f2;\n}\n.highlight .ni {\n  color: #f8f8f2;\n}\n.highlight .nn {\n  color: #f8f8f2;\n}\n.highlight .vc {\n  color: #f8f8f2;\n}\n.highlight .vg {\n  color: #f8f8f2;\n}\n.highlight .vi {\n  color: #f8f8f2;\n}\n.highlight .nv {\n  color: #f8f8f2;\n}\n.highlight .w {\n  color: #f8f8f2;\n}\n.highlight .nl {\n  color: #f8f8f2;\n  font-weight: bold;\n}\n.highlight .nt {\n  color: #f92672;\n}\n.highlight {\n  color: #f8f8f2;\n  background-color: #49483e;\n}\n"
  },
  {
    "path": "css/rouge/thankful_eyes.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight {\n  color: #faf6e4;\n  background-color: #122b3b;\n}\n.highlight .gl {\n  color: #dee5e7;\n  background-color: #4e5d62;\n}\n.highlight .gp {\n  color: #a8e1fe;\n  font-weight: bold;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {\n  color: #6c8b9f;\n  font-style: italic;\n}\n.highlight .cp {\n  color: #b2fd6d;\n  font-weight: bold;\n  font-style: italic;\n}\n.highlight .err {\n  color: #fefeec;\n  background-color: #cc0000;\n}\n.highlight .gr {\n  color: #cc0000;\n  font-weight: bold;\n  font-style: italic;\n}\n.highlight .k, .highlight .kd, .highlight .kv {\n  color: #f6dd62;\n  font-weight: bold;\n}\n.highlight .o, .highlight .ow {\n  color: #4df4ff;\n  font-weight: bold;\n}\n.highlight .p, .highlight .pi {\n  color: #4df4ff;\n}\n.highlight .gd {\n  color: #cc0000;\n}\n.highlight .gi {\n  color: #b2fd6d;\n}\n.highlight .ge {\n  font-style: italic;\n}\n.highlight .gs {\n  font-weight: bold;\n}\n.highlight .gt {\n  color: #dee5e7;\n  background-color: #4e5d62;\n}\n.highlight .kc {\n  color: #f696db;\n  font-weight: bold;\n}\n.highlight .kn {\n  color: #ffb000;\n  font-weight: bold;\n}\n.highlight .kp {\n  color: #ffb000;\n  font-weight: bold;\n}\n.highlight .kr {\n  color: #ffb000;\n  font-weight: bold;\n}\n.highlight .gh {\n  color: #ffb000;\n  font-weight: bold;\n}\n.highlight .gu {\n  color: #ffb000;\n  font-weight: bold;\n}\n.highlight .kt {\n  color: #b2fd6d;\n  font-weight: bold;\n}\n.highlight .no {\n  color: #b2fd6d;\n  font-weight: bold;\n}\n.highlight .nc {\n  color: #b2fd6d;\n  font-weight: bold;\n}\n.highlight .nd {\n  color: #b2fd6d;\n  font-weight: bold;\n}\n.highlight .nn {\n  color: #b2fd6d;\n  font-weight: bold;\n}\n.highlight .bp {\n  color: #b2fd6d;\n  font-weight: bold;\n}\n.highlight .ne {\n  color: #b2fd6d;\n  font-weight: bold;\n}\n.highlight .nl {\n  color: #ffb000;\n  font-weight: bold;\n}\n.highlight .nt {\n  color: #ffb000;\n  font-weight: bold;\n}\n.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {\n  color: #f696db;\n  font-weight: bold;\n}\n.highlight .ld {\n  color: #f696db;\n  font-weight: bold;\n}\n.highlight .ss {\n  color: #f696db;\n  font-weight: bold;\n}\n.highlight .s, .highlight .sb, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .sr, .highlight .s1 {\n  color: #fff0a6;\n  font-weight: bold;\n}\n.highlight .se {\n  color: #4df4ff;\n  font-weight: bold;\n}\n.highlight .sc {\n  color: #4df4ff;\n  font-weight: bold;\n}\n.highlight .si {\n  color: #4df4ff;\n  font-weight: bold;\n}\n.highlight .nb {\n  font-weight: bold;\n}\n.highlight .ni {\n  color: #999999;\n  font-weight: bold;\n}\n.highlight .w {\n  color: #BBBBBB;\n}\n.highlight .go {\n  color: #BBBBBB;\n}\n.highlight .nf {\n  color: #a8e1fe;\n}\n.highlight .py {\n  color: #a8e1fe;\n}\n.highlight .na {\n  color: #a8e1fe;\n}\n.highlight .nv, .highlight .vc, .highlight .vg, .highlight .vi {\n  color: #a8e1fe;\n  font-weight: bold;\n}\n"
  },
  {
    "path": "css/rouge/tulip.css",
    "content": ".highlight table td { padding: 5px; }\n.highlight table pre { margin: 0; }\n.highlight {\n  color: #FFFFFF;\n  background-color: #231529;\n}\n.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {\n  color: #6D6E70;\n  font-style: italic;\n}\n.highlight .cp {\n  color: #41ff5b;\n  font-weight: bold;\n  font-style: italic;\n}\n.highlight .err {\n  color: #FFFFFF;\n  background-color: #CC0000;\n}\n.highlight .gr {\n  color: #FFFFFF;\n  background-color: #CC0000;\n}\n.highlight .k, .highlight .kd, .highlight .kv {\n  color: #FFF02A;\n  font-weight: bold;\n}\n.highlight .o, .highlight .ow {\n  color: #41ff5b;\n}\n.highlight .p, .highlight .pi {\n  color: #41ff5b;\n}\n.highlight .gd {\n  color: #CC0000;\n}\n.highlight .gi {\n  color: #3FB34F;\n}\n.highlight .ge {\n  font-style: italic;\n}\n.highlight .gs {\n  font-weight: bold;\n}\n.highlight .gt {\n  color: #FFFFFF;\n  background-color: #766DAF;\n}\n.highlight .gl {\n  color: #FFFFFF;\n  background-color: #766DAF;\n}\n.highlight .kc {\n  color: #9f93e6;\n  font-weight: bold;\n}\n.highlight .kn {\n  color: #FFFFFF;\n  font-weight: bold;\n}\n.highlight .kp {\n  color: #FFFFFF;\n  font-weight: bold;\n}\n.highlight .kr {\n  color: #FFFFFF;\n  font-weight: bold;\n}\n.highlight .gh {\n  color: #FFFFFF;\n  font-weight: bold;\n}\n.highlight .gu {\n  color: #FFFFFF;\n  font-weight: bold;\n}\n.highlight .kt {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .no {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .nc {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .nd {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .nn {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .bp {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .ne {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .nl {\n  color: #9f93e6;\n  font-weight: bold;\n}\n.highlight .nt {\n  color: #9f93e6;\n  font-weight: bold;\n}\n.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {\n  color: #9f93e6;\n  font-weight: bold;\n}\n.highlight .ld {\n  color: #9f93e6;\n  font-weight: bold;\n}\n.highlight .ss {\n  color: #9f93e6;\n  font-weight: bold;\n}\n.highlight .s, .highlight .sb, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .sr, .highlight .s1 {\n  color: #fff0a6;\n  font-weight: bold;\n}\n.highlight .se {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .sc {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .si {\n  color: #FAAF4C;\n  font-weight: bold;\n}\n.highlight .nb {\n  font-weight: bold;\n}\n.highlight .ni {\n  color: #999999;\n  font-weight: bold;\n}\n.highlight .w {\n  color: #BBBBBB;\n}\n.highlight .nf {\n  color: #41ff5b;\n}\n.highlight .py {\n  color: #41ff5b;\n}\n.highlight .na {\n  color: #41ff5b;\n}\n.highlight .nv, .highlight .vc, .highlight .vg, .highlight .vi {\n  color: #41ff5b;\n  font-weight: bold;\n}\n"
  },
  {
    "path": "css/semantic-ui/components/accordion.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Accordion\n*******************************/\n\n.ui.accordion,\n.ui.accordion .accordion {\n  max-width: 100%;\n}\n.ui.accordion .accordion {\n  margin: 1em 0em 0em;\n  padding: 0em;\n}\n\n/* Title */\n.ui.accordion .title,\n.ui.accordion .accordion .title {\n  cursor: pointer;\n}\n\n/* Default Styling */\n.ui.accordion .title:not(.ui) {\n  padding: 0.5em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Content */\n.ui.accordion .title ~ .content,\n.ui.accordion .accordion .title ~ .content {\n  display: none;\n}\n\n/* Default Styling */\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\n  margin: '';\n  padding: 0.5em 0em 1em;\n}\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\n  padding-bottom: 0em;\n}\n\n/* Arrow */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  display: inline-block;\n  float: none;\n  opacity: 1;\n  width: 1.25em;\n  height: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n  padding: 0em;\n  font-size: 1em;\n  -webkit-transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease;\n  vertical-align: baseline;\n  -webkit-transform: none;\n          transform: none;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n\n/* Menu */\n.ui.accordion.menu .item .title {\n  display: block;\n  padding: 0em;\n}\n.ui.accordion.menu .item .title > .dropdown.icon {\n  float: right;\n  margin: 0.21425em 0em 0em 1em;\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg);\n}\n\n/* Header */\n.ui.accordion .ui.header .dropdown.icon {\n  font-size: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.accordion .active.title .dropdown.icon,\n.ui.accordion .accordion .active.title .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n.ui.accordion.menu .item .active.title > .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Styled\n---------------*/\n\n.ui.styled.accordion {\n  width: 600px;\n}\n.ui.styled.accordion,\n.ui.styled.accordion .accordion {\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n}\n.ui.styled.accordion .title,\n.ui.styled.accordion .accordion .title {\n  margin: 0em;\n  padding: 0.75em 1em;\n  color: rgba(0, 0, 0, 0.4);\n  font-weight: bold;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n.ui.styled.accordion > .title:first-child,\n.ui.styled.accordion .accordion .title:first-child {\n  border-top: none;\n}\n\n/* Content */\n.ui.styled.accordion .content,\n.ui.styled.accordion .accordion .content {\n  margin: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n.ui.styled.accordion .accordion .content {\n  padding: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n/* Hover */\n.ui.styled.accordion .title:hover,\n.ui.styled.accordion .active.title,\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Active */\n.ui.styled.accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Active\n---------------*/\n\n.ui.accordion .active.content,\n.ui.accordion .accordion .active.content {\n  display: block;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.accordion,\n.ui.fluid.accordion .accordion {\n  width: 100%;\n}\n\n/*--------------\n     Inverted\n---------------*/\n\n.ui.inverted.accordion .title:not(.ui) {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Accordion';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* Dropdown Icon */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  font-family: Accordion;\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n.ui.accordion .title .dropdown.icon:before,\n.ui.accordion .accordion .title .dropdown.icon:before {\n  content: '\\f0da' /*rtl:'\\f0d9'*/;\n}\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/accordion.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n"
  },
  {
    "path": "css/semantic-ui/components/ad.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n         Advertisement\n*******************************/\n\n.ui.ad {\n  display: block;\n  overflow: hidden;\n  margin: 1em 0em;\n}\n.ui.ad:first-child {\n  margin: 0em;\n}\n.ui.ad:last-child {\n  margin: 0em;\n}\n.ui.ad iframe {\n  margin: 0em;\n  padding: 0em;\n  border: none;\n  overflow: hidden;\n}\n\n/*--------------\n     Common\n---------------*/\n\n\n/* Leaderboard */\n.ui.leaderboard.ad {\n  width: 728px;\n  height: 90px;\n}\n\n/* Medium Rectangle */\n.ui[class*=\"medium rectangle\"].ad {\n  width: 300px;\n  height: 250px;\n}\n\n/* Large Rectangle */\n.ui[class*=\"large rectangle\"].ad {\n  width: 336px;\n  height: 280px;\n}\n\n/* Half Page */\n.ui[class*=\"half page\"].ad {\n  width: 300px;\n  height: 600px;\n}\n\n/*--------------\n     Square\n---------------*/\n\n\n/* Square */\n.ui.square.ad {\n  width: 250px;\n  height: 250px;\n}\n\n/* Small Square */\n.ui[class*=\"small square\"].ad {\n  width: 200px;\n  height: 200px;\n}\n\n/*--------------\n    Rectangle\n---------------*/\n\n\n/* Small Rectangle */\n.ui[class*=\"small rectangle\"].ad {\n  width: 180px;\n  height: 150px;\n}\n\n/* Vertical Rectangle */\n.ui[class*=\"vertical rectangle\"].ad {\n  width: 240px;\n  height: 400px;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.button.ad {\n  width: 120px;\n  height: 90px;\n}\n.ui[class*=\"square button\"].ad {\n  width: 125px;\n  height: 125px;\n}\n.ui[class*=\"small button\"].ad {\n  width: 120px;\n  height: 60px;\n}\n\n/*--------------\n   Skyscrapers\n---------------*/\n\n\n/* Skyscraper */\n.ui.skyscraper.ad {\n  width: 120px;\n  height: 600px;\n}\n\n/* Wide Skyscraper */\n.ui[class*=\"wide skyscraper\"].ad {\n  width: 160px;\n}\n\n/*--------------\n     Banners\n---------------*/\n\n\n/* Banner */\n.ui.banner.ad {\n  width: 468px;\n  height: 60px;\n}\n\n/* Vertical Banner */\n.ui[class*=\"vertical banner\"].ad {\n  width: 120px;\n  height: 240px;\n}\n\n/* Top Banner */\n.ui[class*=\"top banner\"].ad {\n  width: 930px;\n  height: 180px;\n}\n\n/* Half Banner */\n.ui[class*=\"half banner\"].ad {\n  width: 234px;\n  height: 60px;\n}\n\n/*--------------\n    Boards\n---------------*/\n\n\n/* Leaderboard */\n.ui[class*=\"large leaderboard\"].ad {\n  width: 970px;\n  height: 90px;\n}\n\n/* Billboard */\n.ui.billboard.ad {\n  width: 970px;\n  height: 250px;\n}\n\n/*--------------\n    Panorama\n---------------*/\n\n\n/* Panorama */\n.ui.panorama.ad {\n  width: 980px;\n  height: 120px;\n}\n\n/*--------------\n     Netboard\n---------------*/\n\n\n/* Netboard */\n.ui.netboard.ad {\n  width: 580px;\n  height: 400px;\n}\n\n/*--------------\n     Mobile\n---------------*/\n\n\n/* Large Mobile Banner */\n.ui[class*=\"large mobile banner\"].ad {\n  width: 320px;\n  height: 100px;\n}\n\n/* Mobile Leaderboard */\n.ui[class*=\"mobile leaderboard\"].ad {\n  width: 320px;\n  height: 50px;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/* Mobile Sizes */\n.ui.mobile.ad {\n  display: none;\n}\n@media only screen and (max-width: 767px) {\n  .ui.mobile.ad {\n    display: block;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.centered.ad {\n  margin-left: auto;\n  margin-right: auto;\n}\n.ui.test.ad {\n  position: relative;\n  background: #545454;\n}\n.ui.test.ad:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  text-align: center;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  content: 'Ad';\n  color: #FFFFFF;\n  font-size: 1em;\n  font-weight: bold;\n}\n.ui.mobile.test.ad:after {\n  font-size: 0.85714286em;\n}\n.ui.test.ad[data-text]:after {\n  content: attr(data-text);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/api.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nvar\n  window = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return response;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          expectingJSON: function() {\n            return settings.dataType === 'json' || settings.dataType === 'jsonp';\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request)\n              ? (module.request.state() == 'pending')\n              : false\n            ;\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? module.is.expectingJSON()\n                    ? settings.onResponse.call(context, $.extend(true, {}, response))\n                    : settings.onResponse.call(context, response)\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n                return true;\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error') {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr, ajaxSettings);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (module.is.expectingJSON())\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            if(runSettings === false) {\n              return runSettings;\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/breadcrumb.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Breadcrumb\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Breadcrumb\n*******************************/\n\n.ui.breadcrumb {\n  line-height: 1;\n  display: inline-block;\n  margin: 0em 0em;\n  vertical-align: middle;\n}\n.ui.breadcrumb:first-child {\n  margin-top: 0em;\n}\n.ui.breadcrumb:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n          Content\n*******************************/\n\n\n/* Divider */\n.ui.breadcrumb .divider {\n  display: inline-block;\n  opacity: 0.7;\n  margin: 0em 0.21428571rem 0em;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n  vertical-align: baseline;\n}\n\n/* Link */\n.ui.breadcrumb a {\n  color: #4183C4;\n}\n.ui.breadcrumb a:hover {\n  color: #1e70bf;\n}\n\n/* Icon Divider */\n.ui.breadcrumb .icon.divider {\n  font-size: 0.85714286em;\n  vertical-align: baseline;\n}\n\n/* Section */\n.ui.breadcrumb a.section {\n  cursor: pointer;\n}\n.ui.breadcrumb .section {\n  display: inline-block;\n  margin: 0em;\n  padding: 0em;\n}\n\n/* Loose Coupling */\n.ui.breadcrumb.segment {\n  display: inline-block;\n  padding: 0.78571429em 1em;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.breadcrumb .active.section {\n  font-weight: bold;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.mini.breadcrumb {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.breadcrumb {\n  font-size: 0.85714286rem;\n}\n.ui.small.breadcrumb {\n  font-size: 0.92857143rem;\n}\n.ui.breadcrumb {\n  font-size: 1rem;\n}\n.ui.large.breadcrumb {\n  font-size: 1.14285714rem;\n}\n.ui.big.breadcrumb {\n  font-size: 1.28571429rem;\n}\n.ui.huge.breadcrumb {\n  font-size: 1.42857143rem;\n}\n.ui.massive.breadcrumb {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/button.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Button\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Button\n*******************************/\n\n.ui.button {\n  cursor: pointer;\n  display: inline-block;\n  min-height: 1em;\n  outline: none;\n  border: none;\n  vertical-align: baseline;\n  background: #E0E1E2 none;\n  color: rgba(0, 0, 0, 0.6);\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em 0.25em 0em 0em;\n  padding: 0.78571429em 1.5em 0.78571429em;\n  text-transform: none;\n  text-shadow: none;\n  font-weight: bold;\n  line-height: 1em;\n  font-style: normal;\n  text-align: center;\n  text-decoration: none;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  will-change: '';\n  -webkit-tap-highlight-color: transparent;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.button:hover {\n  background-color: #CACBCD;\n  background-image: none;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.button:hover .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Focus\n---------------*/\n\n.ui.button:focus {\n  background-color: #CACBCD;\n  color: rgba(0, 0, 0, 0.8);\n  background-image: '' !important;\n  box-shadow: '' !important;\n}\n.ui.button:focus .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.button:active,\n.ui.active.button:active {\n  background-color: #BABBBC;\n  background-image: '';\n  color: rgba(0, 0, 0, 0.9);\n  box-shadow: 0px 0px 0px 1px transparent inset, none;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.button {\n  background-color: #C0C1C2;\n  background-image: none;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.button:hover {\n  background-color: #C0C1C2;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.button:active {\n  background-color: #C0C1C2;\n  background-image: none;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n\n/* Specificity hack */\n.ui.loading.loading.loading.loading.loading.loading.button {\n  position: relative;\n  cursor: default;\n  text-shadow: none !important;\n  color: transparent !important;\n  opacity: 1;\n  pointer-events: auto;\n  -webkit-transition: all 0s linear, opacity 0.1s ease;\n  transition: all 0s linear, opacity 0.1s ease;\n}\n.ui.loading.button:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.15);\n}\n.ui.loading.button:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #FFFFFF transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n.ui.labeled.icon.loading.button .icon {\n  background-color: transparent;\n  box-shadow: none;\n}\n@-webkit-keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n.ui.basic.loading.button:not(.inverted):before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.ui.basic.loading.button:not(.inverted):after {\n  border-top-color: #767676;\n}\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.buttons .disabled.button,\n.ui.disabled.button,\n.ui.button:disabled,\n.ui.disabled.button:hover,\n.ui.disabled.active.button {\n  cursor: default;\n  opacity: 0.45 !important;\n  background-image: none !important;\n  box-shadow: none !important;\n  pointer-events: none !important;\n}\n\n/* Basic Group With Disabled */\n.ui.basic.buttons .ui.disabled.button {\n  border-color: rgba(34, 36, 38, 0.5);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.button {\n  position: relative;\n  overflow: hidden;\n  padding-right: 0em !important;\n  vertical-align: middle;\n  z-index: 1;\n}\n.ui.animated.button .content {\n  will-change: transform, opacity;\n}\n.ui.animated.button .visible.content {\n  position: relative;\n  margin-right: 1.5em;\n}\n.ui.animated.button .hidden.content {\n  position: absolute;\n  width: 100%;\n}\n\n/* Horizontal */\n.ui.animated.button .visible.content,\n.ui.animated.button .hidden.content {\n  -webkit-transition: right 0.3s ease 0s;\n  transition: right 0.3s ease 0s;\n}\n.ui.animated.button .visible.content {\n  left: auto;\n  right: 0%;\n}\n.ui.animated.button .hidden.content {\n  top: 50%;\n  left: auto;\n  right: -100%;\n  margin-top: -0.5em;\n}\n.ui.animated.button:focus .visible.content,\n.ui.animated.button:hover .visible.content {\n  left: auto;\n  right: 200%;\n}\n.ui.animated.button:focus .hidden.content,\n.ui.animated.button:hover .hidden.content {\n  left: auto;\n  right: 0%;\n}\n\n/* Vertical */\n.ui.vertical.animated.button .visible.content,\n.ui.vertical.animated.button .hidden.content {\n  -webkit-transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n.ui.vertical.animated.button .visible.content {\n  -webkit-transform: translateY(0%);\n          transform: translateY(0%);\n  right: auto;\n}\n.ui.vertical.animated.button .hidden.content {\n  top: -50%;\n  left: 0%;\n  right: auto;\n}\n.ui.vertical.animated.button:focus .visible.content,\n.ui.vertical.animated.button:hover .visible.content {\n  -webkit-transform: translateY(200%);\n          transform: translateY(200%);\n  right: auto;\n}\n.ui.vertical.animated.button:focus .hidden.content,\n.ui.vertical.animated.button:hover .hidden.content {\n  top: 50%;\n  right: auto;\n}\n\n/* Fade */\n.ui.fade.animated.button .visible.content,\n.ui.fade.animated.button .hidden.content {\n  -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n.ui.fade.animated.button .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n}\n.ui.fade.animated.button .hidden.content {\n  opacity: 0;\n  left: 0%;\n  right: auto;\n  -webkit-transform: scale(1.5);\n          transform: scale(1.5);\n}\n.ui.fade.animated.button:focus .visible.content,\n.ui.fade.animated.button:hover .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 0;\n  -webkit-transform: scale(0.75);\n          transform: scale(0.75);\n}\n.ui.fade.animated.button:focus .hidden.content,\n.ui.fade.animated.button:hover .hidden.content {\n  left: 0%;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.button {\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  background: transparent none;\n  color: #FFFFFF;\n  text-shadow: none !important;\n}\n\n/* Group */\n.ui.inverted.buttons .button {\n  margin: 0px 0px 0px -2px;\n}\n.ui.inverted.buttons .button:first-child {\n  margin-left: 0em;\n}\n.ui.inverted.vertical.buttons .button {\n  margin: 0px 0px -2px 0px;\n}\n.ui.inverted.vertical.buttons .button:first-child {\n  margin-top: 0em;\n}\n\n/* States */\n\n/* Hover */\n.ui.inverted.button:hover {\n  background: #FFFFFF;\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active / Focus */\n.ui.inverted.button:focus,\n.ui.inverted.button.active {\n  background: #FFFFFF;\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active Focus */\n.ui.inverted.button.active:focus {\n  background: #DCDDDE;\n  box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n    Labeled Button\n--------------------*/\n\n.ui.labeled.button:not(.icon) {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  background: none !important;\n  padding: 0px !important;\n  border: none !important;\n  box-shadow: none !important;\n}\n.ui.labeled.button > .button {\n  margin: 0px;\n}\n.ui.labeled.button > .label {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  margin: 0px 0px 0px -1px !important;\n  padding: '';\n  font-size: 1em;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Tag */\n.ui.labeled.button > .tag.label:before {\n  width: 1.85em;\n  height: 1.85em;\n}\n\n/* Right */\n.ui.labeled.button:not([class*=\"left labeled\"]) > .button {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.button:not([class*=\"left labeled\"]) > .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/* Left Side */\n.ui[class*=\"left labeled\"].button > .button {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.ui[class*=\"left labeled\"].button > .label {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n/*-------------------\n       Social\n--------------------*/\n\n\n/* Facebook */\n.ui.facebook.button {\n  background-color: #3B5998;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.facebook.button:hover {\n  background-color: #304d8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.facebook.button:active {\n  background-color: #2d4373;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Twitter */\n.ui.twitter.button {\n  background-color: #55ACEE;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.twitter.button:hover {\n  background-color: #35a2f4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.twitter.button:active {\n  background-color: #2795e9;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Google Plus */\n.ui.google.plus.button {\n  background-color: #DD4B39;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.google.plus.button:hover {\n  background-color: #e0321c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.google.plus.button:active {\n  background-color: #c23321;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Linked In */\n.ui.linkedin.button {\n  background-color: #1F88BE;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.linkedin.button:hover {\n  background-color: #147baf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.linkedin.button:active {\n  background-color: #186992;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* YouTube */\n.ui.youtube.button {\n  background-color: #CC181E;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.youtube.button:hover {\n  background-color: #bd0d13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.youtube.button:active {\n  background-color: #9e1317;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Instagram */\n.ui.instagram.button {\n  background-color: #49769C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.instagram.button:hover {\n  background-color: #3d698e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.instagram.button:active {\n  background-color: #395c79;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Pinterest */\n.ui.pinterest.button {\n  background-color: #BD081C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.pinterest.button:hover {\n  background-color: #ac0013;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pinterest.button:active {\n  background-color: #8c0615;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* VK */\n.ui.vk.button {\n  background-color: #4D7198;\n  color: #FFFFFF;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.vk.button:hover {\n  background-color: #41648a;\n  color: #FFFFFF;\n}\n.ui.vk.button:active {\n  background-color: #3c5876;\n  color: #FFFFFF;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.button > .icon:not(.button) {\n  height: 0.85714286em;\n  opacity: 0.8;\n  margin: 0em 0.42857143em 0em -0.21428571em;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  vertical-align: '';\n  color: '';\n}\n.ui.button:not(.icon) > .icon:not(.button):not(.dropdown) {\n  margin: 0em 0.42857143em 0em -0.21428571em;\n}\n.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {\n  margin: 0em -0.21428571em 0em 0.42857143em;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui[class*=\"left floated\"].buttons,\n.ui[class*=\"left floated\"].button {\n  float: left;\n  margin-left: 0em;\n  margin-right: 0.25em;\n}\n.ui[class*=\"right floated\"].buttons,\n.ui[class*=\"right floated\"].button {\n  float: right;\n  margin-right: 0em;\n  margin-left: 0.25em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.buttons .button,\n.ui.compact.button {\n  padding: 0.58928571em 1.125em 0.58928571em;\n}\n.ui.compact.icon.buttons .button,\n.ui.compact.icon.button {\n  padding: 0.58928571em 0.58928571em 0.58928571em;\n}\n.ui.compact.labeled.icon.buttons .button,\n.ui.compact.labeled.icon.button {\n  padding: 0.58928571em 3.69642857em 0.58928571em;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.buttons .button,\n.ui.mini.buttons .or,\n.ui.mini.button {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.buttons .button,\n.ui.tiny.buttons .or,\n.ui.tiny.button {\n  font-size: 0.85714286rem;\n}\n.ui.small.buttons .button,\n.ui.small.buttons .or,\n.ui.small.button {\n  font-size: 0.92857143rem;\n}\n.ui.buttons .button,\n.ui.buttons .or,\n.ui.button {\n  font-size: 1rem;\n}\n.ui.large.buttons .button,\n.ui.large.buttons .or,\n.ui.large.button {\n  font-size: 1.14285714rem;\n}\n.ui.big.buttons .button,\n.ui.big.buttons .or,\n.ui.big.button {\n  font-size: 1.28571429rem;\n}\n.ui.huge.buttons .button,\n.ui.huge.buttons .or,\n.ui.huge.button {\n  font-size: 1.42857143rem;\n}\n.ui.massive.buttons .button,\n.ui.massive.buttons .or,\n.ui.massive.button {\n  font-size: 1.71428571rem;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.buttons .button,\n.ui.icon.button {\n  padding: 0.78571429em 0.78571429em 0.78571429em;\n}\n.ui.icon.buttons .button > .icon,\n.ui.icon.button > .icon {\n  opacity: 0.9;\n  margin: 0em;\n  vertical-align: top;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.buttons .button,\n.ui.basic.button {\n  background: transparent none !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n  font-weight: normal;\n  border-radius: 0.28571429rem;\n  text-transform: none;\n  text-shadow: none !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons {\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n.ui.basic.buttons .button {\n  border-radius: 0em;\n}\n.ui.basic.buttons .button:hover,\n.ui.basic.button:hover {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .button:focus,\n.ui.basic.button:focus {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .button:active,\n.ui.basic.button:active {\n  background: #F8F8F8 !important;\n  color: rgba(0, 0, 0, 0.9) !important;\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .active.button,\n.ui.basic.active.button {\n  background: rgba(0, 0, 0, 0.05) !important;\n  box-shadow: '' !important;\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: rgba(34, 36, 38, 0.35);\n}\n.ui.basic.buttons .active.button:hover,\n.ui.basic.active.button:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n/* Vertical */\n.ui.basic.buttons .button:hover {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n.ui.basic.buttons .button:active {\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n.ui.basic.buttons .active.button {\n  box-shadow: rgba(34, 36, 38, 0.35) inset;\n}\n\n/* Standard Basic Inverted */\n.ui.basic.inverted.buttons .button,\n.ui.basic.inverted.button {\n  background-color: transparent !important;\n  color: #F9FAFB !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n}\n.ui.basic.inverted.buttons .button:hover,\n.ui.basic.inverted.button:hover {\n  color: #FFFFFF !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n.ui.basic.inverted.buttons .button:focus,\n.ui.basic.inverted.button:focus {\n  color: #FFFFFF !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n.ui.basic.inverted.buttons .button:active,\n.ui.basic.inverted.button:active {\n  background-color: rgba(255, 255, 255, 0.08) !important;\n  color: #FFFFFF !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n}\n.ui.basic.inverted.buttons .active.button,\n.ui.basic.inverted.active.button {\n  background-color: rgba(255, 255, 255, 0.08);\n  color: #FFFFFF;\n  text-shadow: none;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n}\n.ui.basic.inverted.buttons .active.button:hover,\n.ui.basic.inverted.active.button:hover {\n  background-color: rgba(255, 255, 255, 0.15);\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n/* Basic Group */\n.ui.basic.buttons .button {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left-width: 0px;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.basic.vertical.buttons .button:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Labeled Icon\n---------------*/\n\n.ui.labeled.icon.buttons .button,\n.ui.labeled.icon.button {\n  position: relative;\n  padding-left: 4.07142857em !important;\n  padding-right: 1.5em !important;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  position: absolute;\n  height: 100%;\n  line-height: 1;\n  border-radius: 0px;\n  border-top-left-radius: inherit;\n  border-bottom-left-radius: inherit;\n  text-align: center;\n  margin: 0em;\n  width: 2.57142857em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: '';\n  box-shadow: -1px 0px 0px 0px transparent inset;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  top: 0em;\n  left: 0em;\n}\n\n/* Right Labeled */\n.ui[class*=\"right labeled\"].icon.button {\n  padding-right: 4.07142857em !important;\n  padding-left: 1.5em !important;\n}\n.ui[class*=\"right labeled\"].icon.button > .icon {\n  left: auto;\n  right: 0em;\n  border-radius: 0px;\n  border-top-right-radius: inherit;\n  border-bottom-right-radius: inherit;\n  box-shadow: 1px 0px 0px 0px transparent inset;\n}\n.ui.labeled.icon.buttons > .button > .icon:before,\n.ui.labeled.icon.button > .icon:before,\n.ui.labeled.icon.buttons > .button > .icon:after,\n.ui.labeled.icon.button > .icon:after {\n  display: block;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  text-align: center;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n.ui.labeled.icon.buttons .button > .icon {\n  border-radius: 0em;\n}\n.ui.labeled.icon.buttons .button:first-child > .icon {\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n.ui.labeled.icon.buttons .button:last-child > .icon {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\n  border-radius: 0em;\n  border-top-left-radius: 0.28571429rem;\n}\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\n  border-radius: 0em;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n/* Fluid Labeled */\n.ui.fluid[class*=\"left labeled\"].icon.button,\n.ui.fluid[class*=\"right labeled\"].icon.button {\n  padding-left: 1.5em !important;\n  padding-right: 1.5em !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n\n/* Toggle (Modifies active state to give affordances) */\n.ui.toggle.buttons .active.button,\n.ui.buttons .button.toggle.active,\n.ui.button.toggle.active {\n  background-color: #21BA45 !important;\n  box-shadow: none !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n.ui.button.toggle.active:hover {\n  background-color: #16ab39 !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.button {\n  border-radius: 10em;\n}\n.ui.circular.button > .icon {\n  width: 1em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n      Or Buttons\n--------------------*/\n\n.ui.buttons .or {\n  position: relative;\n  width: 0.3em;\n  height: 2.57142857em;\n  z-index: 3;\n}\n.ui.buttons .or:before {\n  position: absolute;\n  text-align: center;\n  border-radius: 500rem;\n  content: 'or';\n  top: 50%;\n  left: 50%;\n  background-color: #FFFFFF;\n  text-shadow: none;\n  margin-top: -0.89285714em;\n  margin-left: -0.89285714em;\n  width: 1.78571429em;\n  height: 1.78571429em;\n  line-height: 1.78571429em;\n  color: rgba(0, 0, 0, 0.4);\n  font-style: normal;\n  font-weight: bold;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n}\n.ui.buttons .or[data-text]:before {\n  content: attr(data-text);\n}\n\n/* Fluid Or */\n.ui.fluid.buttons .or {\n  width: 0em !important;\n}\n.ui.fluid.buttons .or:after {\n  display: none;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n\n/* Singular */\n.ui.attached.button {\n  position: relative;\n  display: block;\n  margin: 0em;\n  border-radius: 0em;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n}\n\n/* Top / Bottom */\n.ui.attached.top.button {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.attached.bottom.button {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Left / Right */\n.ui.left.attached.button {\n  display: inline-block;\n  border-left: none;\n  text-align: right;\n  padding-right: 0.75em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui.right.attached.button {\n  display: inline-block;\n  text-align: left;\n  padding-left: 0.75em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/* Plural */\n.ui.attached.buttons {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  border-radius: 0em;\n  width: auto !important;\n  z-index: 2;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n.ui.attached.buttons .button {\n  margin: 0em;\n}\n.ui.attached.buttons .button:first-child {\n  border-radius: 0em;\n}\n.ui.attached.buttons .button:last-child {\n  border-radius: 0em;\n}\n\n/* Top / Bottom */\n.ui[class*=\"top attached\"].buttons {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui[class*=\"bottom attached\"].buttons {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].buttons .button:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].buttons .button:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Left / Right */\n.ui[class*=\"left attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 0em;\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n.ui[class*=\"right attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-left: 0em;\n  margin-right: -1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"right attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui[class*=\"right attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.buttons,\n.ui.fluid.button {\n  width: 100%;\n}\n.ui.fluid.button {\n  display: block;\n}\n.ui.two.buttons {\n  width: 100%;\n}\n.ui.two.buttons > .button {\n  width: 50%;\n}\n.ui.three.buttons {\n  width: 100%;\n}\n.ui.three.buttons > .button {\n  width: 33.333%;\n}\n.ui.four.buttons {\n  width: 100%;\n}\n.ui.four.buttons > .button {\n  width: 25%;\n}\n.ui.five.buttons {\n  width: 100%;\n}\n.ui.five.buttons > .button {\n  width: 20%;\n}\n.ui.six.buttons {\n  width: 100%;\n}\n.ui.six.buttons > .button {\n  width: 16.666%;\n}\n.ui.seven.buttons {\n  width: 100%;\n}\n.ui.seven.buttons > .button {\n  width: 14.285%;\n}\n.ui.eight.buttons {\n  width: 100%;\n}\n.ui.eight.buttons > .button {\n  width: 12.500%;\n}\n.ui.nine.buttons {\n  width: 100%;\n}\n.ui.nine.buttons > .button {\n  width: 11.11%;\n}\n.ui.ten.buttons {\n  width: 100%;\n}\n.ui.ten.buttons > .button {\n  width: 10%;\n}\n.ui.eleven.buttons {\n  width: 100%;\n}\n.ui.eleven.buttons > .button {\n  width: 9.09%;\n}\n.ui.twelve.buttons {\n  width: 100%;\n}\n.ui.twelve.buttons > .button {\n  width: 8.3333%;\n}\n\n/* Fluid Vertical Buttons */\n.ui.fluid.vertical.buttons,\n.ui.fluid.vertical.buttons > .button {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: auto;\n}\n.ui.two.vertical.buttons > .button {\n  height: 50%;\n}\n.ui.three.vertical.buttons > .button {\n  height: 33.333%;\n}\n.ui.four.vertical.buttons > .button {\n  height: 25%;\n}\n.ui.five.vertical.buttons > .button {\n  height: 20%;\n}\n.ui.six.vertical.buttons > .button {\n  height: 16.666%;\n}\n.ui.seven.vertical.buttons > .button {\n  height: 14.285%;\n}\n.ui.eight.vertical.buttons > .button {\n  height: 12.500%;\n}\n.ui.nine.vertical.buttons > .button {\n  height: 11.11%;\n}\n.ui.ten.vertical.buttons > .button {\n  height: 10%;\n}\n.ui.eleven.vertical.buttons > .button {\n  height: 9.09%;\n}\n.ui.twelve.vertical.buttons > .button {\n  height: 8.3333%;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Black ---*/\n\n.ui.black.buttons .button,\n.ui.black.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.black.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.black.buttons .button:hover,\n.ui.black.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .button:focus,\n.ui.black.button:focus {\n  background-color: #2f3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .button:active,\n.ui.black.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .active.button,\n.ui.black.buttons .active.button:active,\n.ui.black.active.button,\n.ui.black.button .active.button:active {\n  background-color: #0f0f10;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.black.buttons .button,\n.ui.basic.black.button {\n  box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n.ui.basic.black.buttons .button:hover,\n.ui.basic.black.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n.ui.basic.black.buttons .button:focus,\n.ui.basic.black.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n  color: #27292a !important;\n}\n.ui.basic.black.buttons .active.button,\n.ui.basic.black.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n  color: #343637 !important;\n}\n.ui.basic.black.buttons .button:active,\n.ui.basic.black.button:active {\n  box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.black.buttons .button,\n.ui.inverted.black.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover,\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus,\n.ui.inverted.black.buttons .button.active,\n.ui.inverted.black.button.active,\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .active.button,\n.ui.inverted.black.active.button {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  background-color: #000000;\n}\n\n/* Inverted Basic */\n.ui.inverted.black.basic.buttons .button,\n.ui.inverted.black.buttons .basic.button,\n.ui.inverted.black.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:hover,\n.ui.inverted.black.buttons .basic.button:hover,\n.ui.inverted.black.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #545454 !important;\n}\n.ui.inverted.black.basic.buttons .active.button,\n.ui.inverted.black.buttons .basic.active.button,\n.ui.inverted.black.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:active,\n.ui.inverted.black.buttons .basic.button:active,\n.ui.inverted.black.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.buttons .button,\n.ui.grey.button {\n  background-color: #767676;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.grey.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.grey.buttons .button:hover,\n.ui.grey.button:hover {\n  background-color: #838383;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .button:focus,\n.ui.grey.button:focus {\n  background-color: #8a8a8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .button:active,\n.ui.grey.button:active {\n  background-color: #909090;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .active.button,\n.ui.grey.buttons .active.button:active,\n.ui.grey.active.button,\n.ui.grey.button .active.button:active {\n  background-color: #696969;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.grey.buttons .button,\n.ui.basic.grey.button {\n  box-shadow: 0px 0px 0px 1px #767676 inset !important;\n  color: #767676 !important;\n}\n.ui.basic.grey.buttons .button:hover,\n.ui.basic.grey.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #838383 inset !important;\n  color: #838383 !important;\n}\n.ui.basic.grey.buttons .button:focus,\n.ui.basic.grey.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n  color: #838383 !important;\n}\n.ui.basic.grey.buttons .active.button,\n.ui.basic.grey.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #696969 inset !important;\n  color: #909090 !important;\n}\n.ui.basic.grey.buttons .button:active,\n.ui.basic.grey.button:active {\n  box-shadow: 0px 0px 0px 1px #909090 inset !important;\n  color: #909090 !important;\n}\n.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.grey.buttons .button,\n.ui.inverted.grey.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover,\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus,\n.ui.inverted.grey.buttons .button.active,\n.ui.inverted.grey.button.active,\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover {\n  background-color: #cfd0d2;\n}\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus {\n  background-color: #c7c9cb;\n}\n.ui.inverted.grey.buttons .active.button,\n.ui.inverted.grey.active.button {\n  background-color: #cfd0d2;\n}\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  background-color: #c2c4c5;\n}\n\n/* Inverted Basic */\n.ui.inverted.grey.basic.buttons .button,\n.ui.inverted.grey.buttons .basic.button,\n.ui.inverted.grey.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:hover,\n.ui.inverted.grey.buttons .basic.button:hover,\n.ui.inverted.grey.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n  color: #DCDDDE !important;\n}\n.ui.inverted.grey.basic.buttons .active.button,\n.ui.inverted.grey.buttons .basic.active.button,\n.ui.inverted.grey.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:active,\n.ui.inverted.grey.buttons .basic.button:active,\n.ui.inverted.grey.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.buttons .button,\n.ui.brown.button {\n  background-color: #A5673F;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.brown.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.brown.buttons .button:hover,\n.ui.brown.button:hover {\n  background-color: #975b33;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .button:focus,\n.ui.brown.button:focus {\n  background-color: #90532b;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .button:active,\n.ui.brown.button:active {\n  background-color: #805031;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .active.button,\n.ui.brown.buttons .active.button:active,\n.ui.brown.active.button,\n.ui.brown.button .active.button:active {\n  background-color: #995a31;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.brown.buttons .button,\n.ui.basic.brown.button {\n  box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n  color: #A5673F !important;\n}\n.ui.basic.brown.buttons .button:hover,\n.ui.basic.brown.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n  color: #975b33 !important;\n}\n.ui.basic.brown.buttons .button:focus,\n.ui.basic.brown.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #90532b inset !important;\n  color: #975b33 !important;\n}\n.ui.basic.brown.buttons .active.button,\n.ui.basic.brown.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n  color: #805031 !important;\n}\n.ui.basic.brown.buttons .button:active,\n.ui.basic.brown.button:active {\n  box-shadow: 0px 0px 0px 1px #805031 inset !important;\n  color: #805031 !important;\n}\n.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.brown.buttons .button,\n.ui.inverted.brown.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n  color: #D67C1C;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover,\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus,\n.ui.inverted.brown.buttons .button.active,\n.ui.inverted.brown.button.active,\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover {\n  background-color: #c86f11;\n}\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus {\n  background-color: #c16808;\n}\n.ui.inverted.brown.buttons .active.button,\n.ui.inverted.brown.active.button {\n  background-color: #cc6f0d;\n}\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  background-color: #a96216;\n}\n\n/* Inverted Basic */\n.ui.inverted.brown.basic.buttons .button,\n.ui.inverted.brown.buttons .basic.button,\n.ui.inverted.brown.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.brown.basic.buttons .button:hover,\n.ui.inverted.brown.buttons .basic.button:hover,\n.ui.inverted.brown.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .active.button,\n.ui.inverted.brown.buttons .basic.active.button,\n.ui.inverted.brown.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .button:active,\n.ui.inverted.brown.buttons .basic.button:active,\n.ui.inverted.brown.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n  color: #D67C1C !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.buttons .button,\n.ui.blue.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.blue.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.blue.buttons .button:hover,\n.ui.blue.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .button:focus,\n.ui.blue.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .button:active,\n.ui.blue.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .active.button,\n.ui.blue.buttons .active.button:active,\n.ui.blue.active.button,\n.ui.blue.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.blue.buttons .button,\n.ui.basic.blue.button {\n  box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n.ui.basic.blue.buttons .button:hover,\n.ui.basic.blue.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.blue.buttons .button:focus,\n.ui.basic.blue.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.blue.buttons .active.button,\n.ui.basic.blue.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.basic.blue.buttons .button:active,\n.ui.basic.blue.button:active {\n  box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.blue.buttons .button,\n.ui.inverted.blue.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n  color: #54C8FF;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover,\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus,\n.ui.inverted.blue.buttons .button.active,\n.ui.inverted.blue.button.active,\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover {\n  background-color: #3ac0ff;\n}\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus {\n  background-color: #2bbbff;\n}\n.ui.inverted.blue.buttons .active.button,\n.ui.inverted.blue.active.button {\n  background-color: #3ac0ff;\n}\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  background-color: #21b8ff;\n}\n\n/* Inverted Basic */\n.ui.inverted.blue.basic.buttons .button,\n.ui.inverted.blue.buttons .basic.button,\n.ui.inverted.blue.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.blue.basic.buttons .button:hover,\n.ui.inverted.blue.buttons .basic.button:hover,\n.ui.inverted.blue.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .active.button,\n.ui.inverted.blue.buttons .basic.active.button,\n.ui.inverted.blue.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .button:active,\n.ui.inverted.blue.buttons .basic.button:active,\n.ui.inverted.blue.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n  color: #54C8FF !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.buttons .button,\n.ui.green.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.green.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.green.buttons .button:hover,\n.ui.green.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .button:focus,\n.ui.green.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .button:active,\n.ui.green.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .active.button,\n.ui.green.buttons .active.button:active,\n.ui.green.active.button,\n.ui.green.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.green.buttons .button,\n.ui.basic.green.button {\n  box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n.ui.basic.green.buttons .button:hover,\n.ui.basic.green.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.green.buttons .button:focus,\n.ui.basic.green.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.green.buttons .active.button,\n.ui.basic.green.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n.ui.basic.green.buttons .button:active,\n.ui.basic.green.button:active {\n  box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.green.buttons .button,\n.ui.inverted.green.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n  color: #2ECC40;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover,\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus,\n.ui.inverted.green.buttons .button.active,\n.ui.inverted.green.button.active,\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover {\n  background-color: #22be34;\n}\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus {\n  background-color: #19b82b;\n}\n.ui.inverted.green.buttons .active.button,\n.ui.inverted.green.active.button {\n  background-color: #1fc231;\n}\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  background-color: #25a233;\n}\n\n/* Inverted Basic */\n.ui.inverted.green.basic.buttons .button,\n.ui.inverted.green.buttons .basic.button,\n.ui.inverted.green.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.green.basic.buttons .button:hover,\n.ui.inverted.green.buttons .basic.button:hover,\n.ui.inverted.green.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .active.button,\n.ui.inverted.green.buttons .basic.active.button,\n.ui.inverted.green.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .button:active,\n.ui.inverted.green.buttons .basic.button:active,\n.ui.inverted.green.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n  color: #2ECC40 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.buttons .button,\n.ui.orange.button {\n  background-color: #F2711C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.orange.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.orange.buttons .button:hover,\n.ui.orange.button:hover {\n  background-color: #f26202;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .button:focus,\n.ui.orange.button:focus {\n  background-color: #e55b00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .button:active,\n.ui.orange.button:active {\n  background-color: #cf590c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .active.button,\n.ui.orange.buttons .active.button:active,\n.ui.orange.active.button,\n.ui.orange.button .active.button:active {\n  background-color: #f56100;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.orange.buttons .button,\n.ui.basic.orange.button {\n  box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n  color: #F2711C !important;\n}\n.ui.basic.orange.buttons .button:hover,\n.ui.basic.orange.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n  color: #f26202 !important;\n}\n.ui.basic.orange.buttons .button:focus,\n.ui.basic.orange.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n  color: #f26202 !important;\n}\n.ui.basic.orange.buttons .active.button,\n.ui.basic.orange.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n  color: #cf590c !important;\n}\n.ui.basic.orange.buttons .button:active,\n.ui.basic.orange.button:active {\n  box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n  color: #cf590c !important;\n}\n.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.orange.buttons .button,\n.ui.inverted.orange.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n  color: #FF851B;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover,\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus,\n.ui.inverted.orange.buttons .button.active,\n.ui.inverted.orange.button.active,\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover {\n  background-color: #ff7701;\n}\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus {\n  background-color: #f17000;\n}\n.ui.inverted.orange.buttons .active.button,\n.ui.inverted.orange.active.button {\n  background-color: #ff7701;\n}\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  background-color: #e76b00;\n}\n\n/* Inverted Basic */\n.ui.inverted.orange.basic.buttons .button,\n.ui.inverted.orange.buttons .basic.button,\n.ui.inverted.orange.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.orange.basic.buttons .button:hover,\n.ui.inverted.orange.buttons .basic.button:hover,\n.ui.inverted.orange.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .active.button,\n.ui.inverted.orange.buttons .basic.active.button,\n.ui.inverted.orange.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .button:active,\n.ui.inverted.orange.buttons .basic.button:active,\n.ui.inverted.orange.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n  color: #FF851B !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.buttons .button,\n.ui.pink.button {\n  background-color: #E03997;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.pink.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.pink.buttons .button:hover,\n.ui.pink.button:hover {\n  background-color: #e61a8d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .button:focus,\n.ui.pink.button:focus {\n  background-color: #e10f85;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .button:active,\n.ui.pink.button:active {\n  background-color: #c71f7e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .active.button,\n.ui.pink.buttons .active.button:active,\n.ui.pink.active.button,\n.ui.pink.button .active.button:active {\n  background-color: #ea158d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.pink.buttons .button,\n.ui.basic.pink.button {\n  box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n  color: #E03997 !important;\n}\n.ui.basic.pink.buttons .button:hover,\n.ui.basic.pink.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n  color: #e61a8d !important;\n}\n.ui.basic.pink.buttons .button:focus,\n.ui.basic.pink.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n  color: #e61a8d !important;\n}\n.ui.basic.pink.buttons .active.button,\n.ui.basic.pink.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n  color: #c71f7e !important;\n}\n.ui.basic.pink.buttons .button:active,\n.ui.basic.pink.button:active {\n  box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n  color: #c71f7e !important;\n}\n.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.pink.buttons .button,\n.ui.inverted.pink.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n  color: #FF8EDF;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover,\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus,\n.ui.inverted.pink.buttons .button.active,\n.ui.inverted.pink.button.active,\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover {\n  background-color: #ff74d8;\n}\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus {\n  background-color: #ff65d3;\n}\n.ui.inverted.pink.buttons .active.button,\n.ui.inverted.pink.active.button {\n  background-color: #ff74d8;\n}\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  background-color: #ff5bd1;\n}\n\n/* Inverted Basic */\n.ui.inverted.pink.basic.buttons .button,\n.ui.inverted.pink.buttons .basic.button,\n.ui.inverted.pink.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.pink.basic.buttons .button:hover,\n.ui.inverted.pink.buttons .basic.button:hover,\n.ui.inverted.pink.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .active.button,\n.ui.inverted.pink.buttons .basic.active.button,\n.ui.inverted.pink.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .button:active,\n.ui.inverted.pink.buttons .basic.button:active,\n.ui.inverted.pink.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n  color: #FF8EDF !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.buttons .button,\n.ui.violet.button {\n  background-color: #6435C9;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.violet.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.violet.buttons .button:hover,\n.ui.violet.button:hover {\n  background-color: #5829bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .button:focus,\n.ui.violet.button:focus {\n  background-color: #4f20b5;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .button:active,\n.ui.violet.button:active {\n  background-color: #502aa1;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .active.button,\n.ui.violet.buttons .active.button:active,\n.ui.violet.active.button,\n.ui.violet.button .active.button:active {\n  background-color: #5626bf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.violet.buttons .button,\n.ui.basic.violet.button {\n  box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n  color: #6435C9 !important;\n}\n.ui.basic.violet.buttons .button:hover,\n.ui.basic.violet.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n  color: #5829bb !important;\n}\n.ui.basic.violet.buttons .button:focus,\n.ui.basic.violet.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n  color: #5829bb !important;\n}\n.ui.basic.violet.buttons .active.button,\n.ui.basic.violet.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n  color: #502aa1 !important;\n}\n.ui.basic.violet.buttons .button:active,\n.ui.basic.violet.button:active {\n  box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n  color: #502aa1 !important;\n}\n.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.violet.buttons .button,\n.ui.inverted.violet.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n  color: #A291FB;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover,\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus,\n.ui.inverted.violet.buttons .button.active,\n.ui.inverted.violet.button.active,\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover {\n  background-color: #8a73ff;\n}\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus {\n  background-color: #7d64ff;\n}\n.ui.inverted.violet.buttons .active.button,\n.ui.inverted.violet.active.button {\n  background-color: #8a73ff;\n}\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  background-color: #7860f9;\n}\n\n/* Inverted Basic */\n.ui.inverted.violet.basic.buttons .button,\n.ui.inverted.violet.buttons .basic.button,\n.ui.inverted.violet.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.violet.basic.buttons .button:hover,\n.ui.inverted.violet.buttons .basic.button:hover,\n.ui.inverted.violet.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .active.button,\n.ui.inverted.violet.buttons .basic.active.button,\n.ui.inverted.violet.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .button:active,\n.ui.inverted.violet.buttons .basic.button:active,\n.ui.inverted.violet.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n  color: #A291FB !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.buttons .button,\n.ui.purple.button {\n  background-color: #A333C8;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.purple.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.purple.buttons .button:hover,\n.ui.purple.button:hover {\n  background-color: #9627ba;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .button:focus,\n.ui.purple.button:focus {\n  background-color: #8f1eb4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .button:active,\n.ui.purple.button:active {\n  background-color: #82299f;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .active.button,\n.ui.purple.buttons .active.button:active,\n.ui.purple.active.button,\n.ui.purple.button .active.button:active {\n  background-color: #9724be;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.purple.buttons .button,\n.ui.basic.purple.button {\n  box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n  color: #A333C8 !important;\n}\n.ui.basic.purple.buttons .button:hover,\n.ui.basic.purple.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n  color: #9627ba !important;\n}\n.ui.basic.purple.buttons .button:focus,\n.ui.basic.purple.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n  color: #9627ba !important;\n}\n.ui.basic.purple.buttons .active.button,\n.ui.basic.purple.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #9724be inset !important;\n  color: #82299f !important;\n}\n.ui.basic.purple.buttons .button:active,\n.ui.basic.purple.button:active {\n  box-shadow: 0px 0px 0px 1px #82299f inset !important;\n  color: #82299f !important;\n}\n.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.purple.buttons .button,\n.ui.inverted.purple.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n  color: #DC73FF;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover,\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus,\n.ui.inverted.purple.buttons .button.active,\n.ui.inverted.purple.button.active,\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover {\n  background-color: #d65aff;\n}\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus {\n  background-color: #d24aff;\n}\n.ui.inverted.purple.buttons .active.button,\n.ui.inverted.purple.active.button {\n  background-color: #d65aff;\n}\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  background-color: #cf40ff;\n}\n\n/* Inverted Basic */\n.ui.inverted.purple.basic.buttons .button,\n.ui.inverted.purple.buttons .basic.button,\n.ui.inverted.purple.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.purple.basic.buttons .button:hover,\n.ui.inverted.purple.buttons .basic.button:hover,\n.ui.inverted.purple.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .active.button,\n.ui.inverted.purple.buttons .basic.active.button,\n.ui.inverted.purple.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .button:active,\n.ui.inverted.purple.buttons .basic.button:active,\n.ui.inverted.purple.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n  color: #DC73FF !important;\n}\n\n/*--- Red ---*/\n\n.ui.red.buttons .button,\n.ui.red.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.red.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.red.buttons .button:hover,\n.ui.red.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .button:focus,\n.ui.red.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .button:active,\n.ui.red.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .active.button,\n.ui.red.buttons .active.button:active,\n.ui.red.active.button,\n.ui.red.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.red.buttons .button,\n.ui.basic.red.button {\n  box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n.ui.basic.red.buttons .button:hover,\n.ui.basic.red.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.red.buttons .button:focus,\n.ui.basic.red.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.red.buttons .active.button,\n.ui.basic.red.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n.ui.basic.red.buttons .button:active,\n.ui.basic.red.button:active {\n  box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.red.buttons .button,\n.ui.inverted.red.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n  color: #FF695E;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover,\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus,\n.ui.inverted.red.buttons .button.active,\n.ui.inverted.red.button.active,\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover {\n  background-color: #ff5144;\n}\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus {\n  background-color: #ff4335;\n}\n.ui.inverted.red.buttons .active.button,\n.ui.inverted.red.active.button {\n  background-color: #ff5144;\n}\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  background-color: #ff392b;\n}\n\n/* Inverted Basic */\n.ui.inverted.red.basic.buttons .button,\n.ui.inverted.red.buttons .basic.button,\n.ui.inverted.red.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.red.basic.buttons .button:hover,\n.ui.inverted.red.buttons .basic.button:hover,\n.ui.inverted.red.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .active.button,\n.ui.inverted.red.buttons .basic.active.button,\n.ui.inverted.red.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .button:active,\n.ui.inverted.red.buttons .basic.button:active,\n.ui.inverted.red.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n  color: #FF695E !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.buttons .button,\n.ui.teal.button {\n  background-color: #00B5AD;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.teal.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.teal.buttons .button:hover,\n.ui.teal.button:hover {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .button:focus,\n.ui.teal.button:focus {\n  background-color: #008c86;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .button:active,\n.ui.teal.button:active {\n  background-color: #00827c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .active.button,\n.ui.teal.buttons .active.button:active,\n.ui.teal.active.button,\n.ui.teal.button .active.button:active {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.teal.buttons .button,\n.ui.basic.teal.button {\n  box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n  color: #00B5AD !important;\n}\n.ui.basic.teal.buttons .button:hover,\n.ui.basic.teal.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #009c95 !important;\n}\n.ui.basic.teal.buttons .button:focus,\n.ui.basic.teal.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n  color: #009c95 !important;\n}\n.ui.basic.teal.buttons .active.button,\n.ui.basic.teal.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #00827c !important;\n}\n.ui.basic.teal.buttons .button:active,\n.ui.basic.teal.button:active {\n  box-shadow: 0px 0px 0px 1px #00827c inset !important;\n  color: #00827c !important;\n}\n.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.teal.buttons .button,\n.ui.inverted.teal.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n  color: #6DFFFF;\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover,\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus,\n.ui.inverted.teal.buttons .button.active,\n.ui.inverted.teal.button.active,\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover {\n  background-color: #54ffff;\n}\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus {\n  background-color: #44ffff;\n}\n.ui.inverted.teal.buttons .active.button,\n.ui.inverted.teal.active.button {\n  background-color: #54ffff;\n}\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  background-color: #3affff;\n}\n\n/* Inverted Basic */\n.ui.inverted.teal.basic.buttons .button,\n.ui.inverted.teal.buttons .basic.button,\n.ui.inverted.teal.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:hover,\n.ui.inverted.teal.buttons .basic.button:hover,\n.ui.inverted.teal.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .active.button,\n.ui.inverted.teal.buttons .basic.active.button,\n.ui.inverted.teal.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:active,\n.ui.inverted.teal.buttons .basic.button:active,\n.ui.inverted.teal.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #3affff inset !important;\n  color: #6DFFFF !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.buttons .button,\n.ui.olive.button {\n  background-color: #B5CC18;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.olive.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.olive.buttons .button:hover,\n.ui.olive.button:hover {\n  background-color: #a7bd0d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .button:focus,\n.ui.olive.button:focus {\n  background-color: #a0b605;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .button:active,\n.ui.olive.button:active {\n  background-color: #8d9e13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .active.button,\n.ui.olive.buttons .active.button:active,\n.ui.olive.active.button,\n.ui.olive.button .active.button:active {\n  background-color: #aac109;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.olive.buttons .button,\n.ui.basic.olive.button {\n  box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n  color: #B5CC18 !important;\n}\n.ui.basic.olive.buttons .button:hover,\n.ui.basic.olive.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n  color: #a7bd0d !important;\n}\n.ui.basic.olive.buttons .button:focus,\n.ui.basic.olive.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n  color: #a7bd0d !important;\n}\n.ui.basic.olive.buttons .active.button,\n.ui.basic.olive.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n  color: #8d9e13 !important;\n}\n.ui.basic.olive.buttons .button:active,\n.ui.basic.olive.button:active {\n  box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n  color: #8d9e13 !important;\n}\n.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.olive.buttons .button,\n.ui.inverted.olive.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n  color: #D9E778;\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover,\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus,\n.ui.inverted.olive.buttons .button.active,\n.ui.inverted.olive.button.active,\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover {\n  background-color: #d8ea5c;\n}\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus {\n  background-color: #daef47;\n}\n.ui.inverted.olive.buttons .active.button,\n.ui.inverted.olive.active.button {\n  background-color: #daed59;\n}\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  background-color: #cddf4d;\n}\n\n/* Inverted Basic */\n.ui.inverted.olive.basic.buttons .button,\n.ui.inverted.olive.buttons .basic.button,\n.ui.inverted.olive.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.olive.basic.buttons .button:hover,\n.ui.inverted.olive.buttons .basic.button:hover,\n.ui.inverted.olive.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .active.button,\n.ui.inverted.olive.buttons .basic.active.button,\n.ui.inverted.olive.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .button:active,\n.ui.inverted.olive.buttons .basic.button:active,\n.ui.inverted.olive.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n  color: #D9E778 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.buttons .button,\n.ui.yellow.button {\n  background-color: #FBBD08;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.yellow.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.yellow.buttons .button:hover,\n.ui.yellow.button:hover {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .button:focus,\n.ui.yellow.button:focus {\n  background-color: #daa300;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .button:active,\n.ui.yellow.button:active {\n  background-color: #cd9903;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .active.button,\n.ui.yellow.buttons .active.button:active,\n.ui.yellow.active.button,\n.ui.yellow.button .active.button:active {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.yellow.buttons .button,\n.ui.basic.yellow.button {\n  box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n  color: #FBBD08 !important;\n}\n.ui.basic.yellow.buttons .button:hover,\n.ui.basic.yellow.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #eaae00 !important;\n}\n.ui.basic.yellow.buttons .button:focus,\n.ui.basic.yellow.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n  color: #eaae00 !important;\n}\n.ui.basic.yellow.buttons .active.button,\n.ui.basic.yellow.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #cd9903 !important;\n}\n.ui.basic.yellow.buttons .button:active,\n.ui.basic.yellow.button:active {\n  box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n  color: #cd9903 !important;\n}\n.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.yellow.buttons .button,\n.ui.inverted.yellow.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n  color: #FFE21F;\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover,\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus,\n.ui.inverted.yellow.buttons .button.active,\n.ui.inverted.yellow.button.active,\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover {\n  background-color: #ffdf05;\n}\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus {\n  background-color: #f5d500;\n}\n.ui.inverted.yellow.buttons .active.button,\n.ui.inverted.yellow.active.button {\n  background-color: #ffdf05;\n}\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  background-color: #ebcd00;\n}\n\n/* Inverted Basic */\n.ui.inverted.yellow.basic.buttons .button,\n.ui.inverted.yellow.buttons .basic.button,\n.ui.inverted.yellow.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.yellow.basic.buttons .button:hover,\n.ui.inverted.yellow.buttons .basic.button:hover,\n.ui.inverted.yellow.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .active.button,\n.ui.inverted.yellow.buttons .basic.active.button,\n.ui.inverted.yellow.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .button:active,\n.ui.inverted.yellow.buttons .basic.button:active,\n.ui.inverted.yellow.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n  color: #FFE21F !important;\n}\n\n/*-------------------\n       Primary\n--------------------*/\n\n\n/*--- Standard ---*/\n\n.ui.primary.buttons .button,\n.ui.primary.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.primary.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.primary.buttons .button:hover,\n.ui.primary.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .button:focus,\n.ui.primary.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .button:active,\n.ui.primary.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .active.button,\n.ui.primary.buttons .active.button:active,\n.ui.primary.active.button,\n.ui.primary.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.primary.buttons .button,\n.ui.basic.primary.button {\n  box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n.ui.basic.primary.buttons .button:hover,\n.ui.basic.primary.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.primary.buttons .button:focus,\n.ui.basic.primary.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.primary.buttons .active.button,\n.ui.basic.primary.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.basic.primary.buttons .button:active,\n.ui.basic.primary.button:active {\n  box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*-------------------\n      Secondary\n--------------------*/\n\n\n/* Standard */\n.ui.secondary.buttons .button,\n.ui.secondary.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.secondary.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.secondary.buttons .button:hover,\n.ui.secondary.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .button:focus,\n.ui.secondary.button:focus {\n  background-color: #2e3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .button:active,\n.ui.secondary.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .active.button,\n.ui.secondary.buttons .active.button:active,\n.ui.secondary.active.button,\n.ui.secondary.button .active.button:active {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.secondary.buttons .button,\n.ui.basic.secondary.button {\n  box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n.ui.basic.secondary.buttons .button:hover,\n.ui.basic.secondary.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n.ui.basic.secondary.buttons .button:focus,\n.ui.basic.secondary.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n  color: #27292a !important;\n}\n.ui.basic.secondary.buttons .active.button,\n.ui.basic.secondary.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #343637 !important;\n}\n.ui.basic.secondary.buttons .button:active,\n.ui.basic.secondary.button:active {\n  box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n    Positive\n----------------*/\n\n\n/* Standard */\n.ui.positive.buttons .button,\n.ui.positive.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.positive.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.positive.buttons .button:hover,\n.ui.positive.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .button:focus,\n.ui.positive.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .button:active,\n.ui.positive.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .active.button,\n.ui.positive.buttons .active.button:active,\n.ui.positive.active.button,\n.ui.positive.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.positive.buttons .button,\n.ui.basic.positive.button {\n  box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n.ui.basic.positive.buttons .button:hover,\n.ui.basic.positive.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.positive.buttons .button:focus,\n.ui.basic.positive.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.positive.buttons .active.button,\n.ui.basic.positive.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n.ui.basic.positive.buttons .button:active,\n.ui.basic.positive.button:active {\n  box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n     Negative\n----------------*/\n\n\n/* Standard */\n.ui.negative.buttons .button,\n.ui.negative.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.negative.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.negative.buttons .button:hover,\n.ui.negative.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .button:focus,\n.ui.negative.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .button:active,\n.ui.negative.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .active.button,\n.ui.negative.buttons .active.button:active,\n.ui.negative.active.button,\n.ui.negative.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.negative.buttons .button,\n.ui.basic.negative.button {\n  box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n.ui.basic.negative.buttons .button:hover,\n.ui.basic.negative.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.negative.buttons .button:focus,\n.ui.basic.negative.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.negative.buttons .active.button,\n.ui.basic.negative.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n.ui.basic.negative.buttons .button:active,\n.ui.basic.negative.button:active {\n  box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\n.ui.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  font-size: 0em;\n  vertical-align: baseline;\n  margin: 0em 0.25em 0em 0em;\n}\n.ui.buttons:not(.basic):not(.inverted) {\n  box-shadow: none;\n}\n\n/* Clearfix */\n.ui.buttons:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/* Standard Group */\n.ui.buttons .button {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  margin: 0em;\n  border-radius: 0em;\n  margin: 0px 0px 0px 0px;\n}\n.ui.buttons > .ui.button:not(.basic):not(.inverted),\n.ui.buttons:not(.basic):not(.inverted) > .button {\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.buttons .button:first-child {\n  border-left: none;\n  margin-left: 0em;\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n.ui.buttons .button:last-child {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/* Vertical  Style */\n.ui.vertical.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n.ui.vertical.buttons .button {\n  display: block;\n  float: none;\n  width: 100%;\n  margin: 0px 0px 0px 0px;\n  box-shadow: none;\n  border-radius: 0em;\n}\n.ui.vertical.buttons .button:first-child {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n.ui.vertical.buttons .button:last-child {\n  margin-bottom: 0px;\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n.ui.vertical.buttons .button:only-child {\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/card.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Card\n---------------*/\n\n.ui.cards > .card,\n.ui.card {\n  max-width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  width: 290px;\n  min-height: 0px;\n  background: #FFFFFF;\n  padding: 0em;\n  border: none;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transition: box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease, -webkit-transform 0.1s ease;\n  z-index: '';\n}\n.ui.card {\n  margin: 1em 0em;\n}\n.ui.cards > .card a,\n.ui.card a {\n  cursor: pointer;\n}\n.ui.card:first-child {\n  margin-top: 0em;\n}\n.ui.card:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Cards\n---------------*/\n\n.ui.cards {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: -0.875em -0.5em;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n}\n.ui.cards > .card {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0.875em 0.5em;\n  float: none;\n}\n\n/* Clearing */\n.ui.cards:after,\n.ui.card:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/* Consecutive Card Groups Preserve Row Spacing */\n.ui.cards ~ .ui.cards {\n  margin-top: 0.875em;\n}\n\n/*--------------\n  Rounded Edges\n---------------*/\n\n.ui.cards > .card > :first-child,\n.ui.card > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n  border-top: none !important;\n}\n.ui.cards > .card > :last-child,\n.ui.card > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n.ui.cards > .card > :only-child,\n.ui.card > :only-child {\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.cards > .card > .image,\n.ui.card > .image {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  padding: 0em;\n  background: rgba(0, 0, 0, 0.05);\n}\n.ui.cards > .card > .image > img,\n.ui.card > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: inherit;\n}\n.ui.cards > .card > .image:not(.ui) > img,\n.ui.card > .image:not(.ui) > img {\n  border: none;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.cards > .card > .content,\n.ui.card > .content {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  background: none;\n  margin: 0em;\n  padding: 1em 1em;\n  box-shadow: none;\n  font-size: 1em;\n  border-radius: 0em;\n}\n.ui.cards > .card > .content:after,\n.ui.card > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.cards > .card > .content > .header,\n.ui.card > .content > .header {\n  display: block;\n  margin: '';\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n.ui.cards > .card > .content > .header:not(.ui),\n.ui.card > .content > .header:not(.ui) {\n  font-weight: bold;\n  font-size: 1.28571429em;\n  margin-top: -0.21425em;\n  line-height: 1.2857em;\n}\n.ui.cards > .card > .content > .meta + .description,\n.ui.cards > .card > .content > .header + .description,\n.ui.card > .content > .meta + .description,\n.ui.card > .content > .header + .description {\n  margin-top: 0.5em;\n}\n\n/*----------------\n Floated Content\n-----------------*/\n\n.ui.cards > .card [class*=\"left floated\"],\n.ui.card [class*=\"left floated\"] {\n  float: left;\n}\n.ui.cards > .card [class*=\"right floated\"],\n.ui.card [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n     Aligned\n---------------*/\n\n.ui.cards > .card [class*=\"left aligned\"],\n.ui.card [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.cards > .card [class*=\"center aligned\"],\n.ui.card [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.cards > .card [class*=\"right aligned\"],\n.ui.card [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.cards > .card .content img,\n.ui.card .content img {\n  display: inline-block;\n  vertical-align: middle;\n  width: '';\n}\n.ui.cards > .card img.avatar,\n.ui.cards > .card .avatar img,\n.ui.card img.avatar,\n.ui.card .avatar img {\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.cards > .card > .content > .description,\n.ui.card > .content > .description {\n  clear: both;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.cards > .card > .content p,\n.ui.card > .content p {\n  margin: 0em 0em 0.5em;\n}\n.ui.cards > .card > .content p:last-child,\n.ui.card > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.cards > .card .meta,\n.ui.card .meta {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card .meta *,\n.ui.card .meta * {\n  margin-right: 0.3em;\n}\n.ui.cards > .card .meta :last-child,\n.ui.card .meta :last-child {\n  margin-right: 0em;\n}\n.ui.cards > .card .meta [class*=\"right floated\"],\n.ui.card .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n\n/* Generic */\n.ui.cards > .card > .content a:not(.ui),\n.ui.card > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content a:not(.ui):hover,\n.ui.card > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n.ui.cards > .card > .content > a.header,\n.ui.card > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.cards > .card > .content > a.header:hover,\n.ui.card > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n.ui.cards > .card .meta > a:not(.ui),\n.ui.card .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card .meta > a:not(.ui):hover,\n.ui.card .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Buttons\n---------------*/\n\n.ui.cards > .card > .buttons,\n.ui.card > .buttons,\n.ui.cards > .card > .button,\n.ui.card > .button {\n  margin: 0px -1px;\n  width: calc(100% +  2px );\n}\n\n/*--------------\n      Dimmer\n---------------*/\n\n.ui.cards > .card .dimmer,\n.ui.card .dimmer {\n  background-color: '';\n  z-index: 10;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n\n/*-----Star----- */\n\n\n/* Icon */\n.ui.cards > .card > .content .star.icon,\n.ui.card > .content .star.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content .star.icon:hover,\n.ui.card > .content .star.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n.ui.cards > .card > .content .active.star.icon,\n.ui.card > .content .active.star.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n\n/* Icon */\n.ui.cards > .card > .content .like.icon,\n.ui.card > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content .like.icon:hover,\n.ui.card > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n.ui.cards > .card > .content .active.like.icon,\n.ui.card > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.cards > .card > .extra,\n.ui.card > .extra {\n  max-width: 100%;\n  min-height: 0em !important;\n  -webkit-box-flex: 0;\n      -ms-flex-positive: 0;\n          flex-grow: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;\n  position: static;\n  background: none;\n  width: auto;\n  margin: 0em 0em;\n  padding: 0.75em 1em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .extra a:not(.ui),\n.ui.card > .extra a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card > .extra a:not(.ui):hover,\n.ui.card > .extra a:not(.ui):hover {\n  color: #1e70bf;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.raised.cards a.card:hover,\n.ui.link.cards .raised.card:hover,\na.ui.raised.card:hover,\n.ui.link.raised.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n}\n.ui.raised.cards > .card,\n.ui.raised.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*-------------------\n       Centered\n--------------------*/\n\n.ui.centered.cards {\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.centered.card {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.card {\n  width: 100%;\n  max-width: 9999px;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.cards a.card,\n.ui.link.cards .card,\na.ui.card,\n.ui.link.card {\n  -webkit-transform: none;\n          transform: none;\n}\n.ui.cards a.card:hover,\n.ui.link.cards .card:hover,\na.ui.card:hover,\n.ui.link.card:hover {\n  cursor: pointer;\n  z-index: 5;\n  background: #FFFFFF;\n  border: none;\n  box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transform: translateY(-3px);\n          transform: translateY(-3px);\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.cards > .card,\n.ui.cards > .red.card,\n.ui.red.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.red.cards > .card:hover,\n.ui.cards > .red.card:hover,\n.ui.red.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Orange */\n.ui.orange.cards > .card,\n.ui.cards > .orange.card,\n.ui.orange.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.orange.cards > .card:hover,\n.ui.cards > .orange.card:hover,\n.ui.orange.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Yellow */\n.ui.yellow.cards > .card,\n.ui.cards > .yellow.card,\n.ui.yellow.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.yellow.cards > .card:hover,\n.ui.cards > .yellow.card:hover,\n.ui.yellow.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Olive */\n.ui.olive.cards > .card,\n.ui.cards > .olive.card,\n.ui.olive.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.olive.cards > .card:hover,\n.ui.cards > .olive.card:hover,\n.ui.olive.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Green */\n.ui.green.cards > .card,\n.ui.cards > .green.card,\n.ui.green.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.green.cards > .card:hover,\n.ui.cards > .green.card:hover,\n.ui.green.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Teal */\n.ui.teal.cards > .card,\n.ui.cards > .teal.card,\n.ui.teal.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.teal.cards > .card:hover,\n.ui.cards > .teal.card:hover,\n.ui.teal.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Blue */\n.ui.blue.cards > .card,\n.ui.cards > .blue.card,\n.ui.blue.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.blue.cards > .card:hover,\n.ui.cards > .blue.card:hover,\n.ui.blue.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Violet */\n.ui.violet.cards > .card,\n.ui.cards > .violet.card,\n.ui.violet.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.violet.cards > .card:hover,\n.ui.cards > .violet.card:hover,\n.ui.violet.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Purple */\n.ui.purple.cards > .card,\n.ui.cards > .purple.card,\n.ui.purple.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.purple.cards > .card:hover,\n.ui.cards > .purple.card:hover,\n.ui.purple.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Pink */\n.ui.pink.cards > .card,\n.ui.cards > .pink.card,\n.ui.pink.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.pink.cards > .card:hover,\n.ui.cards > .pink.card:hover,\n.ui.pink.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Brown */\n.ui.brown.cards > .card,\n.ui.cards > .brown.card,\n.ui.brown.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.brown.cards > .card:hover,\n.ui.cards > .brown.card:hover,\n.ui.brown.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Grey */\n.ui.grey.cards > .card,\n.ui.cards > .grey.card,\n.ui.grey.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.grey.cards > .card:hover,\n.ui.cards > .grey.card:hover,\n.ui.grey.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Black */\n.ui.black.cards > .card,\n.ui.cards > .black.card,\n.ui.black.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.black.cards > .card:hover,\n.ui.cards > .black.card:hover,\n.ui.black.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n}\n\n/*--------------\n   Card Count\n---------------*/\n\n.ui.one.cards {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n.ui.one.cards > .card {\n  width: 100%;\n}\n.ui.two.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n.ui.two.cards > .card {\n  width: calc( 50%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n.ui.three.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n.ui.three.cards > .card {\n  width: calc( 33.33333333%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n.ui.four.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.four.cards > .card {\n  width: calc( 25%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.five.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.five.cards > .card {\n  width: calc( 20%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.six.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.six.cards > .card {\n  width: calc( 16.66666667%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.seven.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.seven.cards > .card {\n  width: calc( 14.28571429%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n.ui.eight.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.eight.cards > .card {\n  width: calc( 12.5%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 11px;\n}\n.ui.nine.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.nine.cards > .card {\n  width: calc( 11.11111111%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 10px;\n}\n.ui.ten.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.ten.cards > .card {\n  width: calc( 10%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.two.doubling.cards .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.three.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.four.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.five.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.six.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.seven.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.seven.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.eight.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.nine.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.ten.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n}\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.two.doubling.cards .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.three.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.four.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.five.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.six.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.eight.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.eight.doubling.cards .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.nine.doubling.cards .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.ten.doubling.cards .card {\n    width: calc( 20%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.cards {\n    display: block !important;\n  }\n  .ui.stackable.cards .card:first-child {\n    margin-top: 0em !important;\n  }\n  .ui.stackable.cards > .card {\n    display: block !important;\n    height: auto !important;\n    margin: 1em 1em;\n    padding: 0 !important;\n    width: calc( 100%  -  2em ) !important;\n  }\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.cards > .card {\n  font-size: 1em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/checkbox.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Checkbox\n*******************************/\n\n\n/*--------------\n    Content\n---------------*/\n\n.ui.checkbox {\n  position: relative;\n  display: inline-block;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  outline: none;\n  vertical-align: baseline;\n  font-style: normal;\n  min-height: 17px;\n  font-size: 1rem;\n  line-height: 17px;\n  min-width: 17px;\n}\n\n/* HTML Checkbox */\n.ui.checkbox input[type=\"checkbox\"],\n.ui.checkbox input[type=\"radio\"] {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  opacity: 0 !important;\n  outline: none;\n  z-index: 3;\n  width: 17px;\n  height: 17px;\n}\n\n/*--------------\n      Box\n---------------*/\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  cursor: auto;\n  position: relative;\n  display: block;\n  padding-left: 1.85714em;\n  outline: none;\n  font-size: 1em;\n}\n.ui.checkbox .box:before,\n.ui.checkbox label:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  content: '';\n  background: #FFFFFF;\n  border-radius: 0.21428571rem;\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  border: 1px solid #D4D4D5;\n}\n\n/*--------------\n    Checkmark\n---------------*/\n\n.ui.checkbox .box:after,\n.ui.checkbox label:after {\n  position: absolute;\n  font-size: 14px;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  text-align: center;\n  opacity: 0;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n}\n\n/*--------------\n      Label\n---------------*/\n\n\n/* Inside */\n.ui.checkbox label,\n.ui.checkbox + label {\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Outside */\n.ui.checkbox + label {\n  vertical-align: middle;\n}\n\n\n/*******************************\n           States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.checkbox .box:hover::before,\n.ui.checkbox label:hover::before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox label:hover,\n.ui.checkbox + label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.checkbox .box:active::before,\n.ui.checkbox label:active::before {\n  background: #F9FAFB;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox .box:active::after,\n.ui.checkbox label:active::after {\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.checkbox input:active ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Focus\n---------------*/\n\n.ui.checkbox input:focus ~ .box:before,\n.ui.checkbox input:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n.ui.checkbox input:focus ~ .box:after,\n.ui.checkbox input:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.checkbox input:focus ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.checkbox input:checked ~ .box:before,\n.ui.checkbox input:checked ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Indeterminate\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Active Focus\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,\n.ui.checkbox input:checked:focus ~ .box:before,\n.ui.checkbox input:checked:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,\n.ui.checkbox input:checked:focus ~ .box:after,\n.ui.checkbox input:checked:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n    Read-Only\n---------------*/\n\n.ui.read-only.checkbox,\n.ui.read-only.checkbox label {\n  cursor: default;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.disabled.checkbox .box:after,\n.ui.disabled.checkbox label,\n.ui.checkbox input[disabled] ~ .box:after,\n.ui.checkbox input[disabled] ~ label {\n  cursor: default !important;\n  opacity: 0.5;\n  color: #000000;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n\n/* Initialized checkbox moves input below element\n to prevent manually triggering */\n.ui.checkbox input.hidden {\n  z-index: -1;\n}\n\n/* Selectable Label */\n.ui.checkbox input.hidden + label {\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n     Radio\n---------------*/\n\n.ui.radio.checkbox {\n  min-height: 15px;\n}\n.ui.radio.checkbox .box,\n.ui.radio.checkbox label {\n  padding-left: 1.85714em;\n}\n\n/* Box */\n.ui.radio.checkbox .box:before,\n.ui.radio.checkbox label:before {\n  content: '';\n  -webkit-transform: none;\n          transform: none;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  top: 1px;\n  left: 0px;\n}\n\n/* Bullet */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  border: none;\n  content: '' !important;\n  width: 15px;\n  height: 15px;\n  line-height: 15px;\n}\n\n/* Radio Checkbox */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  top: 1px;\n  left: 0px;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  -webkit-transform: scale(0.46666667);\n          transform: scale(0.46666667);\n  background-color: rgba(0, 0, 0, 0.87);\n}\n\n/* Focus */\n.ui.radio.checkbox input:focus ~ .box:before,\n.ui.radio.checkbox input:focus ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:focus ~ .box:after,\n.ui.radio.checkbox input:focus ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Indeterminate */\n.ui.radio.checkbox input:indeterminate ~ .box:after,\n.ui.radio.checkbox input:indeterminate ~ label:after {\n  opacity: 0;\n}\n\n/* Active */\n.ui.radio.checkbox input:checked ~ .box:before,\n.ui.radio.checkbox input:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:checked ~ .box:after,\n.ui.radio.checkbox input:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Focus */\n.ui.radio.checkbox input:focus:checked ~ .box:before,\n.ui.radio.checkbox input:focus:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:focus:checked ~ .box:after,\n.ui.radio.checkbox input:focus:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Slider\n---------------*/\n\n.ui.slider.checkbox {\n  min-height: 1.25rem;\n}\n\n/* Input */\n.ui.slider.checkbox input {\n  width: 3.5rem;\n  height: 1.25rem;\n}\n\n/* Label */\n.ui.slider.checkbox .box,\n.ui.slider.checkbox label {\n  padding-left: 4.5rem;\n  line-height: 1rem;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Line */\n.ui.slider.checkbox .box:before,\n.ui.slider.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  border: none !important;\n  left: 0em;\n  z-index: 1;\n  top: 0.4rem;\n  background-color: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 0.21428571rem;\n  -webkit-transform: none;\n          transform: none;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease;\n  transition: background 0.3s ease;\n}\n\n/* Handle */\n.ui.slider.checkbox .box:after,\n.ui.slider.checkbox label:after {\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: -0.25rem;\n  left: 0em;\n  -webkit-transform: none;\n          transform: none;\n  border-radius: 500rem;\n  -webkit-transition: left 0.3s ease;\n  transition: left 0.3s ease;\n}\n\n/* Focus */\n.ui.slider.checkbox input:focus ~ .box:before,\n.ui.slider.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n.ui.slider.checkbox .box:hover,\n.ui.slider.checkbox label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.slider.checkbox .box:hover::before,\n.ui.slider.checkbox label:hover::before {\n  background: rgba(0, 0, 0, 0.15);\n}\n\n/* Active */\n.ui.slider.checkbox input:checked ~ .box,\n.ui.slider.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.slider.checkbox input:checked ~ .box:before,\n.ui.slider.checkbox input:checked ~ label:before {\n  background-color: #545454 !important;\n}\n.ui.slider.checkbox input:checked ~ .box:after,\n.ui.slider.checkbox input:checked ~ label:after {\n  left: 2rem;\n}\n\n/* Active Focus */\n.ui.slider.checkbox input:focus:checked ~ .box,\n.ui.slider.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.slider.checkbox input:focus:checked ~ .box:before,\n.ui.slider.checkbox input:focus:checked ~ label:before {\n  background-color: #000000 !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n.ui.toggle.checkbox {\n  min-height: 1.5rem;\n}\n\n/* Input */\n.ui.toggle.checkbox input {\n  width: 3.5rem;\n  height: 1.5rem;\n}\n\n/* Label */\n.ui.toggle.checkbox .box,\n.ui.toggle.checkbox label {\n  min-height: 1.5rem;\n  padding-left: 4.5rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.toggle.checkbox label {\n  padding-top: 0.15em;\n}\n\n/* Switch */\n.ui.toggle.checkbox .box:before,\n.ui.toggle.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  z-index: 1;\n  -webkit-transform: none;\n          transform: none;\n  border: none;\n  top: 0rem;\n  background: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 1.5rem;\n  border-radius: 500rem;\n}\n\n/* Handle */\n.ui.toggle.checkbox .box:after,\n.ui.toggle.checkbox label:after {\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: 0rem;\n  left: 0em;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease, left 0.3s ease;\n  transition: background 0.3s ease, left 0.3s ease;\n}\n.ui.toggle.checkbox input ~ .box:after,\n.ui.toggle.checkbox input ~ label:after {\n  left: -0.05rem;\n}\n\n/* Focus */\n.ui.toggle.checkbox input:focus ~ .box:before,\n.ui.toggle.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n.ui.toggle.checkbox .box:hover::before,\n.ui.toggle.checkbox label:hover::before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Active */\n.ui.toggle.checkbox input:checked ~ .box,\n.ui.toggle.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:before,\n.ui.toggle.checkbox input:checked ~ label:before {\n  background-color: #2185D0 !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:after,\n.ui.toggle.checkbox input:checked ~ label:after {\n  left: 2.15rem;\n}\n\n/* Active Focus */\n.ui.toggle.checkbox input:focus:checked ~ .box,\n.ui.toggle.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.toggle.checkbox input:focus:checked ~ .box:before,\n.ui.toggle.checkbox input:focus:checked ~ label:before {\n  background-color: #0d71bb !important;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.checkbox .box,\n.ui.fitted.checkbox label {\n  padding-left: 0em !important;\n}\n.ui.fitted.toggle.checkbox,\n.ui.fitted.toggle.checkbox {\n  width: 3.5rem;\n}\n.ui.fitted.slider.checkbox,\n.ui.fitted.slider.checkbox {\n  width: 3.5rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Checkbox';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype');\n}\n\n/* Checkmark */\n.ui.checkbox label:after,\n.ui.checkbox .box:after {\n  font-family: 'Checkbox';\n}\n\n/* Checked */\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  content: '\\e800';\n}\n\n/* Indeterminate */\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  font-size: 12px;\n  content: '\\e801';\n}\n/*  UTF Reference\n.check:before { content: '\\e800'; }\n.dash:before  { content: '\\e801'; }\n.plus:before { content: '\\e802'; }\n*/\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/checkbox.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnable.call(input);\n          // preserve legacy callbacks\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisable.call(input);\n          // preserve legacy callbacks\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  silent              : false,\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  // preserve misspelled callbacks (will be removed in 3.0)\n  onEnabled           : function(){},\n  onDisabled          : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/comment.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Comment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n    Comments\n---------------*/\n\n.ui.comments {\n  margin: 1.5em 0em;\n  max-width: 650px;\n}\n.ui.comments:first-child {\n  margin-top: 0em;\n}\n.ui.comments:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Comment\n---------------*/\n\n.ui.comments .comment {\n  position: relative;\n  background: none;\n  margin: 0.5em 0em 0em;\n  padding: 0.5em 0em 0em;\n  border: none;\n  border-top: none;\n  line-height: 1.2;\n}\n.ui.comments .comment:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\n/*--------------------\n    Nested Comments\n---------------------*/\n\n.ui.comments .comment .comments {\n  margin: 0em 0em 0.5em 0.5em;\n  padding: 1em 0em 1em 1em;\n}\n.ui.comments .comment .comments:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n}\n.ui.comments .comment .comments .comment {\n  border: none;\n  border-top: none;\n  background: none;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.comments .comment .avatar {\n  display: block;\n  width: 2.5em;\n  height: auto;\n  float: left;\n  margin: 0.2em 0em 0em;\n}\n.ui.comments .comment img.avatar,\n.ui.comments .comment .avatar img {\n  display: block;\n  margin: 0em auto;\n  width: 100%;\n  height: 100%;\n  border-radius: 0.25rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.comments .comment > .content {\n  display: block;\n}\n\n/* If there is an avatar move content over */\n.ui.comments .comment > .avatar ~ .content {\n  margin-left: 3.5em;\n}\n\n/*--------------\n     Author\n---------------*/\n\n.ui.comments .comment .author {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n}\n.ui.comments .comment a.author {\n  cursor: pointer;\n}\n.ui.comments .comment a.author:hover {\n  color: #1e70bf;\n}\n\n/*--------------\n     Metadata\n---------------*/\n\n.ui.comments .comment .metadata {\n  display: inline-block;\n  margin-left: 0.5em;\n  color: rgba(0, 0, 0, 0.4);\n  font-size: 0.875em;\n}\n.ui.comments .comment .metadata > * {\n  display: inline-block;\n  margin: 0em 0.5em 0em 0em;\n}\n.ui.comments .comment .metadata > :last-child {\n  margin-right: 0em;\n}\n\n/*--------------------\n     Comment Text\n---------------------*/\n\n.ui.comments .comment .text {\n  margin: 0.25em 0em 0.5em;\n  font-size: 1em;\n  word-wrap: break-word;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.3;\n}\n\n/*--------------------\n     User Actions\n---------------------*/\n\n.ui.comments .comment .actions {\n  font-size: 0.875em;\n}\n.ui.comments .comment .actions a {\n  cursor: pointer;\n  display: inline-block;\n  margin: 0em 0.75em 0em 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.comments .comment .actions a:last-child {\n  margin-right: 0em;\n}\n.ui.comments .comment .actions a.active,\n.ui.comments .comment .actions a:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------------\n      Reply Form\n---------------------*/\n\n.ui.comments > .reply.form {\n  margin-top: 1em;\n}\n.ui.comments .comment .reply.form {\n  width: 100%;\n  margin-top: 1em;\n}\n.ui.comments .reply.form textarea {\n  font-size: 1em;\n  height: 12em;\n}\n\n\n/*******************************\n            State\n*******************************/\n\n.ui.collapsed.comments,\n.ui.comments .collapsed.comments,\n.ui.comments .collapsed.comment {\n  display: none;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n        Threaded\n---------------------*/\n\n.ui.threaded.comments .comment .comments {\n  margin: -1.5em 0 -1em 1.25em;\n  padding: 3em 0em 2em 2.25em;\n  box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------------\n        Minimal\n---------------------*/\n\n.ui.minimal.comments .comment .actions {\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n  -webkit-transition-delay: 0.1s;\n          transition-delay: 0.1s;\n}\n.ui.minimal.comments .comment > .content:hover > .actions {\n  opacity: 1;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.comments {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.comments {\n  font-size: 0.85714286rem;\n}\n.ui.small.comments {\n  font-size: 0.9em;\n}\n.ui.comments {\n  font-size: 1em;\n}\n.ui.large.comments {\n  font-size: 1.1em;\n}\n.ui.big.comments {\n  font-size: 1.28571429rem;\n}\n.ui.huge.comments {\n  font-size: 1.2em;\n}\n.ui.massive.comments {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/container.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Container\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Container\n*******************************/\n\n\n/* All Sizes */\n.ui.container {\n  display: block;\n  max-width: 100% !important;\n}\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui.container {\n    width: auto !important;\n    margin-left: 1em !important;\n    margin-right: 1em !important;\n  }\n  .ui.grid.container {\n    width: auto !important;\n  }\n  .ui.relaxed.grid.container {\n    width: auto !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: auto !important;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.container {\n    width: 723px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 723px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 723px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 723px  +  5rem ) !important;\n  }\n}\n\n/* Small Monitor */\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.container {\n    width: 933px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 933px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 933px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 933px  +  5rem ) !important;\n  }\n}\n\n/* Large Monitor */\n@media only screen and (min-width: 1200px) {\n  .ui.container {\n    width: 1127px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 1127px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 1127px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 1127px  +  5rem ) !important;\n  }\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/* Text Container */\n.ui.text.container {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  max-width: 700px !important;\n  line-height: 1.5;\n}\n.ui.text.container {\n  font-size: 1.14285714rem;\n}\n\n/* Fluid */\n.ui.fluid.container {\n  width: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui[class*=\"left aligned\"].container {\n  text-align: left;\n}\n.ui[class*=\"center aligned\"].container {\n  text-align: center;\n}\n.ui[class*=\"right aligned\"].container {\n  text-align: right;\n}\n.ui.justified.container {\n  text-align: justify;\n  -webkit-hyphens: auto;\n      -ms-hyphens: auto;\n          hyphens: auto;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/dimmer.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Dimmer\n*******************************/\n\n.dimmable:not(.body) {\n  position: relative;\n}\n.ui.dimmer {\n  display: none;\n  position: absolute;\n  top: 0em !important;\n  left: 0em !important;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  vertical-align: middle;\n  background-color: rgba(0, 0, 0, 0.85);\n  opacity: 0;\n  line-height: 1;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  -webkit-animation-duration: 0.5s;\n          animation-duration: 0.5s;\n  -webkit-transition: background-color 0.5s linear;\n  transition: background-color 0.5s linear;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/* Dimmer Content */\n.ui.dimmer > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n}\n.ui.dimmer > .content > * {\n  display: table-cell;\n  vertical-align: middle;\n  color: #FFFFFF;\n}\n\n/* Loose Coupling */\n.ui.segment > .ui.dimmer {\n  border-radius: inherit !important;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.animating.dimmable:not(body),\n.dimmed.dimmable:not(body) {\n  overflow: hidden;\n}\n.dimmed.dimmable > .ui.animating.dimmer,\n.dimmed.dimmable > .ui.visible.dimmer,\n.ui.active.dimmer {\n  display: block;\n  opacity: 1;\n}\n.ui.disabled.dimmer {\n  width: 0 !important;\n  height: 0 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n      Page\n---------------*/\n\n.ui.page.dimmer {\n  position: fixed;\n  -webkit-transform-style: '';\n          transform-style: '';\n  -webkit-perspective: 2000px;\n          perspective: 2000px;\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\nbody.animating.in.dimmable,\nbody.dimmed.dimmable {\n  overflow: hidden;\n}\nbody.dimmable > .dimmer {\n  position: fixed;\n}\n\n/*--------------\n    Blurring\n---------------*/\n\n.blurring.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(0px) grayscale(0);\n          filter: blur(0px) grayscale(0);\n  -webkit-transition: 800ms -webkit-filter ease;\n  transition: 800ms -webkit-filter ease;\n  transition: 800ms filter ease;\n  transition: 800ms filter ease, 800ms -webkit-filter ease;\n}\n.blurring.dimmed.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(5px) grayscale(0.7);\n          filter: blur(5px) grayscale(0.7);\n}\n\n/* Dimmer Color */\n.blurring.dimmable > .dimmer {\n  background-color: rgba(0, 0, 0, 0.6);\n}\n.blurring.dimmable > .inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.6);\n}\n\n/*--------------\n    Aligned\n---------------*/\n\n.ui.dimmer > .top.aligned.content > * {\n  vertical-align: top;\n}\n.ui.dimmer > .bottom.aligned.content > * {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n.ui.inverted.dimmer > .content > * {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/* Displays without javascript */\n.ui.simple.dimmer {\n  display: block;\n  overflow: hidden;\n  opacity: 1;\n  width: 0%;\n  height: 0%;\n  z-index: -100;\n  background-color: rgba(0, 0, 0, 0);\n}\n.dimmed.dimmable > .ui.simple.dimmer {\n  overflow: visible;\n  opacity: 1;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.85);\n  z-index: 1;\n}\n.ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0);\n}\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/dimmer.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n            module.set.variation();\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n            $dimmable\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGB      = (colorArray && colorArray.length == 3),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGB || isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/divider.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Divider\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Divider\n*******************************/\n\n.ui.divider {\n  margin: 1rem 0rem;\n  line-height: 1;\n  height: 0em;\n  font-weight: bold;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: rgba(0, 0, 0, 0.85);\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.divider:not(.vertical):not(.horizontal) {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n\n/* Allow divider between each column row */\n.ui.grid > .column + .divider,\n.ui.grid > .row > .column + .divider {\n  left: auto;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.divider {\n  display: table;\n  white-space: nowrap;\n  height: auto;\n  margin: '';\n  line-height: 1;\n  text-align: center;\n}\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  content: '';\n  display: table-cell;\n  position: relative;\n  top: 50%;\n  width: 50%;\n  background-repeat: no-repeat;\n}\n.ui.horizontal.divider:before {\n  background-position: right 1em top 50%;\n}\n.ui.horizontal.divider:after {\n  background-position: left 1em top 50%;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.divider {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n  margin: 0rem;\n  padding: 0em;\n  width: auto;\n  height: 50%;\n  line-height: 0em;\n  text-align: center;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n}\n.ui.vertical.divider:before,\n.ui.vertical.divider:after {\n  position: absolute;\n  left: 50%;\n  content: '';\n  z-index: 3;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\n  width: 0%;\n  height: calc(100% -  1rem );\n}\n.ui.vertical.divider:before {\n  top: -100%;\n}\n.ui.vertical.divider:after {\n  top: auto;\n  bottom: 0px;\n}\n\n/* Inside grid */\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider,\n  .ui.grid .stackable.row .ui.vertical.divider {\n    display: table;\n    white-space: nowrap;\n    height: auto;\n    margin: '';\n    overflow: hidden;\n    line-height: 1;\n    text-align: center;\n    position: static;\n    top: 0;\n    left: 0;\n    -webkit-transform: none;\n            transform: none;\n  }\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    position: static;\n    left: 0;\n    border-left: none;\n    border-right: none;\n    content: '';\n    display: table-cell;\n    position: relative;\n    top: 50%;\n    width: 50%;\n    background-repeat: no-repeat;\n  }\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before {\n    background-position: right 1em top 50%;\n  }\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-position: left 1em top 50%;\n  }\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.divider > .icon {\n  margin: 0rem;\n  font-size: 1rem;\n  height: 1em;\n  vertical-align: middle;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n    Hidden\n---------------*/\n\n.ui.hidden.divider {\n  border-color: transparent !important;\n}\n.ui.hidden.divider:before,\n.ui.hidden.divider:after {\n  display: none;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.divider.inverted,\n.ui.vertical.inverted.divider,\n.ui.horizontal.inverted.divider {\n  color: #FFFFFF;\n}\n.ui.divider.inverted,\n.ui.divider.inverted:after,\n.ui.divider.inverted:before {\n  border-top-color: rgba(34, 36, 38, 0.15) !important;\n  border-left-color: rgba(34, 36, 38, 0.15) !important;\n  border-bottom-color: rgba(255, 255, 255, 0.15) !important;\n  border-right-color: rgba(255, 255, 255, 0.15) !important;\n}\n\n/*--------------\n    Fitted\n---------------*/\n\n.ui.fitted.divider {\n  margin: 0em;\n}\n\n/*--------------\n    Clearing\n---------------*/\n\n.ui.clearing.divider {\n  clear: both;\n}\n\n/*--------------\n    Section\n---------------*/\n\n.ui.section.divider {\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.divider {\n  font-size: 1rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n}\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n  }\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/dropdown.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Dropdown\n*******************************/\n\n.ui.dropdown {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  outline: none;\n  text-align: left;\n  -webkit-transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.dropdown .menu {\n  cursor: auto;\n  position: absolute;\n  display: none;\n  outline: none;\n  top: 100%;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  margin: 0em;\n  padding: 0em 0em;\n  background: #FFFFFF;\n  font-size: 1em;\n  text-shadow: none;\n  text-align: left;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  z-index: 11;\n  will-change: transform, opacity;\n}\n.ui.dropdown .menu > * {\n  white-space: nowrap;\n}\n\n/*--------------\n  Hidden Input\n---------------*/\n\n.ui.dropdown > input:not(.search):first-child,\n.ui.dropdown > select {\n  display: none !important;\n}\n\n/*--------------\n Dropdown Icon\n---------------*/\n\n.ui.dropdown > .dropdown.icon {\n  position: relative;\n  width: auto;\n  font-size: 0.85714286em;\n  margin: 0em 0em 0em 1em;\n}\n.ui.dropdown .menu > .item .dropdown.icon {\n  width: auto;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n.ui.dropdown .menu > .item .dropdown.icon + .text {\n  margin-right: 1em;\n}\n\n/*--------------\n      Text\n---------------*/\n\n.ui.dropdown > .text {\n  display: inline-block;\n  -webkit-transition: none;\n  transition: none;\n}\n\n/*--------------\n    Menu Item\n---------------*/\n\n.ui.dropdown .menu > .item {\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: none;\n  height: auto;\n  text-align: left;\n  border-top: none;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429rem 1.14285714rem !important;\n  font-size: 1rem;\n  text-transform: none;\n  font-weight: normal;\n  box-shadow: none;\n  -webkit-touch-callout: none;\n}\n.ui.dropdown .menu > .item:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Floated Content\n---------------*/\n\n.ui.dropdown > .text > [class*=\"right floated\"],\n.ui.dropdown .menu .item > [class*=\"right floated\"] {\n  float: right !important;\n  margin-right: 0em !important;\n  margin-left: 1em !important;\n}\n.ui.dropdown > .text > [class*=\"left floated\"],\n.ui.dropdown .menu .item > [class*=\"left floated\"] {\n  float: left !important;\n  margin-left: 0em !important;\n  margin-right: 1em !important;\n}\n.ui.dropdown .menu .item > .icon.floated,\n.ui.dropdown .menu .item > .flag.floated,\n.ui.dropdown .menu .item > .image.floated,\n.ui.dropdown .menu .item > img.floated {\n  margin-top: 0em;\n}\n\n/*--------------\n  Menu Divider\n---------------*/\n\n.ui.dropdown .menu > .header {\n  margin: 1rem 0rem 0.75rem;\n  padding: 0em 1.14285714rem;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.78571429em;\n  font-weight: bold;\n  text-transform: uppercase;\n}\n.ui.dropdown .menu > .divider {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  height: 0em;\n  margin: 0.5em 0em;\n}\n.ui.dropdown .menu > .input {\n  width: auto;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1.14285714rem 0.78571429rem;\n  min-width: 10rem;\n}\n.ui.dropdown .menu > .header + .input {\n  margin-top: 0em;\n}\n.ui.dropdown .menu > .input:not(.transparent) input {\n  padding: 0.5em 1em;\n}\n.ui.dropdown .menu > .input:not(.transparent) .button,\n.ui.dropdown .menu > .input:not(.transparent) .icon,\n.ui.dropdown .menu > .input:not(.transparent) .label {\n  padding-top: 0.5em;\n  padding-bottom: 0.5em;\n}\n\n/*-----------------\n  Item Description\n-------------------*/\n\n.ui.dropdown > .text > .description,\n.ui.dropdown .menu > .item > .description {\n  float: right;\n  margin: 0em 0em 0em 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*-----------------\n       Message\n-------------------*/\n\n.ui.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n  font-weight: normal;\n}\n.ui.dropdown .menu > .message:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n    Sub Menu\n---------------*/\n\n.ui.dropdown .menu .menu {\n  top: 0% !important;\n  left: 100% !important;\n  right: auto !important;\n  margin: 0em 0em 0em -0.5em !important;\n  border-radius: 0.28571429rem !important;\n  z-index: 21 !important;\n}\n\n/* Hide Arrow */\n.ui.dropdown .menu .menu:after {\n  display: none;\n}\n\n/*--------------\n   Sub Elements\n---------------*/\n\n\n/* Icons / Flags / Labels / Image */\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image {\n  margin-top: 0em;\n}\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-top: 0em;\n}\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-left: 0em;\n  float: none;\n  margin-right: 0.78571429rem;\n}\n\n/*--------------\n     Image\n---------------*/\n\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  display: inline-block;\n  vertical-align: middle;\n  width: auto;\n  max-height: 2em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n\n/* Remove Menu Item Divider */\n.ui.dropdown .ui.menu > .item:before,\n.ui.menu .ui.dropdown .menu > .item:before {\n  display: none;\n}\n\n/* Prevent Menu Item Border */\n.ui.menu .ui.dropdown .menu .active.item {\n  border-left: none;\n}\n\n/* Automatically float dropdown menu right on last menu item */\n.ui.menu .right.menu .dropdown:last-child .menu,\n.ui.menu .right.dropdown.item .menu,\n.ui.buttons > .ui.dropdown:last-child .menu {\n  left: auto;\n  right: 0em;\n}\n\n/*--------------\n      Label\n---------------*/\n\n\n/* Dropdown Menu */\n.ui.label.dropdown .menu {\n  min-width: 100%;\n}\n\n/*--------------\n     Button\n---------------*/\n\n\n/* No Margin On Icon Button */\n.ui.dropdown.icon.button > .dropdown.icon {\n  margin: 0em;\n}\n.ui.button.dropdown .menu {\n  min-width: 100%;\n}\n\n\n/*******************************\n              Types\n*******************************/\n\n\n/*--------------\n    Selection\n---------------*/\n\n\n/* Displays like a select box */\n.ui.selection.dropdown {\n  cursor: pointer;\n  word-wrap: break-word;\n  line-height: 1em;\n  white-space: normal;\n  outline: 0;\n  -webkit-transform: rotateZ(0deg);\n          transform: rotateZ(0deg);\n  min-width: 14em;\n  min-height: 2.7142em;\n  background: #FFFFFF;\n  display: inline-block;\n  padding: 0.78571429em 2.1em 0.78571429em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n}\n.ui.selection.dropdown.visible,\n.ui.selection.dropdown.active {\n  z-index: 10;\n}\nselect.ui.dropdown {\n  height: 38px;\n  padding: 0.5em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  visibility: visible;\n}\n.ui.selection.dropdown > .search.icon,\n.ui.selection.dropdown > .delete.icon,\n.ui.selection.dropdown > .dropdown.icon {\n  cursor: pointer;\n  position: absolute;\n  width: auto;\n  height: auto;\n  line-height: 1.2142em;\n  top: 0.78571429em;\n  right: 1em;\n  z-index: 3;\n  margin: -0.78571429em;\n  padding: 0.78571429em;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Compact */\n.ui.compact.selection.dropdown {\n  min-width: 0px;\n}\n\n/*  Selection Menu */\n.ui.selection.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  border-top-width: 0px !important;\n  width: auto;\n  outline: none;\n  margin: 0px -1px;\n  min-width: calc(100% +  2px );\n  width: calc(100% +  2px );\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.selection.dropdown .menu:after,\n.ui.selection.dropdown .menu:before {\n  display: none;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.selection.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n}\n@media only screen and (max-width: 767px) {\n  .ui.selection.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.selection.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.selection.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.selection.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/* Menu Item */\n.ui.selection.dropdown .menu > .item {\n  border-top: 1px solid #FAFAFA;\n  padding: 0.78571429rem 1.14285714rem !important;\n  white-space: normal;\n  word-wrap: normal;\n}\n\n/* User Item */\n.ui.selection.dropdown .menu > .hidden.addition.item {\n  display: none;\n}\n\n/* Hover */\n.ui.selection.dropdown:hover {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: none;\n}\n\n/* Active */\n.ui.selection.active.dropdown {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.selection.active.dropdown .menu {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Focus */\n.ui.selection.dropdown:focus {\n  border-color: #96C8DA;\n  box-shadow: none;\n}\n.ui.selection.dropdown:focus .menu {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible */\n.ui.selection.visible.dropdown > .text:not(.default) {\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Visible Hover */\n.ui.selection.active.dropdown:hover {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.selection.active.dropdown:hover .menu {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Dropdown Icon */\n.ui.active.selection.dropdown > .dropdown.icon,\n.ui.visible.selection.dropdown > .dropdown.icon {\n  opacity: 1;\n  z-index: 3;\n}\n\n/* Connecting Border */\n.ui.active.selection.dropdown {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n/* Empty Connecting Border */\n.ui.active.empty.selection.dropdown {\n  border-radius: 0.28571429rem !important;\n  box-shadow: none !important;\n}\n.ui.active.empty.selection.dropdown .menu {\n  border: none !important;\n  box-shadow: none !important;\n}\n\n/*--------------\n   Searchable\n---------------*/\n\n\n/* Search Selection */\n.ui.search.dropdown {\n  min-width: '';\n}\n\n/* Search Dropdown */\n.ui.search.dropdown > input.search {\n  background: none transparent !important;\n  border: none !important;\n  box-shadow: none !important;\n  cursor: text;\n  top: 0em;\n  left: 1px;\n  width: 100%;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: inherit;\n}\n\n/* Text Layering */\n.ui.search.dropdown > input.search {\n  position: absolute;\n  z-index: 2;\n}\n.ui.search.dropdown > .text {\n  cursor: text;\n  position: relative;\n  left: 1px;\n  z-index: 3;\n}\n\n/* Search Selection */\n.ui.search.selection.dropdown > input.search {\n  line-height: 1.2142em;\n  padding: 0.67861429em 2.1em 0.67861429em 1em;\n}\n\n/* Used to size multi select input to character width */\n.ui.search.selection.dropdown > span.sizer {\n  line-height: 1.2142em;\n  padding: 0.67861429em 2.1em 0.67861429em 1em;\n  display: none;\n  white-space: pre;\n}\n\n/* Active/Visible Search */\n.ui.search.dropdown.active > input.search,\n.ui.search.dropdown.visible > input.search {\n  cursor: auto;\n}\n.ui.search.dropdown.active > .text,\n.ui.search.dropdown.visible > .text {\n  pointer-events: none;\n}\n\n/* Filtered Text */\n.ui.active.search.dropdown input.search:focus + .text .icon,\n.ui.active.search.dropdown input.search:focus + .text .flag {\n  opacity: 0.45;\n}\n.ui.active.search.dropdown input.search:focus + .text {\n  color: rgba(115, 115, 115, 0.87) !important;\n}\n\n/* Search Menu */\n.ui.search.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n@media only screen and (max-width: 767px) {\n  .ui.search.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.search.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.search.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.search.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/*--------------\n    Multiple\n---------------*/\n\n\n/* Multiple Selection */\n.ui.multiple.dropdown {\n  padding: 0.22620476em 2.1em 0.22620476em 0.35714286em;\n}\n.ui.multiple.dropdown .menu {\n  cursor: auto;\n}\n\n/* Multiple Search Selection */\n.ui.multiple.search.dropdown,\n.ui.multiple.search.dropdown > input.search {\n  cursor: text;\n}\n\n/* Selection Label */\n.ui.multiple.dropdown > .label {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  display: inline-block;\n  vertical-align: top;\n  white-space: normal;\n  font-size: 1em;\n  padding: 0.35714286em 0.78571429em;\n  margin: 0.14285714rem 0.28571429rem 0.14285714rem 0em;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n/* Dropdown Icon */\n.ui.multiple.dropdown .dropdown.icon {\n  margin: '';\n  padding: '';\n}\n\n/* Text */\n.ui.multiple.dropdown > .text {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45240952em 0em 0.45240952em 0.64285714em;\n  line-height: 1.21428571em;\n}\n.ui.multiple.dropdown > .label ~ input.search {\n  margin-left: 0.14285714em !important;\n}\n.ui.multiple.dropdown > .label ~ .text {\n  display: none;\n}\n\n/*-----------------\n  Multiple Search\n-----------------*/\n\n\n/* Prompt Text */\n.ui.multiple.search.dropdown > .text {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: inherit;\n  margin: 0.45240952em 0em 0.45240952em 0.64285714em;\n  line-height: 1.21428571em;\n}\n.ui.multiple.search.dropdown > .label ~ .text {\n  display: none;\n}\n\n/* Search */\n.ui.multiple.search.dropdown > input.search {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45240952em 0em 0.45240952em 0.64285714em;\n  width: 2.2em;\n  line-height: 1.21428571em;\n}\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.dropdown {\n  cursor: pointer;\n  display: inline-block;\n  color: inherit;\n}\n.ui.inline.dropdown .dropdown.icon {\n  margin: 0em 0.5em 0em 0.21428571em;\n  vertical-align: baseline;\n}\n.ui.inline.dropdown > .text {\n  font-weight: bold;\n}\n.ui.inline.dropdown .menu {\n  cursor: auto;\n  margin-top: 0.21428571em;\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n        Active\n----------------------*/\n\n\n/* Menu Item Active */\n.ui.dropdown .menu .active.item {\n  background: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: none;\n  z-index: 12;\n}\n\n/*--------------------\n        Hover\n----------------------*/\n\n\n/* Menu Item Hover */\n.ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.dropdown > i.icon {\n  height: 1em !important;\n  padding: 1.14285714em 1.07142857em !important;\n}\n.ui.loading.dropdown > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.dropdown > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  box-shadow: 0px 0px 0px 1px transparent;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: dropdown-spin 0.6s linear;\n          animation: dropdown-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n}\n\n/* Coupling */\n.ui.loading.dropdown.button > i.icon:before,\n.ui.loading.dropdown.button > i.icon:after {\n  display: none;\n}\n@-webkit-keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n/*--------------------\n     Default Text\n----------------------*/\n\n.ui.dropdown:not(.button) > .default.text,\n.ui.default.dropdown:not(.button) > .text {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.dropdown:not(.button) > input:focus + .default.text,\n.ui.default.dropdown:not(.button) > input:focus + .text {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Loading\n----------------------*/\n\n.ui.loading.dropdown > .text {\n  -webkit-transition: none;\n  transition: none;\n}\n\n/* Used To Check Position */\n.ui.dropdown .loading.menu {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n\n/*--------------------\n    Keyboard Select\n----------------------*/\n\n\n/* Selected Item */\n.ui.dropdown.selected,\n.ui.dropdown .menu .selected.item {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n    Search Filtered\n----------------------*/\n\n\n/* Filtered Item */\n.ui.dropdown > .filtered.text {\n  visibility: hidden;\n}\n.ui.dropdown .filtered.item {\n  display: none !important;\n}\n\n/*--------------------\n        Error\n----------------------*/\n\n.ui.dropdown.error,\n.ui.dropdown.error > .text,\n.ui.dropdown.error > .default.text {\n  color: #9F3A38;\n}\n.ui.selection.dropdown.error {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n.ui.selection.dropdown.error:hover {\n  border-color: #E0B4B4;\n}\n.ui.dropdown.error > .menu,\n.ui.dropdown.error > .menu .menu {\n  border-color: #E0B4B4;\n}\n.ui.dropdown.error > .menu > .item {\n  color: #9F3A38;\n}\n.ui.multiple.selection.error.dropdown > .label {\n  border-color: #E0B4B4;\n}\n\n/* Item Hover */\n.ui.dropdown.error > .menu > .item:hover {\n  background-color: #FFF2F2;\n}\n\n/* Item Active */\n.ui.dropdown.error > .menu .active.item {\n  background-color: #FDCFCF;\n}\n\n/*--------------------\n        Disabled\n----------------------*/\n\n\n/* Disabled */\n.ui.disabled.dropdown,\n.ui.dropdown .menu > .disabled.item {\n  cursor: default;\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Direction\n---------------*/\n\n\n/* Flyout Direction */\n.ui.dropdown .menu {\n  left: 0px;\n}\n\n/* Default Side (Right) */\n.ui.dropdown .right.menu > .menu,\n.ui.dropdown .menu .right.menu {\n  left: 100% !important;\n  right: auto !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/* Left Flyout Menu */\n.ui.dropdown > .left.menu .menu,\n.ui.dropdown .menu .left.menu {\n  left: auto !important;\n  right: 100% !important;\n  border-radius: 0.28571429rem !important;\n}\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0.78571429rem 0em 0em;\n}\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0.78571429rem 0em 0em;\n}\n.ui.dropdown .item .left.dropdown.icon + .text,\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\n  margin-left: 1em;\n}\n\n/*--------------\n     Upward\n---------------*/\n\n\n/* Upward Main Menu */\n.ui.upward.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Upward Sub Menu */\n.ui.dropdown .upward.menu {\n  top: auto !important;\n  bottom: 0 !important;\n}\n\n/* Active Upward */\n.ui.simple.upward.active.dropdown,\n.ui.simple.upward.dropdown:hover {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n}\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Selection */\n.ui.upward.selection.dropdown .menu {\n  border-top-width: 1px !important;\n  border-bottom-width: 0px !important;\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n.ui.upward.selection.dropdown:hover {\n  box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n}\n\n/* Active Upward */\n.ui.active.upward.selection.dropdown {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Upward */\n.ui.upward.selection.dropdown.visible {\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Hover Upward */\n.ui.upward.active.selection.dropdown:hover {\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n}\n.ui.upward.active.selection.dropdown:hover .menu {\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/*  Selection Menu */\n.ui.scrolling.dropdown .menu,\n.ui.dropdown .scrolling.menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.ui.scrolling.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  min-width: 100% !important;\n  width: auto !important;\n}\n.ui.dropdown .scrolling.menu {\n  position: static;\n  overflow-y: auto;\n  border: none;\n  box-shadow: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  min-width: 100% !important;\n  width: auto !important;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.scrolling.dropdown .menu .item.item.item,\n.ui.dropdown .scrolling.menu > .item.item.item {\n  border-top: none;\n  padding-right: calc( 1.14285714rem  +  17px ) !important;\n}\n.ui.scrolling.dropdown .menu .item:first-child,\n.ui.dropdown .scrolling.menu .item:first-child {\n  border-top: none;\n}\n.ui.dropdown > .animating.menu .scrolling.menu,\n.ui.dropdown > .visible.menu .scrolling.menu {\n  display: block;\n}\n\n/* Scrollbar in IE */\n@media all and (-ms-high-contrast: none) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    min-width: calc(100% -  17px );\n  }\n}\n@media only screen and (max-width: 767px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 10.28571429rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 15.42857143rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/* Displays without javascript */\n.ui.simple.dropdown .menu:before,\n.ui.simple.dropdown .menu:after {\n  display: none;\n}\n.ui.simple.dropdown .menu {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  top: -9999px !important;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.simple.active.dropdown,\n.ui.simple.dropdown:hover {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n.ui.simple.active.dropdown > .menu,\n.ui.simple.dropdown:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 100% !important;\n  opacity: 1;\n}\n.ui.simple.dropdown > .menu > .item:active > .menu,\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 0% !important;\n  left: 100% !important;\n  opacity: 1;\n}\n.ui.simple.disabled.dropdown:hover .menu {\n  display: none;\n  height: 0px;\n  width: 0px;\n  overflow: hidden;\n}\n\n/* Visible */\n.ui.simple.visible.dropdown > .menu {\n  display: block;\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n.ui.fluid.dropdown {\n  display: block;\n  width: 100%;\n  min-width: 0em;\n}\n.ui.fluid.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.dropdown .menu {\n  left: 0;\n  right: auto;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n  border-radius: 0.28571429rem !important;\n}\n.ui.floating.dropdown > .menu {\n  margin-top: 0.5em !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Pointing\n---------------*/\n\n.ui.pointing.dropdown > .menu {\n  top: 100%;\n  margin-top: 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n.ui.pointing.dropdown > .menu:after {\n  display: block;\n  position: absolute;\n  pointer-events: none;\n  content: '';\n  visibility: visible;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  width: 0.5em;\n  height: 0.5em;\n  box-shadow: -1px -1px 0px 1px rgba(34, 36, 38, 0.15);\n  background: #FFFFFF;\n  z-index: 2;\n}\n.ui.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 50%;\n  margin: 0em 0em 0em -0.25em;\n}\n\n/* Top Left Pointing */\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 1em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n}\n\n/* Top Right  Pointing */\n.ui.top.right.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  right: 0%;\n  left: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.right.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: auto;\n  right: 1em;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n}\n\n/* Left Pointing */\n.ui.left.pointing.dropdown > .menu {\n  top: 0%;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em 1em;\n}\n.ui.left.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n}\n\n/* Right Pointing */\n.ui.right.pointing.dropdown > .menu {\n  top: 0%;\n  left: auto;\n  right: 100%;\n  margin: 0em 1em 0em 0em;\n}\n.ui.right.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n          transform: rotate(135deg);\n}\n\n/* Bottom Pointing */\n.ui.bottom.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  left: 0%;\n  right: auto;\n  margin: 0em 0em 1em;\n}\n.ui.bottom.pointing.dropdown > .menu:after {\n  top: auto;\n  bottom: -0.25em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(-135deg);\n          transform: rotate(-135deg);\n}\n\n/* Reverse Sub-Menu Direction */\n.ui.bottom.pointing.dropdown > .menu .menu {\n  top: auto !important;\n  bottom: 0px !important;\n}\n\n/* Bottom Left */\n.ui.bottom.left.pointing.dropdown > .menu {\n  left: 0%;\n  right: auto;\n}\n.ui.bottom.left.pointing.dropdown > .menu:after {\n  left: 1em;\n  right: auto;\n}\n\n/* Bottom Right */\n.ui.bottom.right.pointing.dropdown > .menu {\n  right: 0%;\n  left: auto;\n}\n.ui.bottom.right.pointing.dropdown > .menu:after {\n  left: auto;\n  right: 1em;\n}\n\n/* Upward pointing */\n.ui.upward.pointing.dropdown > .menu,\n.ui.upward.top.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  margin: 0em 0em 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n.ui.upward.pointing.dropdown > .menu:after,\n.ui.upward.top.pointing.dropdown > .menu:after {\n  top: 100%;\n  bottom: auto;\n  box-shadow: 1px 1px 0px 1px rgba(34, 36, 38, 0.15);\n  margin: -0.25em 0em 0em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n/* Dropdown Carets */\n@font-face {\n  font-family: 'Dropdown';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da' /*rtl:'\\f0d9'*/;\n}\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\" /*rtl:\"\\f0da\"*/;\n}\n\n/* Vertical Menu Dropdown */\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\" /*rtl:\"\\f0d9\"*/;\n}\n/* Icons for Reference\n.dropdown.down.icon {\n  content: \"\\f0d7\";\n}\n.dropdown.up.icon {\n  content: \"\\f0d8\";\n}\n.dropdown.left.icon {\n  content: \"\\f0d9\";\n}\n.dropdown.icon.icon {\n  content: \"\\f0da\";\n}\n*/\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/dropdown.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $sizer          = $module.find(selector.sizer),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        willRefocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          module.disconnect.menuObserver();\n          module.disconnect.selectObserver();\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(module.event.select.mutation);\n            menuObserver   = new MutationObserver(module.event.menu.mutation);\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n            module.observe.select();\n            module.observe.menu();\n          }\n        },\n\n        disconnect: {\n          menuObserver: function() {\n            if(menuObserver) {\n              menuObserver.disconnect();\n            }\n          },\n          selectObserver: function() {\n            if(selectObserver) {\n              selectObserver.disconnect();\n            }\n          }\n        },\n        observe: {\n          select: function() {\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          menu: function() {\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                if(settings.hideAdditions) {\n                  $userChoice.addClass(className.hidden);\n                }\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          },\n          sizer: function() {\n            $sizer = $('<span />')\n              .addClass(className.sizer)\n              .insertAfter($search)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          if(module.has.minCharacters(query)) {\n            module.filter(query);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n              .not(selector.addition + selector.hidden)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug   : settings.debug,\n                urlData : {\n                  value : module.get.value(),\n                  query : module.get.query()\n                },\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {\n              module.create.sizer();\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown');\n                $module.addClass(className.disabled);\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshItems: function() {\n          $item = $menu.find(selector.item);\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n        },\n\n        clearData: function() {\n          module.verbose('Clearing metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(module.is.allFiltered()) {\n              return true;\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                if(module.has.menuSearch()) {\n                  module.focusSearch();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('click'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n                .on('blur'      + eventNamespace, module.event.blur)\n              ;\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              module.select.firstUnfiltered();\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(settings.allowAdditions) {\n                    if(settings.hideAdditions) {\n                      module.verbose('User addition with no menu, setting empty style');\n                      module.set.empty();\n                      module.hideMenu();\n                    }\n                  }\n                  else {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.empty();\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration : false,\n              cache         : 'local',\n              throttle      : settings.throttle,\n              urlData       : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.regExp(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(term.indexOf(query) > -1) {\n             return true;\n          }\n          return false;\n        },\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function(skipHandler) {\n          if( module.has.search() && !module.is.focusedOnSearch() ) {\n            if(skipHandler) {\n              $module.off('focus' + eventNamespace, selector.search);\n              $search.focus();\n              $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);\n            }\n            else {\n              $search.focus();\n            }\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.length > 0)\n          ;\n          if(hasSelected) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem, {}, true);\n            return;\n          }\n          else {\n            if(settings.allowAdditions) {\n              module.set.selected(module.get.query());\n              module.remove.searchTerm();\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          mousedown: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = true;\n            }\n            else {\n              // prevents focus callback from occurring on mousedown\n              activated = true;\n            }\n          },\n          mouseup: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = false;\n            }\n            else {\n              activated = false;\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module)) {\n              if(!module.is.focusedOnSearch()) {\n                module.focusSearch();\n              }\n              else {\n                module.show();\n              }\n            }\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(!willRefocus) {\n                if(!itemActivated && !pageLostFocus) {\n                  if(settings.forceSelection) {\n                    module.forceSelection();\n                  }\n                  module.hide();\n                }\n              }\n              willRefocus = false;\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {\n                return;\n              }\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          select: {\n            mutation: function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            }\n          },\n          menu: {\n            mutation: function(mutations) {\n              var\n                mutation   = mutations[0],\n                $addedNode = mutation.addedNodes\n                  ? $(mutation.addedNodes[0])\n                  : $(false),\n                $removedNode = mutation.removedNodes\n                  ? $(mutation.removedNodes[0])\n                  : $(false),\n                $changedNodes  = $addedNode.add($removedNode),\n                isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,\n                isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0\n              ;\n              if(isUserAddition || isMessage) {\n                module.debug('Updating item selector cache');\n                module.refreshItems();\n              }\n              else {\n                module.debug('Menu modified, updating selector cache');\n                module.refresh();\n              }\n            },\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $target        = $(event.target),\n                $item          = $(this),\n                $subMenu       = $item.children(selector.menu),\n                $otherMenus    = $item.siblings(selector.item).children(selector.menu),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if( !isBubbledEvent && hasSubMenu ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false, $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false, $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event, skipRefocus) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(module.is.searchSelection()) {\n                  if(settings.allowAdditions) {\n                    module.remove.userAddition();\n                  }\n                  module.remove.searchTerm();\n                  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {\n                    module.focusSearch(true);\n                  }\n                }\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu              = $selectedItem.children(selector.menu),\n                $parentMenu           = $selectedItem.closest(selector.menu),\n                inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu            = ($subMenu.length> 0),\n                hasSelectedItem       = ($selectedItem.length > 0),\n                selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // allow selection with menu closed\n              if(isAdditionWithoutMenu) {\n                module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                module.event.item.click.call($selectedItem, event);\n                if(module.is.searchSelection()) {\n                  module.remove.searchTerm();\n                }\n              }\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // sub-menu actions\n                if(hasSelectedItem) {\n\n                  if(pressedKey == keys.leftArrow) {\n\n                    isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                    if(isSubMenuItem) {\n                      module.verbose('Left key pressed, closing sub-menu');\n                      module.animate.hide(false, $parentMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $parentMenu\n                        .closest(selector.item)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n\n                  // right arrow (show sub-menu)\n                  if(pressedKey == keys.rightArrow) {\n                    if(hasSubMenu) {\n                      module.verbose('Right key pressed, opening sub-menu');\n                      module.animate.show(false, $subMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $subMenu\n                        .find(selector.item).eq(0)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow && !module.is.visible()) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.select.firstUnfiltered();\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( !module.has.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(element, text, value, this);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(element, text, value, this);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target      = $(event.target),\n              $label       = $target.closest(selector.siblingLabel),\n              inVisibleDOM = document.body.contains(event.target),\n              notOnLabel   = ($module.find($label).length === 0),\n              notInMenu    = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inVisibleDOM && notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.selected(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.value(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          combo: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(element));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value, element) {\n            module.set.value(value, text);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(value) {\n            value = (value !== undefined)\n              ? value\n              : $search.val()\n            ;\n            $sizer.text(value);\n            // prevent rounding issues\n            return Math.ceil( $sizer.width() + 1);\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value),\n              isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')\n            ;\n            // prevents placeholder element from being selected when multiple\n            return (value === undefined || isEmptyMultiselect)\n              ? ''\n              : value\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                if(name) {\n                  if(!remoteValues) {\n                    remoteValues = {};\n                  }\n                  remoteValues[value] = name;\n                }\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retrieving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retrieved values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          placeholderText: function() {\n            module.set.placeholderText();\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occurring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {\n              module.restore.remoteValues();\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple() && settings.useLabels) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            if(settings.selectOnKeydown && module.is.single()) {\n              module.set.selectedItem($nextSelectedItem);\n            }\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          empty: function() {\n            $module.addClass(className.empty);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          partialSearch: function(text) {\n            var\n              length = module.get.query().length\n            ;\n            $search.val( text.substr(0 , length));\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedItem: function($item) {\n            var\n              value = module.get.choiceValue($item),\n              text  = module.get.choiceText($item, false)\n            ;\n            module.debug('Setting user selection to item', $item);\n            module.remove.activeItem();\n            module.set.partialSearch(text);\n            module.set.activeItem($item);\n            module.set.selected(value, $item);\n            module.set.text(text);\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n              if(settings.selectOnKeydown && module.is.single()) {\n                module.set.selectedItem($nextValue);\n              }\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              if(module.is.onScreen($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.addClass(className.upward);\n          },\n          value: function(value, text, $selected) {\n            var\n              escapedValue = module.escape.value(value),\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(!settings.allowReselection && stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', escapedValue, currentValue);\n              internalChange = true;\n              $input\n                .val(escapedValue)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', escapedValue, $input);\n              if(escapedValue !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.multiple()) {\n              module.remove.searchWidth();\n            }\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              escapedValue = module.escape.value(value),\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-value', escapedValue)\n              .html(templates.label(escapedValue, text))\n            ;\n            $label = settings.onLabelCreate.call($label, escapedValue, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', escapedValue);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + escapedValue + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            module.disconnect.selectObserver();\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', escapedValue)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            module.observe.select();\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            if(hasUserSuggestion) {\n              $addition\n                .data(metadata.value, value)\n                .data(metadata.text, value)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n              ;\n              if(!settings.hideAdditions) {\n                html = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $addition\n                  .html(html)\n                ;\n              }\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n            if(!settings.hideAdditions || module.is.allFiltered()) {\n              $addition\n                .addClass(className.selected)\n                .siblings()\n                .removeClass(className.selected)\n              ;\n            }\n            module.refreshItems();\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          empty: function() {\n            $module.removeClass(className.empty);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.removeClass(className.upward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n            module.remove.empty();\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + escapedValue + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer');\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', escapedValue);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchWidth: function() {\n            $search.css('width', '');\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          userAddition: function() {\n            $item.filter(selector.addition).remove();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-value=\"' + value +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                module.remove.message();\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          menuSearch: function() {\n            return (module.has.search() && $search.closest($menu).length > 0);\n          },\n          search: function() {\n            return ($search.length > 0);\n          },\n          sizer: function() {\n            return ($sizer.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          minCharacters: function(searchTerm) {\n            if(settings.minCharacters) {\n              searchTerm = (searchTerm !== undefined)\n                ? String(searchTerm)\n                : String(module.get.query())\n              ;\n              return (searchTerm.length >= settings.minCharacters);\n            }\n            return true;\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $labels      = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-value=\"' + escapedValue +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            var\n              $normalResults = $item.not(selector.addition)\n            ;\n            return ($normalResults.filter(selector.unselectable).length === $normalResults.length);\n          },\n          userSuggestion: function() {\n            return ($menu.children(selector.addition).length > 0);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          bubbledLabelClick: function(event) {\n            return $(event.target).is('select, input') && $module.closest('label').length > 0;\n          },\n          bubbledIconClick: function(event) {\n            return $(event.target).closest($icon).length > 0;\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          onScreen: function($subMenu) {\n            var\n              $currentMenu   = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen = {},\n              calculations\n            ;\n            $currentMenu.addClass(className.loading);\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      if(settings.direction == 'auto') {\n                        module.remove.upward($subMenu);\n                      }\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          value: function(value) {\n            var\n              multipleValues = $.isArray(value),\n              stringValue    = (typeof value === 'string'),\n              isUnparsable   = (!stringValue && !multipleValues),\n              hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),\n              values         = []\n            ;\n            if(!module.has.selectInput() || isUnparsable || !hasQuotes) {\n              return value;\n            }\n            module.debug('Encoding quote values for use in select', value);\n            if(multipleValues) {\n              $.each(value, function(index, value){\n                values.push(value.replace(regExp.quote, '&quot;'));\n              });\n              return values;\n            }\n            return value.replace(regExp.quote, '&quot;');\n          },\n          regExp: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  silent                 : false,\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used\n  minCharacters          : 0,          // Minimum characters required to trigger API call\n  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n  throttle               : 200,        // How long to wait after last user input to search remotely\n\n  context                : window,     // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n\n  allowAdditions         : false,      // whether multiple select should allow user added values\n  hideAdditions          : true,      // whether or not to hide special message prompting a user they can enter a value\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowReselection       : false,      // whether current value should trigger callbacks when reselected\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n    quote    : /\"/g\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results',  // grouping for api results\n    values       : 'values',   // grouping for all dropdown values\n    disabled     : 'disabled', // whether value should be disabled\n    name         : 'name',     // displayed dropdown text\n    value        : 'value',    // actual dropdown value\n    text         : 'text'      // displayed text when selected\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    hidden       : '.hidden',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input, .menu input.search',\n    sizer        : '> input.sizer',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    empty       : 'empty',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    sizer       : 'sizer',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      var\n        maybeText = (option[fields.text])\n          ? 'data-text=\"' + option[fields.text] + '\"'\n          : '',\n        maybeDisabled = (option[fields.disabled])\n          ? 'disabled '\n          : ''\n      ;\n      html += '<div class=\"'+ maybeDisabled +'item\" data-value=\"' + option[fields.value] + '\"' + maybeText + '>'\n      html +=   option[fields.name];\n      html += '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/embed.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Types\n*******************************/\n\n.ui.embed {\n  position: relative;\n  max-width: 100%;\n  height: 0px;\n  overflow: hidden;\n  background: #DCDDDE;\n  padding-bottom: 56.25%;\n}\n\n/*-----------------\n  Embedded Content\n------------------*/\n\n.ui.embed iframe,\n.ui.embed embed,\n.ui.embed object {\n  position: absolute;\n  border: none;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  margin: 0em;\n  padding: 0em;\n}\n\n/*-----------------\n      Embed\n------------------*/\n\n.ui.embed > .embed {\n  display: none;\n}\n\n/*--------------\n   Placeholder\n---------------*/\n\n.ui.embed > .placeholder {\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.embed > .icon {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n}\n.ui.embed > .icon:after {\n  position: absolute;\n  top: 0%;\n  left: 0%;\n  width: 100%;\n  height: 100%;\n  z-index: 3;\n  content: '';\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 0.5;\n  -webkit-transition: opacity 0.5s ease;\n  transition: opacity 0.5s ease;\n}\n.ui.embed > .icon:before {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 4;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  color: #FFFFFF;\n  font-size: 6rem;\n  text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);\n  -webkit-transition: opacity 0.5s ease, color 0.5s ease;\n  transition: opacity 0.5s ease, color 0.5s ease;\n  z-index: 10;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Hover\n---------------*/\n\n.ui.embed .icon:hover:after {\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 1;\n}\n.ui.embed .icon:hover:before {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.embed > .icon,\n.ui.active.embed > .placeholder {\n  display: none;\n}\n.ui.active.embed > .embed {\n  display: block;\n}\n\n\n/*******************************\n        Video Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.square.embed {\n  padding-bottom: 100%;\n}\n.ui[class*=\"4:3\"].embed {\n  padding-bottom: 75%;\n}\n.ui[class*=\"16:9\"].embed {\n  padding-bottom: 56.25%;\n}\n.ui[class*=\"21:9\"].embed {\n  padding-bottom: 42.85714286%;\n}\n"
  },
  {
    "path": "css/semantic-ui/components/embed.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Embed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        changeEmbed: function(url) {\n          $embed\n            .html( module.generate.embed(url) )\n          ;\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n          ;\n          if(url) {\n            $module.data(metadata.url, url);\n          }\n          else {\n            $module.removeData(metadata.url);\n          }\n          if(module.has.embed()) {\n            module.changeEmbed();\n          }\n          else {\n            module.create();\n          }\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          embed: function() {\n            return ($embed.length > 0);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.color || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.color || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      var src = url;\n      if (parameters) {\n          src += '?' + parameters;\n      }\n      return ''\n        + '<iframe src=\"' + src + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : false,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/feed.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Feed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n         Activity Feed\n*******************************/\n\n.ui.feed {\n  margin: 1em 0em;\n}\n.ui.feed:first-child {\n  margin-top: 0em;\n}\n.ui.feed:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Event */\n.ui.feed > .event {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  width: 100%;\n  padding: 0.21428571rem 0em;\n  margin: 0em;\n  background: none;\n  border-top: none;\n}\n.ui.feed > .event:first-child {\n  border-top: 0px;\n  padding-top: 0em;\n}\n.ui.feed > .event:last-child {\n  padding-bottom: 0em;\n}\n\n/* Event Label */\n.ui.feed > .event > .label {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: 2.5em;\n  height: auto;\n  -ms-flex-item-align: stretch;\n      -ms-grid-row-align: stretch;\n      align-self: stretch;\n  text-align: left;\n}\n.ui.feed > .event > .label .icon {\n  opacity: 1;\n  font-size: 1.5em;\n  width: 100%;\n  padding: 0.25em;\n  background: none;\n  border: none;\n  border-radius: none;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.feed > .event > .label img {\n  width: 100%;\n  height: auto;\n  border-radius: 500rem;\n}\n.ui.feed > .event > .label + .content {\n  margin: 0.5em 0em 0.35714286em 1.14285714em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n\n/* Content */\n.ui.feed > .event > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  -ms-flex-item-align: stretch;\n      -ms-grid-row-align: stretch;\n      align-self: stretch;\n  text-align: left;\n  word-wrap: break-word;\n}\n.ui.feed > .event:last-child > .content {\n  padding-bottom: 0em;\n}\n\n/* Link */\n.ui.feed > .event > .content a {\n  cursor: pointer;\n}\n\n/*--------------\n      Date\n---------------*/\n\n.ui.feed > .event > .content .date {\n  margin: -0.5rem 0em 0em;\n  padding: 0em;\n  font-weight: normal;\n  font-size: 1em;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n     Summary\n---------------*/\n\n.ui.feed > .event > .content .summary {\n  margin: 0em;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Summary Image */\n.ui.feed > .event > .content .summary img {\n  display: inline-block;\n  width: auto;\n  height: 10em;\n  margin: -0.25em 0.25em 0em 0em;\n  border-radius: 0.25em;\n  vertical-align: middle;\n}\n\n/*--------------\n      User\n---------------*/\n\n.ui.feed > .event > .content .user {\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 0em;\n  vertical-align: baseline;\n}\n.ui.feed > .event > .content .user img {\n  margin: -0.25em 0.25em 0em 0em;\n  width: auto;\n  height: 10em;\n  vertical-align: middle;\n}\n\n/*--------------\n   Inline Date\n---------------*/\n\n\n/* Date inside Summary */\n.ui.feed > .event > .content .summary > .date {\n  display: inline-block;\n  float: none;\n  font-weight: normal;\n  font-size: 0.85714286em;\n  font-style: normal;\n  margin: 0em 0em 0em 0.5em;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n  Extra Summary\n---------------*/\n\n.ui.feed > .event > .content .extra {\n  margin: 0.5em 0em 0em;\n  background: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Images */\n.ui.feed > .event > .content .extra.images img {\n  display: inline-block;\n  margin: 0em 0.25em 0em 0em;\n  width: 6em;\n}\n\n/* Text */\n.ui.feed > .event > .content .extra.text {\n  padding: 0em;\n  border-left: none;\n  font-size: 1em;\n  max-width: 500px;\n  line-height: 1.4285em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.feed > .event > .content .meta {\n  display: inline-block;\n  font-size: 0.85714286em;\n  margin: 0.5em 0em 0em;\n  background: none;\n  border: none;\n  border-radius: 0;\n  box-shadow: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.feed > .event > .content .meta > * {\n  position: relative;\n  margin-left: 0.75em;\n}\n.ui.feed > .event > .content .meta > *:after {\n  content: '';\n  color: rgba(0, 0, 0, 0.2);\n  top: 0em;\n  left: -1em;\n  opacity: 1;\n  position: absolute;\n  vertical-align: top;\n}\n.ui.feed > .event > .content .meta .like {\n  color: '';\n  -webkit-transition: 0.2s color ease;\n  transition: 0.2s color ease;\n}\n.ui.feed > .event > .content .meta .like:hover .icon {\n  color: #FF2733;\n}\n.ui.feed > .event > .content .meta .active.like .icon {\n  color: #EF404A;\n}\n\n/* First element */\n.ui.feed > .event > .content .meta > :first-child {\n  margin-left: 0em;\n}\n.ui.feed > .event > .content .meta > :first-child::after {\n  display: none;\n}\n\n/* Action */\n.ui.feed > .event > .content .meta a,\n.ui.feed > .event > .content .meta > .icon {\n  cursor: pointer;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.5);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.feed > .event > .content .meta a:hover,\n.ui.feed > .event > .content .meta a:hover .icon,\n.ui.feed > .event > .content .meta > .icon:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n.ui.small.feed {\n  font-size: 0.92857143rem;\n}\n.ui.feed {\n  font-size: 1rem;\n}\n.ui.large.feed {\n  font-size: 1.14285714rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/flag.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Flag\n*******************************/\n\ni.flag:not(.icon) {\n  display: inline-block;\n  width: 16px;\n  height: 11px;\n  line-height: 11px;\n  vertical-align: baseline;\n  margin: 0em 0.5em 0em 0em;\n  text-decoration: inherit;\n  speak: none;\n  font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n/* Sprite */\ni.flag:not(.icon):before {\n  display: inline-block;\n  content: '';\n  background: url(\"./../themes/default/assets/images/flags.png\") no-repeat -108px -1976px;\n  width: 16px;\n  height: 11px;\n}\n\n/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\ni.flag.ad:before,\ni.flag.andorra:before {\n  background-position: 0px 0px;\n}\ni.flag.ae:before,\ni.flag.united.arab.emirates:before,\ni.flag.uae:before {\n  background-position: 0px -26px;\n}\ni.flag.af:before,\ni.flag.afghanistan:before {\n  background-position: 0px -52px;\n}\ni.flag.ag:before,\ni.flag.antigua:before {\n  background-position: 0px -78px;\n}\ni.flag.ai:before,\ni.flag.anguilla:before {\n  background-position: 0px -104px;\n}\ni.flag.al:before,\ni.flag.albania:before {\n  background-position: 0px -130px;\n}\ni.flag.am:before,\ni.flag.armenia:before {\n  background-position: 0px -156px;\n}\ni.flag.an:before,\ni.flag.netherlands.antilles:before {\n  background-position: 0px -182px;\n}\ni.flag.ao:before,\ni.flag.angola:before {\n  background-position: 0px -208px;\n}\ni.flag.ar:before,\ni.flag.argentina:before {\n  background-position: 0px -234px;\n}\ni.flag.as:before,\ni.flag.american.samoa:before {\n  background-position: 0px -260px;\n}\ni.flag.at:before,\ni.flag.austria:before {\n  background-position: 0px -286px;\n}\ni.flag.au:before,\ni.flag.australia:before {\n  background-position: 0px -312px;\n}\ni.flag.aw:before,\ni.flag.aruba:before {\n  background-position: 0px -338px;\n}\ni.flag.ax:before,\ni.flag.aland.islands:before {\n  background-position: 0px -364px;\n}\ni.flag.az:before,\ni.flag.azerbaijan:before {\n  background-position: 0px -390px;\n}\ni.flag.ba:before,\ni.flag.bosnia:before {\n  background-position: 0px -416px;\n}\ni.flag.bb:before,\ni.flag.barbados:before {\n  background-position: 0px -442px;\n}\ni.flag.bd:before,\ni.flag.bangladesh:before {\n  background-position: 0px -468px;\n}\ni.flag.be:before,\ni.flag.belgium:before {\n  background-position: 0px -494px;\n}\ni.flag.bf:before,\ni.flag.burkina.faso:before {\n  background-position: 0px -520px;\n}\ni.flag.bg:before,\ni.flag.bulgaria:before {\n  background-position: 0px -546px;\n}\ni.flag.bh:before,\ni.flag.bahrain:before {\n  background-position: 0px -572px;\n}\ni.flag.bi:before,\ni.flag.burundi:before {\n  background-position: 0px -598px;\n}\ni.flag.bj:before,\ni.flag.benin:before {\n  background-position: 0px -624px;\n}\ni.flag.bm:before,\ni.flag.bermuda:before {\n  background-position: 0px -650px;\n}\ni.flag.bn:before,\ni.flag.brunei:before {\n  background-position: 0px -676px;\n}\ni.flag.bo:before,\ni.flag.bolivia:before {\n  background-position: 0px -702px;\n}\ni.flag.br:before,\ni.flag.brazil:before {\n  background-position: 0px -728px;\n}\ni.flag.bs:before,\ni.flag.bahamas:before {\n  background-position: 0px -754px;\n}\ni.flag.bt:before,\ni.flag.bhutan:before {\n  background-position: 0px -780px;\n}\ni.flag.bv:before,\ni.flag.bouvet.island:before {\n  background-position: 0px -806px;\n}\ni.flag.bw:before,\ni.flag.botswana:before {\n  background-position: 0px -832px;\n}\ni.flag.by:before,\ni.flag.belarus:before {\n  background-position: 0px -858px;\n}\ni.flag.bz:before,\ni.flag.belize:before {\n  background-position: 0px -884px;\n}\ni.flag.ca:before,\ni.flag.canada:before {\n  background-position: 0px -910px;\n}\ni.flag.cc:before,\ni.flag.cocos.islands:before {\n  background-position: 0px -962px;\n}\ni.flag.cd:before,\ni.flag.congo:before {\n  background-position: 0px -988px;\n}\ni.flag.cf:before,\ni.flag.central.african.republic:before {\n  background-position: 0px -1014px;\n}\ni.flag.cg:before,\ni.flag.congo.brazzaville:before {\n  background-position: 0px -1040px;\n}\ni.flag.ch:before,\ni.flag.switzerland:before {\n  background-position: 0px -1066px;\n}\ni.flag.ci:before,\ni.flag.cote.divoire:before {\n  background-position: 0px -1092px;\n}\ni.flag.ck:before,\ni.flag.cook.islands:before {\n  background-position: 0px -1118px;\n}\ni.flag.cl:before,\ni.flag.chile:before {\n  background-position: 0px -1144px;\n}\ni.flag.cm:before,\ni.flag.cameroon:before {\n  background-position: 0px -1170px;\n}\ni.flag.cn:before,\ni.flag.china:before {\n  background-position: 0px -1196px;\n}\ni.flag.co:before,\ni.flag.colombia:before {\n  background-position: 0px -1222px;\n}\ni.flag.cr:before,\ni.flag.costa.rica:before {\n  background-position: 0px -1248px;\n}\ni.flag.cs:before,\ni.flag.serbia:before {\n  background-position: 0px -1274px;\n}\ni.flag.cu:before,\ni.flag.cuba:before {\n  background-position: 0px -1300px;\n}\ni.flag.cv:before,\ni.flag.cape.verde:before {\n  background-position: 0px -1326px;\n}\ni.flag.cx:before,\ni.flag.christmas.island:before {\n  background-position: 0px -1352px;\n}\ni.flag.cy:before,\ni.flag.cyprus:before {\n  background-position: 0px -1378px;\n}\ni.flag.cz:before,\ni.flag.czech.republic:before {\n  background-position: 0px -1404px;\n}\ni.flag.de:before,\ni.flag.germany:before {\n  background-position: 0px -1430px;\n}\ni.flag.dj:before,\ni.flag.djibouti:before {\n  background-position: 0px -1456px;\n}\ni.flag.dk:before,\ni.flag.denmark:before {\n  background-position: 0px -1482px;\n}\ni.flag.dm:before,\ni.flag.dominica:before {\n  background-position: 0px -1508px;\n}\ni.flag.do:before,\ni.flag.dominican.republic:before {\n  background-position: 0px -1534px;\n}\ni.flag.dz:before,\ni.flag.algeria:before {\n  background-position: 0px -1560px;\n}\ni.flag.ec:before,\ni.flag.ecuador:before {\n  background-position: 0px -1586px;\n}\ni.flag.ee:before,\ni.flag.estonia:before {\n  background-position: 0px -1612px;\n}\ni.flag.eg:before,\ni.flag.egypt:before {\n  background-position: 0px -1638px;\n}\ni.flag.eh:before,\ni.flag.western.sahara:before {\n  background-position: 0px -1664px;\n}\ni.flag.er:before,\ni.flag.eritrea:before {\n  background-position: 0px -1716px;\n}\ni.flag.es:before,\ni.flag.spain:before {\n  background-position: 0px -1742px;\n}\ni.flag.et:before,\ni.flag.ethiopia:before {\n  background-position: 0px -1768px;\n}\ni.flag.eu:before,\ni.flag.european.union:before {\n  background-position: 0px -1794px;\n}\ni.flag.fi:before,\ni.flag.finland:before {\n  background-position: 0px -1846px;\n}\ni.flag.fj:before,\ni.flag.fiji:before {\n  background-position: 0px -1872px;\n}\ni.flag.fk:before,\ni.flag.falkland.islands:before {\n  background-position: 0px -1898px;\n}\ni.flag.fm:before,\ni.flag.micronesia:before {\n  background-position: 0px -1924px;\n}\ni.flag.fo:before,\ni.flag.faroe.islands:before {\n  background-position: 0px -1950px;\n}\ni.flag.fr:before,\ni.flag.france:before {\n  background-position: 0px -1976px;\n}\ni.flag.ga:before,\ni.flag.gabon:before {\n  background-position: -36px 0px;\n}\ni.flag.gb:before,\ni.flag.united.kingdom:before {\n  background-position: -36px -26px;\n}\ni.flag.gd:before,\ni.flag.grenada:before {\n  background-position: -36px -52px;\n}\ni.flag.ge:before,\ni.flag.georgia:before {\n  background-position: -36px -78px;\n}\ni.flag.gf:before,\ni.flag.french.guiana:before {\n  background-position: -36px -104px;\n}\ni.flag.gh:before,\ni.flag.ghana:before {\n  background-position: -36px -130px;\n}\ni.flag.gi:before,\ni.flag.gibraltar:before {\n  background-position: -36px -156px;\n}\ni.flag.gl:before,\ni.flag.greenland:before {\n  background-position: -36px -182px;\n}\ni.flag.gm:before,\ni.flag.gambia:before {\n  background-position: -36px -208px;\n}\ni.flag.gn:before,\ni.flag.guinea:before {\n  background-position: -36px -234px;\n}\ni.flag.gp:before,\ni.flag.guadeloupe:before {\n  background-position: -36px -260px;\n}\ni.flag.gq:before,\ni.flag.equatorial.guinea:before {\n  background-position: -36px -286px;\n}\ni.flag.gr:before,\ni.flag.greece:before {\n  background-position: -36px -312px;\n}\ni.flag.gs:before,\ni.flag.sandwich.islands:before {\n  background-position: -36px -338px;\n}\ni.flag.gt:before,\ni.flag.guatemala:before {\n  background-position: -36px -364px;\n}\ni.flag.gu:before,\ni.flag.guam:before {\n  background-position: -36px -390px;\n}\ni.flag.gw:before,\ni.flag.guinea-bissau:before {\n  background-position: -36px -416px;\n}\ni.flag.gy:before,\ni.flag.guyana:before {\n  background-position: -36px -442px;\n}\ni.flag.hk:before,\ni.flag.hong.kong:before {\n  background-position: -36px -468px;\n}\ni.flag.hm:before,\ni.flag.heard.island:before {\n  background-position: -36px -494px;\n}\ni.flag.hn:before,\ni.flag.honduras:before {\n  background-position: -36px -520px;\n}\ni.flag.hr:before,\ni.flag.croatia:before {\n  background-position: -36px -546px;\n}\ni.flag.ht:before,\ni.flag.haiti:before {\n  background-position: -36px -572px;\n}\ni.flag.hu:before,\ni.flag.hungary:before {\n  background-position: -36px -598px;\n}\ni.flag.id:before,\ni.flag.indonesia:before {\n  background-position: -36px -624px;\n}\ni.flag.ie:before,\ni.flag.ireland:before {\n  background-position: -36px -650px;\n}\ni.flag.il:before,\ni.flag.israel:before {\n  background-position: -36px -676px;\n}\ni.flag.in:before,\ni.flag.india:before {\n  background-position: -36px -702px;\n}\ni.flag.io:before,\ni.flag.indian.ocean.territory:before {\n  background-position: -36px -728px;\n}\ni.flag.iq:before,\ni.flag.iraq:before {\n  background-position: -36px -754px;\n}\ni.flag.ir:before,\ni.flag.iran:before {\n  background-position: -36px -780px;\n}\ni.flag.is:before,\ni.flag.iceland:before {\n  background-position: -36px -806px;\n}\ni.flag.it:before,\ni.flag.italy:before {\n  background-position: -36px -832px;\n}\ni.flag.jm:before,\ni.flag.jamaica:before {\n  background-position: -36px -858px;\n}\ni.flag.jo:before,\ni.flag.jordan:before {\n  background-position: -36px -884px;\n}\ni.flag.jp:before,\ni.flag.japan:before {\n  background-position: -36px -910px;\n}\ni.flag.ke:before,\ni.flag.kenya:before {\n  background-position: -36px -936px;\n}\ni.flag.kg:before,\ni.flag.kyrgyzstan:before {\n  background-position: -36px -962px;\n}\ni.flag.kh:before,\ni.flag.cambodia:before {\n  background-position: -36px -988px;\n}\ni.flag.ki:before,\ni.flag.kiribati:before {\n  background-position: -36px -1014px;\n}\ni.flag.km:before,\ni.flag.comoros:before {\n  background-position: -36px -1040px;\n}\ni.flag.kn:before,\ni.flag.saint.kitts.and.nevis:before {\n  background-position: -36px -1066px;\n}\ni.flag.kp:before,\ni.flag.north.korea:before {\n  background-position: -36px -1092px;\n}\ni.flag.kr:before,\ni.flag.south.korea:before {\n  background-position: -36px -1118px;\n}\ni.flag.kw:before,\ni.flag.kuwait:before {\n  background-position: -36px -1144px;\n}\ni.flag.ky:before,\ni.flag.cayman.islands:before {\n  background-position: -36px -1170px;\n}\ni.flag.kz:before,\ni.flag.kazakhstan:before {\n  background-position: -36px -1196px;\n}\ni.flag.la:before,\ni.flag.laos:before {\n  background-position: -36px -1222px;\n}\ni.flag.lb:before,\ni.flag.lebanon:before {\n  background-position: -36px -1248px;\n}\ni.flag.lc:before,\ni.flag.saint.lucia:before {\n  background-position: -36px -1274px;\n}\ni.flag.li:before,\ni.flag.liechtenstein:before {\n  background-position: -36px -1300px;\n}\ni.flag.lk:before,\ni.flag.sri.lanka:before {\n  background-position: -36px -1326px;\n}\ni.flag.lr:before,\ni.flag.liberia:before {\n  background-position: -36px -1352px;\n}\ni.flag.ls:before,\ni.flag.lesotho:before {\n  background-position: -36px -1378px;\n}\ni.flag.lt:before,\ni.flag.lithuania:before {\n  background-position: -36px -1404px;\n}\ni.flag.lu:before,\ni.flag.luxembourg:before {\n  background-position: -36px -1430px;\n}\ni.flag.lv:before,\ni.flag.latvia:before {\n  background-position: -36px -1456px;\n}\ni.flag.ly:before,\ni.flag.libya:before {\n  background-position: -36px -1482px;\n}\ni.flag.ma:before,\ni.flag.morocco:before {\n  background-position: -36px -1508px;\n}\ni.flag.mc:before,\ni.flag.monaco:before {\n  background-position: -36px -1534px;\n}\ni.flag.md:before,\ni.flag.moldova:before {\n  background-position: -36px -1560px;\n}\ni.flag.me:before,\ni.flag.montenegro:before {\n  background-position: -36px -1586px;\n}\ni.flag.mg:before,\ni.flag.madagascar:before {\n  background-position: -36px -1613px;\n}\ni.flag.mh:before,\ni.flag.marshall.islands:before {\n  background-position: -36px -1639px;\n}\ni.flag.mk:before,\ni.flag.macedonia:before {\n  background-position: -36px -1665px;\n}\ni.flag.ml:before,\ni.flag.mali:before {\n  background-position: -36px -1691px;\n}\ni.flag.mm:before,\ni.flag.myanmar:before,\ni.flag.burma:before {\n  background-position: -36px -1717px;\n}\ni.flag.mn:before,\ni.flag.mongolia:before {\n  background-position: -36px -1743px;\n}\ni.flag.mo:before,\ni.flag.macau:before {\n  background-position: -36px -1769px;\n}\ni.flag.mp:before,\ni.flag.northern.mariana.islands:before {\n  background-position: -36px -1795px;\n}\ni.flag.mq:before,\ni.flag.martinique:before {\n  background-position: -36px -1821px;\n}\ni.flag.mr:before,\ni.flag.mauritania:before {\n  background-position: -36px -1847px;\n}\ni.flag.ms:before,\ni.flag.montserrat:before {\n  background-position: -36px -1873px;\n}\ni.flag.mt:before,\ni.flag.malta:before {\n  background-position: -36px -1899px;\n}\ni.flag.mu:before,\ni.flag.mauritius:before {\n  background-position: -36px -1925px;\n}\ni.flag.mv:before,\ni.flag.maldives:before {\n  background-position: -36px -1951px;\n}\ni.flag.mw:before,\ni.flag.malawi:before {\n  background-position: -36px -1977px;\n}\ni.flag.mx:before,\ni.flag.mexico:before {\n  background-position: -72px 0px;\n}\ni.flag.my:before,\ni.flag.malaysia:before {\n  background-position: -72px -26px;\n}\ni.flag.mz:before,\ni.flag.mozambique:before {\n  background-position: -72px -52px;\n}\ni.flag.na:before,\ni.flag.namibia:before {\n  background-position: -72px -78px;\n}\ni.flag.nc:before,\ni.flag.new.caledonia:before {\n  background-position: -72px -104px;\n}\ni.flag.ne:before,\ni.flag.niger:before {\n  background-position: -72px -130px;\n}\ni.flag.nf:before,\ni.flag.norfolk.island:before {\n  background-position: -72px -156px;\n}\ni.flag.ng:before,\ni.flag.nigeria:before {\n  background-position: -72px -182px;\n}\ni.flag.ni:before,\ni.flag.nicaragua:before {\n  background-position: -72px -208px;\n}\ni.flag.nl:before,\ni.flag.netherlands:before {\n  background-position: -72px -234px;\n}\ni.flag.no:before,\ni.flag.norway:before {\n  background-position: -72px -260px;\n}\ni.flag.np:before,\ni.flag.nepal:before {\n  background-position: -72px -286px;\n}\ni.flag.nr:before,\ni.flag.nauru:before {\n  background-position: -72px -312px;\n}\ni.flag.nu:before,\ni.flag.niue:before {\n  background-position: -72px -338px;\n}\ni.flag.nz:before,\ni.flag.new.zealand:before {\n  background-position: -72px -364px;\n}\ni.flag.om:before,\ni.flag.oman:before {\n  background-position: -72px -390px;\n}\ni.flag.pa:before,\ni.flag.panama:before {\n  background-position: -72px -416px;\n}\ni.flag.pe:before,\ni.flag.peru:before {\n  background-position: -72px -442px;\n}\ni.flag.pf:before,\ni.flag.french.polynesia:before {\n  background-position: -72px -468px;\n}\ni.flag.pg:before,\ni.flag.new.guinea:before {\n  background-position: -72px -494px;\n}\ni.flag.ph:before,\ni.flag.philippines:before {\n  background-position: -72px -520px;\n}\ni.flag.pk:before,\ni.flag.pakistan:before {\n  background-position: -72px -546px;\n}\ni.flag.pl:before,\ni.flag.poland:before {\n  background-position: -72px -572px;\n}\ni.flag.pm:before,\ni.flag.saint.pierre:before {\n  background-position: -72px -598px;\n}\ni.flag.pn:before,\ni.flag.pitcairn.islands:before {\n  background-position: -72px -624px;\n}\ni.flag.pr:before,\ni.flag.puerto.rico:before {\n  background-position: -72px -650px;\n}\ni.flag.ps:before,\ni.flag.palestine:before {\n  background-position: -72px -676px;\n}\ni.flag.pt:before,\ni.flag.portugal:before {\n  background-position: -72px -702px;\n}\ni.flag.pw:before,\ni.flag.palau:before {\n  background-position: -72px -728px;\n}\ni.flag.py:before,\ni.flag.paraguay:before {\n  background-position: -72px -754px;\n}\ni.flag.qa:before,\ni.flag.qatar:before {\n  background-position: -72px -780px;\n}\ni.flag.re:before,\ni.flag.reunion:before {\n  background-position: -72px -806px;\n}\ni.flag.ro:before,\ni.flag.romania:before {\n  background-position: -72px -832px;\n}\ni.flag.rs:before,\ni.flag.serbia:before {\n  background-position: -72px -858px;\n}\ni.flag.ru:before,\ni.flag.russia:before {\n  background-position: -72px -884px;\n}\ni.flag.rw:before,\ni.flag.rwanda:before {\n  background-position: -72px -910px;\n}\ni.flag.sa:before,\ni.flag.saudi.arabia:before {\n  background-position: -72px -936px;\n}\ni.flag.sb:before,\ni.flag.solomon.islands:before {\n  background-position: -72px -962px;\n}\ni.flag.sc:before,\ni.flag.seychelles:before {\n  background-position: -72px -988px;\n}\ni.flag.gb.sct:before,\ni.flag.scotland:before {\n  background-position: -72px -1014px;\n}\ni.flag.sd:before,\ni.flag.sudan:before {\n  background-position: -72px -1040px;\n}\ni.flag.se:before,\ni.flag.sweden:before {\n  background-position: -72px -1066px;\n}\ni.flag.sg:before,\ni.flag.singapore:before {\n  background-position: -72px -1092px;\n}\ni.flag.sh:before,\ni.flag.saint.helena:before {\n  background-position: -72px -1118px;\n}\ni.flag.si:before,\ni.flag.slovenia:before {\n  background-position: -72px -1144px;\n}\ni.flag.sj:before,\ni.flag.svalbard:before,\ni.flag.jan.mayen:before {\n  background-position: -72px -1170px;\n}\ni.flag.sk:before,\ni.flag.slovakia:before {\n  background-position: -72px -1196px;\n}\ni.flag.sl:before,\ni.flag.sierra.leone:before {\n  background-position: -72px -1222px;\n}\ni.flag.sm:before,\ni.flag.san.marino:before {\n  background-position: -72px -1248px;\n}\ni.flag.sn:before,\ni.flag.senegal:before {\n  background-position: -72px -1274px;\n}\ni.flag.so:before,\ni.flag.somalia:before {\n  background-position: -72px -1300px;\n}\ni.flag.sr:before,\ni.flag.suriname:before {\n  background-position: -72px -1326px;\n}\ni.flag.st:before,\ni.flag.sao.tome:before {\n  background-position: -72px -1352px;\n}\ni.flag.sv:before,\ni.flag.el.salvador:before {\n  background-position: -72px -1378px;\n}\ni.flag.sy:before,\ni.flag.syria:before {\n  background-position: -72px -1404px;\n}\ni.flag.sz:before,\ni.flag.swaziland:before {\n  background-position: -72px -1430px;\n}\ni.flag.tc:before,\ni.flag.caicos.islands:before {\n  background-position: -72px -1456px;\n}\ni.flag.td:before,\ni.flag.chad:before {\n  background-position: -72px -1482px;\n}\ni.flag.tf:before,\ni.flag.french.territories:before {\n  background-position: -72px -1508px;\n}\ni.flag.tg:before,\ni.flag.togo:before {\n  background-position: -72px -1534px;\n}\ni.flag.th:before,\ni.flag.thailand:before {\n  background-position: -72px -1560px;\n}\ni.flag.tj:before,\ni.flag.tajikistan:before {\n  background-position: -72px -1586px;\n}\ni.flag.tk:before,\ni.flag.tokelau:before {\n  background-position: -72px -1612px;\n}\ni.flag.tl:before,\ni.flag.timorleste:before {\n  background-position: -72px -1638px;\n}\ni.flag.tm:before,\ni.flag.turkmenistan:before {\n  background-position: -72px -1664px;\n}\ni.flag.tn:before,\ni.flag.tunisia:before {\n  background-position: -72px -1690px;\n}\ni.flag.to:before,\ni.flag.tonga:before {\n  background-position: -72px -1716px;\n}\ni.flag.tr:before,\ni.flag.turkey:before {\n  background-position: -72px -1742px;\n}\ni.flag.tt:before,\ni.flag.trinidad:before {\n  background-position: -72px -1768px;\n}\ni.flag.tv:before,\ni.flag.tuvalu:before {\n  background-position: -72px -1794px;\n}\ni.flag.tw:before,\ni.flag.taiwan:before {\n  background-position: -72px -1820px;\n}\ni.flag.tz:before,\ni.flag.tanzania:before {\n  background-position: -72px -1846px;\n}\ni.flag.ua:before,\ni.flag.ukraine:before {\n  background-position: -72px -1872px;\n}\ni.flag.ug:before,\ni.flag.uganda:before {\n  background-position: -72px -1898px;\n}\ni.flag.um:before,\ni.flag.us.minor.islands:before {\n  background-position: -72px -1924px;\n}\ni.flag.us:before,\ni.flag.america:before,\ni.flag.united.states:before {\n  background-position: -72px -1950px;\n}\ni.flag.uy:before,\ni.flag.uruguay:before {\n  background-position: -72px -1976px;\n}\ni.flag.uz:before,\ni.flag.uzbekistan:before {\n  background-position: -108px 0px;\n}\ni.flag.va:before,\ni.flag.vatican.city:before {\n  background-position: -108px -26px;\n}\ni.flag.vc:before,\ni.flag.saint.vincent:before {\n  background-position: -108px -52px;\n}\ni.flag.ve:before,\ni.flag.venezuela:before {\n  background-position: -108px -78px;\n}\ni.flag.vg:before,\ni.flag.british.virgin.islands:before {\n  background-position: -108px -104px;\n}\ni.flag.vi:before,\ni.flag.us.virgin.islands:before {\n  background-position: -108px -130px;\n}\ni.flag.vn:before,\ni.flag.vietnam:before {\n  background-position: -108px -156px;\n}\ni.flag.vu:before,\ni.flag.vanuatu:before {\n  background-position: -108px -182px;\n}\ni.flag.gb.wls:before,\ni.flag.wales:before {\n  background-position: -108px -208px;\n}\ni.flag.wf:before,\ni.flag.wallis.and.futuna:before {\n  background-position: -108px -234px;\n}\ni.flag.ws:before,\ni.flag.samoa:before {\n  background-position: -108px -260px;\n}\ni.flag.ye:before,\ni.flag.yemen:before {\n  background-position: -108px -286px;\n}\ni.flag.yt:before,\ni.flag.mayotte:before {\n  background-position: -108px -312px;\n}\ni.flag.za:before,\ni.flag.south.africa:before {\n  background-position: -108px -338px;\n}\ni.flag.zm:before,\ni.flag.zambia:before {\n  background-position: -108px -364px;\n}\ni.flag.zw:before,\ni.flag.zimbabwe:before {\n  background-position: -108px -390px;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/form.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Form\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Elements\n*******************************/\n\n\n/*--------------------\n        Form\n---------------------*/\n\n.ui.form {\n  position: relative;\n  max-width: 100%;\n}\n\n/*--------------------\n        Content\n---------------------*/\n\n.ui.form > p {\n  margin: 1em 0em;\n}\n\n/*--------------------\n        Field\n---------------------*/\n\n.ui.form .field {\n  clear: both;\n  margin: 0em 0em 1em;\n}\n.ui.form .field:last-child,\n.ui.form .fields:last-child .field {\n  margin-bottom: 0em;\n}\n.ui.form .fields .field {\n  clear: both;\n  margin: 0em;\n}\n\n/*--------------------\n        Labels\n---------------------*/\n\n.ui.form .field > label {\n  display: block;\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n/*--------------------\n    Standard Inputs\n---------------------*/\n\n.ui.form textarea,\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  width: 100%;\n  vertical-align: top;\n}\n\n/* Set max height on unusual input */\n.ui.form ::-webkit-datetime-edit,\n.ui.form ::-webkit-inner-spin-button {\n  height: 1.2142em;\n}\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  line-height: 1.2142em;\n  padding: 0.67861429em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/* Text Area */\n.ui.form textarea {\n  margin: 0em;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: 0.78571429em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  outline: none;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n  font-size: 1em;\n  line-height: 1.2857;\n  resize: vertical;\n}\n.ui.form textarea:not([rows]) {\n  height: 12em;\n  min-height: 8em;\n  max-height: 24em;\n}\n.ui.form textarea,\n.ui.form input[type=\"checkbox\"] {\n  vertical-align: top;\n}\n\n/*--------------------------\n  Input w/ attached Button\n---------------------------*/\n\n.ui.form input.attached {\n  width: auto;\n}\n\n/*--------------------\n     Basic Select\n---------------------*/\n\n.ui.form select {\n  display: block;\n  height: auto;\n  width: 100%;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  padding: 0.62em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/*--------------------\n       Dropdown\n---------------------*/\n\n\n/* Block */\n.ui.form .field > .selection.dropdown {\n  width: 100%;\n}\n.ui.form .field > .selection.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/* Inline */\n.ui.form .inline.fields .field > .selection.dropdown,\n.ui.form .inline.field > .selection.dropdown {\n  width: auto;\n}\n.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\n  float: none;\n}\n\n/*--------------------\n       UI Input\n---------------------*/\n\n\n/* Block */\n.ui.form .field .ui.input,\n.ui.form .fields .field .ui.input,\n.ui.form .wide.field .ui.input {\n  width: 100%;\n}\n\n/* Inline  */\n.ui.form .inline.fields .field:not(.wide) .ui.input,\n.ui.form .inline.field:not(.wide) .ui.input {\n  width: auto;\n  vertical-align: middle;\n}\n\n/* Auto Input */\n.ui.form .fields .field .ui.input input,\n.ui.form .field .ui.input input {\n  width: auto;\n}\n\n/* Full Width Input */\n.ui.form .ten.fields .ui.input input,\n.ui.form .nine.fields .ui.input input,\n.ui.form .eight.fields .ui.input input,\n.ui.form .seven.fields .ui.input input,\n.ui.form .six.fields .ui.input input,\n.ui.form .five.fields .ui.input input,\n.ui.form .four.fields .ui.input input,\n.ui.form .three.fields .ui.input input,\n.ui.form .two.fields .ui.input input,\n.ui.form .wide.field .ui.input input {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  width: 0px;\n}\n\n/*--------------------\n   Types of Messages\n---------------------*/\n\n.ui.form .success.message,\n.ui.form .warning.message,\n.ui.form .error.message {\n  display: none;\n}\n\n/* Assumptions */\n.ui.form .message:first-child {\n  margin-top: 0px;\n}\n\n/*--------------------\n   Validation Prompt\n---------------------*/\n\n.ui.form .field .prompt.label {\n  white-space: normal;\n  background: #FFFFFF !important;\n  border: 1px solid #E0B4B4 !important;\n  color: #9F3A38 !important;\n}\n.ui.form .inline.fields .field .prompt,\n.ui.form .inline.field .prompt {\n  vertical-align: top;\n  margin: -0.25em 0em -0.5em 0.5em;\n}\n.ui.form .inline.fields .field .prompt:before,\n.ui.form .inline.field .prompt:before {\n  border-width: 0px 0px 1px 1px;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n      Autofilled\n---------------------*/\n\n.ui.form .field.field input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #E5DFA1 !important;\n}\n\n/* Focus */\n.ui.form .field.field input:-webkit-autofill:focus {\n  box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #D5C315 !important;\n}\n\n/* Error */\n.ui.form .error.error input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n  border-color: #E0B4B4 !important;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n\n/* browsers require these rules separate */\n.ui.form ::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form :-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form ::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form :focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.form :focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.form :focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/* Error Placeholder */\n.ui.form .error ::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n.ui.form .error :-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n.ui.form .error ::-moz-placeholder {\n  color: #e7bdbc;\n}\n.ui.form .error :focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n.ui.form .error :focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n.ui.form .error :focus::-moz-placeholder {\n  color: #da9796;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.form input:not([type]):focus,\n.ui.form input[type=\"date\"]:focus,\n.ui.form input[type=\"datetime-local\"]:focus,\n.ui.form input[type=\"email\"]:focus,\n.ui.form input[type=\"number\"]:focus,\n.ui.form input[type=\"password\"]:focus,\n.ui.form input[type=\"search\"]:focus,\n.ui.form input[type=\"tel\"]:focus,\n.ui.form input[type=\"time\"]:focus,\n.ui.form input[type=\"text\"]:focus,\n.ui.form input[type=\"file\"]:focus,\n.ui.form input[type=\"url\"]:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n}\n.ui.form textarea:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  -webkit-appearance: none;\n}\n\n/*--------------------\n        Success\n---------------------*/\n\n\n/* On Form */\n.ui.form.success .success.message:not(:empty) {\n  display: block;\n}\n.ui.form.success .compact.success.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.success .icon.success.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Warning\n---------------------*/\n\n\n/* On Form */\n.ui.form.warning .warning.message:not(:empty) {\n  display: block;\n}\n.ui.form.warning .compact.warning.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.warning .icon.warning.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n\n/* On Form */\n.ui.form.error .error.message:not(:empty) {\n  display: block;\n}\n.ui.form.error .compact.error.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.error .icon.error.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/* On Field(s) */\n.ui.form .fields.error .field label,\n.ui.form .field.error label,\n.ui.form .fields.error .field .input,\n.ui.form .field.error .input {\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .corner.label,\n.ui.form .field.error .corner.label {\n  border-color: #9F3A38;\n  color: #FFFFFF;\n}\n.ui.form .fields.error .field textarea,\n.ui.form .fields.error .field select,\n.ui.form .fields.error .field input:not([type]),\n.ui.form .fields.error .field input[type=\"date\"],\n.ui.form .fields.error .field input[type=\"datetime-local\"],\n.ui.form .fields.error .field input[type=\"email\"],\n.ui.form .fields.error .field input[type=\"number\"],\n.ui.form .fields.error .field input[type=\"password\"],\n.ui.form .fields.error .field input[type=\"search\"],\n.ui.form .fields.error .field input[type=\"tel\"],\n.ui.form .fields.error .field input[type=\"time\"],\n.ui.form .fields.error .field input[type=\"text\"],\n.ui.form .fields.error .field input[type=\"file\"],\n.ui.form .fields.error .field input[type=\"url\"],\n.ui.form .field.error textarea,\n.ui.form .field.error select,\n.ui.form .field.error input:not([type]),\n.ui.form .field.error input[type=\"date\"],\n.ui.form .field.error input[type=\"datetime-local\"],\n.ui.form .field.error input[type=\"email\"],\n.ui.form .field.error input[type=\"number\"],\n.ui.form .field.error input[type=\"password\"],\n.ui.form .field.error input[type=\"search\"],\n.ui.form .field.error input[type=\"tel\"],\n.ui.form .field.error input[type=\"time\"],\n.ui.form .field.error input[type=\"text\"],\n.ui.form .field.error input[type=\"file\"],\n.ui.form .field.error input[type=\"url\"] {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  border-radius: '';\n  box-shadow: none;\n}\n.ui.form .field.error textarea:focus,\n.ui.form .field.error select:focus,\n.ui.form .field.error input:not([type]):focus,\n.ui.form .field.error input[type=\"date\"]:focus,\n.ui.form .field.error input[type=\"datetime-local\"]:focus,\n.ui.form .field.error input[type=\"email\"]:focus,\n.ui.form .field.error input[type=\"number\"]:focus,\n.ui.form .field.error input[type=\"password\"]:focus,\n.ui.form .field.error input[type=\"search\"]:focus,\n.ui.form .field.error input[type=\"tel\"]:focus,\n.ui.form .field.error input[type=\"time\"]:focus,\n.ui.form .field.error input[type=\"text\"]:focus,\n.ui.form .field.error input[type=\"file\"]:focus,\n.ui.form .field.error input[type=\"url\"]:focus {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-appearance: none;\n  box-shadow: none;\n}\n\n/* Preserve Native Select Stylings */\n.ui.form .field.error select {\n  -webkit-appearance: menulist-button;\n}\n\n/*------------------\n    Dropdown Error\n--------------------*/\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .fields.error .field .ui.dropdown .item,\n.ui.form .field.error .ui.dropdown,\n.ui.form .field.error .ui.dropdown .text,\n.ui.form .field.error .ui.dropdown .item {\n  background: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .field.error .ui.dropdown {\n  border-color: #E0B4B4 !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover,\n.ui.form .field.error .ui.dropdown:hover {\n  border-color: #E0B4B4 !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\n.ui.form .field.error .ui.dropdown:hover .menu {\n  border-color: #E0B4B4;\n}\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\n  background-color: #EACBCB;\n  color: #9F3A38;\n}\n\n/* Hover */\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\n.ui.form .field.error .ui.dropdown .menu .item:hover {\n  background-color: #FBE7E7;\n}\n\n/* Selected */\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\n.ui.form .field.error .ui.dropdown .menu .selected.item {\n  background-color: #FBE7E7;\n}\n\n/* Active */\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\n.ui.form .field.error .ui.dropdown .menu .active.item {\n  background-color: #FDCFCF !important;\n}\n\n/*--------------------\n    Checkbox Error\n---------------------*/\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n.ui.form .fields.error .field .checkbox label:after,\n.ui.form .field.error .checkbox label:after,\n.ui.form .fields.error .field .checkbox .box:after,\n.ui.form .field.error .checkbox .box:after {\n  color: #9F3A38;\n}\n\n/*--------------------\n       Disabled\n---------------------*/\n\n.ui.form .disabled.fields .field,\n.ui.form .disabled.field,\n.ui.form .field :disabled {\n  pointer-events: none;\n  opacity: 0.45;\n}\n.ui.form .field.disabled > label,\n.ui.form .fields.disabled > label {\n  opacity: 0.45;\n}\n.ui.form .field.disabled :disabled {\n  opacity: 1;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.form {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n}\n.ui.loading.form:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\n.ui.loading.form:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: form-spin 0.6s linear;\n          animation: form-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n@-webkit-keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n         Element Types\n*******************************/\n\n\n/*--------------------\n     Required Field\n---------------------*/\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after,\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  margin: -0.2em 0em 0em 0.2em;\n  content: '*';\n  color: #DB2828;\n}\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after {\n  display: inline-block;\n  vertical-align: top;\n}\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  position: absolute;\n  top: 0%;\n  left: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n    Inverted Colors\n---------------------*/\n\n.ui.inverted.form label,\n.ui.form .inverted.segment label,\n.ui.form .inverted.segment .ui.checkbox label,\n.ui.form .inverted.segment .ui.checkbox .box,\n.ui.inverted.form .ui.checkbox label,\n.ui.inverted.form .ui.checkbox .box,\n.ui.inverted.form .inline.fields > label,\n.ui.inverted.form .inline.fields .field > label,\n.ui.inverted.form .inline.fields .field > p,\n.ui.inverted.form .inline.field > label,\n.ui.inverted.form .inline.field > p {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Inverted Field */\n.ui.inverted.form input:not([type]),\n.ui.inverted.form input[type=\"date\"],\n.ui.inverted.form input[type=\"datetime-local\"],\n.ui.inverted.form input[type=\"email\"],\n.ui.inverted.form input[type=\"number\"],\n.ui.inverted.form input[type=\"password\"],\n.ui.inverted.form input[type=\"search\"],\n.ui.inverted.form input[type=\"tel\"],\n.ui.inverted.form input[type=\"time\"],\n.ui.inverted.form input[type=\"text\"],\n.ui.inverted.form input[type=\"file\"],\n.ui.inverted.form input[type=\"url\"] {\n  background: #FFFFFF;\n  border-color: rgba(255, 255, 255, 0.1);\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n}\n\n/*--------------------\n     Field Groups\n---------------------*/\n\n\n/* Grouped Vertically */\n.ui.form .grouped.fields {\n  display: block;\n  margin: 0em 0em 1em;\n}\n.ui.form .grouped.fields:last-child {\n  margin-bottom: 0em;\n}\n.ui.form .grouped.fields > label {\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n.ui.form .grouped.fields .field,\n.ui.form .grouped.inline.fields .field {\n  display: block;\n  margin: 0.5em 0em;\n  padding: 0em;\n}\n\n/*--------------------\n        Fields\n---------------------*/\n\n\n/* Split fields */\n.ui.form .fields {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  margin: 0em -0.5em 1em;\n}\n.ui.form .fields > .field {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.form .fields > .field:first-child {\n  border-left: none;\n  box-shadow: none;\n}\n\n/* Other Combinations */\n.ui.form .two.fields > .fields,\n.ui.form .two.fields > .field {\n  width: 50%;\n}\n.ui.form .three.fields > .fields,\n.ui.form .three.fields > .field {\n  width: 33.33333333%;\n}\n.ui.form .four.fields > .fields,\n.ui.form .four.fields > .field {\n  width: 25%;\n}\n.ui.form .five.fields > .fields,\n.ui.form .five.fields > .field {\n  width: 20%;\n}\n.ui.form .six.fields > .fields,\n.ui.form .six.fields > .field {\n  width: 16.66666667%;\n}\n.ui.form .seven.fields > .fields,\n.ui.form .seven.fields > .field {\n  width: 14.28571429%;\n}\n.ui.form .eight.fields > .fields,\n.ui.form .eight.fields > .field {\n  width: 12.5%;\n}\n.ui.form .nine.fields > .fields,\n.ui.form .nine.fields > .field {\n  width: 11.11111111%;\n}\n.ui.form .ten.fields > .fields,\n.ui.form .ten.fields > .field {\n  width: 10%;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width: 767px) {\n  .ui.form .fields {\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n  }\n  .ui[class*=\"equal width\"].form .fields > .field,\n  .ui.form [class*=\"equal width\"].fields > .field,\n  .ui.form .two.fields > .fields,\n  .ui.form .two.fields > .field,\n  .ui.form .three.fields > .fields,\n  .ui.form .three.fields > .field,\n  .ui.form .four.fields > .fields,\n  .ui.form .four.fields > .field,\n  .ui.form .five.fields > .fields,\n  .ui.form .five.fields > .field,\n  .ui.form .six.fields > .fields,\n  .ui.form .six.fields > .field,\n  .ui.form .seven.fields > .fields,\n  .ui.form .seven.fields > .field,\n  .ui.form .eight.fields > .fields,\n  .ui.form .eight.fields > .field,\n  .ui.form .nine.fields > .fields,\n  .ui.form .nine.fields > .field,\n  .ui.form .ten.fields > .fields,\n  .ui.form .ten.fields > .field {\n    width: 100% !important;\n    margin: 0em 0em 1em;\n  }\n}\n\n/* Sizing Combinations */\n.ui.form .fields .wide.field {\n  width: 6.25%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.form .one.wide.field {\n  width: 6.25% !important;\n}\n.ui.form .two.wide.field {\n  width: 12.5% !important;\n}\n.ui.form .three.wide.field {\n  width: 18.75% !important;\n}\n.ui.form .four.wide.field {\n  width: 25% !important;\n}\n.ui.form .five.wide.field {\n  width: 31.25% !important;\n}\n.ui.form .six.wide.field {\n  width: 37.5% !important;\n}\n.ui.form .seven.wide.field {\n  width: 43.75% !important;\n}\n.ui.form .eight.wide.field {\n  width: 50% !important;\n}\n.ui.form .nine.wide.field {\n  width: 56.25% !important;\n}\n.ui.form .ten.wide.field {\n  width: 62.5% !important;\n}\n.ui.form .eleven.wide.field {\n  width: 68.75% !important;\n}\n.ui.form .twelve.wide.field {\n  width: 75% !important;\n}\n.ui.form .thirteen.wide.field {\n  width: 81.25% !important;\n}\n.ui.form .fourteen.wide.field {\n  width: 87.5% !important;\n}\n.ui.form .fifteen.wide.field {\n  width: 93.75% !important;\n}\n.ui.form .sixteen.wide.field {\n  width: 100% !important;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width: 767px) {\n  .ui.form .two.fields > .fields,\n  .ui.form .two.fields > .field,\n  .ui.form .three.fields > .fields,\n  .ui.form .three.fields > .field,\n  .ui.form .four.fields > .fields,\n  .ui.form .four.fields > .field,\n  .ui.form .five.fields > .fields,\n  .ui.form .five.fields > .field,\n  .ui.form .fields > .two.wide.field,\n  .ui.form .fields > .three.wide.field,\n  .ui.form .fields > .four.wide.field,\n  .ui.form .fields > .five.wide.field,\n  .ui.form .fields > .six.wide.field,\n  .ui.form .fields > .seven.wide.field,\n  .ui.form .fields > .eight.wide.field,\n  .ui.form .fields > .nine.wide.field,\n  .ui.form .fields > .ten.wide.field,\n  .ui.form .fields > .eleven.wide.field,\n  .ui.form .fields > .twelve.wide.field,\n  .ui.form .fields > .thirteen.wide.field,\n  .ui.form .fields > .fourteen.wide.field,\n  .ui.form .fields > .fifteen.wide.field,\n  .ui.form .fields > .sixteen.wide.field {\n    width: 100% !important;\n  }\n  .ui.form .fields {\n    margin-bottom: 0em;\n  }\n}\n\n/*--------------------\n     Equal Width\n---------------------*/\n\n.ui[class*=\"equal width\"].form .fields > .field,\n.ui.form [class*=\"equal width\"].fields > .field {\n  width: 100%;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n}\n\n/*--------------------\n    Inline Fields\n---------------------*/\n\n.ui.form .inline.fields {\n  margin: 0em 0em 1em;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.form .inline.fields .field {\n  margin: 0em;\n  padding: 0em 1em 0em 0em;\n}\n\n/* Inline Label */\n.ui.form .inline.fields > label,\n.ui.form .inline.fields .field > label,\n.ui.form .inline.fields .field > p,\n.ui.form .inline.field > label,\n.ui.form .inline.field > p {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: baseline;\n  font-size: 0.92857143em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: none;\n}\n\n/* Grouped Inline Label */\n.ui.form .inline.fields > label {\n  margin: 0.035714em 1em 0em 0em;\n}\n\n/* Inline Input */\n.ui.form .inline.fields .field > input,\n.ui.form .inline.fields .field > select,\n.ui.form .inline.field > input,\n.ui.form .inline.field > select {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: middle;\n  font-size: 1em;\n}\n\n/* Label */\n.ui.form .inline.fields .field > :first-child,\n.ui.form .inline.field > :first-child {\n  margin: 0em 0.85714286em 0em 0em;\n}\n.ui.form .inline.fields .field > :only-child,\n.ui.form .inline.field > :only-child {\n  margin: 0em;\n}\n\n/* Wide */\n.ui.form .inline.fields .wide.field {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.form .inline.fields .wide.field > input,\n.ui.form .inline.fields .wide.field > select {\n  width: 100%;\n}\n\n/*--------------------\n        Sizes\n---------------------*/\n\n.ui.mini.form {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.form {\n  font-size: 0.85714286rem;\n}\n.ui.small.form {\n  font-size: 0.92857143rem;\n}\n.ui.form {\n  font-size: 1rem;\n}\n.ui.large.form {\n  font-size: 1.14285714rem;\n}\n.ui.big.form {\n  font-size: 1.28571429rem;\n}\n.ui.huge.form {\n  font-size: 1.42857143rem;\n}\n.ui.massive.form {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/form.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            if(instance !== undefined) {\n              instance.invoke('destroy');\n            }\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          empty: function($field) {\n            if(!$field || $field.length === 0) {\n              return true;\n            }\n            else if($field.is('input[type=\"checkbox\"]')) {\n              return !$field.is(':checked');\n            }\n            else {\n              return module.is.blank($field);\n            }\n          },\n          blank: function($field) {\n            return $.trim($field.val()) === '';\n          },\n          valid: function() {\n            var\n              allValid = true\n            ;\n            module.verbose('Checking if form is valid');\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field       = $(this),\n                key          = event.which,\n                isInput      = $field.is(selector.input),\n                isCheckbox   = $field.is(selector.checkbox),\n                isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\n                keyCode      = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if(settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) ) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( validationRules );\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\n              return false;\n            }\n            return (rule.value !== undefined)\n              ? rule.value\n              : rule.type.match(settings.regExp.bracket)[1] + ''\n            ;\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.length == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields) {\n                  ruleKeys = Object.keys(parameters.fields);\n                  if( typeof parameters.fields[ruleKeys[0]] == 'string' || $.isArray(parameters.fields[ruleKeys[0]]) ) {\n                    $.each(parameters.fields, function(name, rules) {\n                      if(typeof rules == 'string') {\n                        rules = [rules];\n                      }\n                      parameters.fields[name] = {\n                        rules: []\n                      };\n                      $.each(rules, function(index, rule) {\n                        parameters.fields[name].rules.push({ type: rule });\n                      });\n                    });\n                  }\n                }\n\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(isChecked) {\n                      values[name] = value;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        add: {\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.is.valid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName) {\n            var\n              identifier    = field.identifier || fieldName,\n              $field        = module.get.field(identifier),\n              $dependsField = (field.depends)\n                ? module.get.field(field.depends)\n                : false,\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && module.is.blank($field)){\n              module.debug('Field is optional and blank. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.depends && module.is.empty($dependsField)) {\n              module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              module.remove.prompt(identifier, fieldErrors);\n              settings.onValid.call($field);\n            }\n            else {\n              formErrors = formErrors.concat(fieldErrors);\n              module.add.prompt(identifier, fieldErrors);\n              settings.onInvalid.call($field, fieldErrors);\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d*(\\.)\\d+/,\n    email   : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      return $.fn.form.settings.regExp.email.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      if(regExp instanceof RegExp) {\n        return value.match(regExp);\n      }\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/grid.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Grid\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n.ui.grid {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  padding: 0em;\n}\n\n/*----------------------\n      Remove Gutters\n-----------------------*/\n\n.ui.grid {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n.ui.relaxed.grid {\n  margin-left: -1.5rem;\n  margin-right: -1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid {\n  margin-left: -2.5rem;\n  margin-right: -2.5rem;\n}\n\n/* Preserve Rows Spacing on Consecutive Grids */\n.ui.grid + .grid {\n  margin-top: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n\n/* Standard 16 column */\n.ui.grid > .column:not(.row),\n.ui.grid > .row > .column {\n  position: relative;\n  display: inline-block;\n  width: 6.25%;\n  padding-left: 1rem;\n  padding-right: 1rem;\n  vertical-align: top;\n}\n.ui.grid > * {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n/*-------------------\n        Rows\n--------------------*/\n\n.ui.grid > .row {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-pack: inherit;\n      -ms-flex-pack: inherit;\n          justify-content: inherit;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  width: 100% !important;\n  padding: 0rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n\n/* Vertical padding when no rows */\n.ui.grid > .column:not(.row) {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n.ui.grid > .row > .column {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/*-------------------\n      Content\n--------------------*/\n\n.ui.grid > .row > img,\n.ui.grid > .row > .column > img {\n  max-width: 100%;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n\n/* Collapse Margin on Consecutive Grid */\n.ui.grid > .ui.grid:first-child {\n  margin-top: 0em;\n}\n.ui.grid > .ui.grid:last-child {\n  margin-bottom: 0em;\n}\n\n/* Segment inside Aligned Grid */\n.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),\n.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {\n  width: 100%;\n}\n\n/* Align Dividers with Gutter */\n.ui.grid .row + .ui.divider {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  margin: 1rem 1rem;\n}\n.ui.grid .column + .ui.vertical.divider {\n  height: calc(50% -  1rem );\n}\n\n/* Remove Border on Last Horizontal Segment */\n.ui.grid > .row > .column:last-child > .horizontal.segment,\n.ui.grid > .column:last-child > .horizontal.segment {\n  box-shadow: none;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-----------------------\n       Page Grid\n-------------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.page.grid {\n    width: auto;\n    padding-left: 0em;\n    padding-right: 0em;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n}\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 2em;\n    padding-right: 2em;\n  }\n}\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 3%;\n    padding-right: 3%;\n  }\n}\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 15%;\n    padding-right: 15%;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 23%;\n    padding-right: 23%;\n  }\n}\n\n/*-------------------\n     Column Count\n--------------------*/\n\n\n/* Assume full width with one column */\n.ui.grid > .column:only-child,\n.ui.grid > .row > .column:only-child {\n  width: 100%;\n}\n\n/* Grid Based */\n.ui[class*=\"one column\"].grid > .row > .column,\n.ui[class*=\"one column\"].grid > .column:not(.row) {\n  width: 100%;\n}\n.ui[class*=\"two column\"].grid > .row > .column,\n.ui[class*=\"two column\"].grid > .column:not(.row) {\n  width: 50%;\n}\n.ui[class*=\"three column\"].grid > .row > .column,\n.ui[class*=\"three column\"].grid > .column:not(.row) {\n  width: 33.33333333%;\n}\n.ui[class*=\"four column\"].grid > .row > .column,\n.ui[class*=\"four column\"].grid > .column:not(.row) {\n  width: 25%;\n}\n.ui[class*=\"five column\"].grid > .row > .column,\n.ui[class*=\"five column\"].grid > .column:not(.row) {\n  width: 20%;\n}\n.ui[class*=\"six column\"].grid > .row > .column,\n.ui[class*=\"six column\"].grid > .column:not(.row) {\n  width: 16.66666667%;\n}\n.ui[class*=\"seven column\"].grid > .row > .column,\n.ui[class*=\"seven column\"].grid > .column:not(.row) {\n  width: 14.28571429%;\n}\n.ui[class*=\"eight column\"].grid > .row > .column,\n.ui[class*=\"eight column\"].grid > .column:not(.row) {\n  width: 12.5%;\n}\n.ui[class*=\"nine column\"].grid > .row > .column,\n.ui[class*=\"nine column\"].grid > .column:not(.row) {\n  width: 11.11111111%;\n}\n.ui[class*=\"ten column\"].grid > .row > .column,\n.ui[class*=\"ten column\"].grid > .column:not(.row) {\n  width: 10%;\n}\n.ui[class*=\"eleven column\"].grid > .row > .column,\n.ui[class*=\"eleven column\"].grid > .column:not(.row) {\n  width: 9.09090909%;\n}\n.ui[class*=\"twelve column\"].grid > .row > .column,\n.ui[class*=\"twelve column\"].grid > .column:not(.row) {\n  width: 8.33333333%;\n}\n.ui[class*=\"thirteen column\"].grid > .row > .column,\n.ui[class*=\"thirteen column\"].grid > .column:not(.row) {\n  width: 7.69230769%;\n}\n.ui[class*=\"fourteen column\"].grid > .row > .column,\n.ui[class*=\"fourteen column\"].grid > .column:not(.row) {\n  width: 7.14285714%;\n}\n.ui[class*=\"fifteen column\"].grid > .row > .column,\n.ui[class*=\"fifteen column\"].grid > .column:not(.row) {\n  width: 6.66666667%;\n}\n.ui[class*=\"sixteen column\"].grid > .row > .column,\n.ui[class*=\"sixteen column\"].grid > .column:not(.row) {\n  width: 6.25%;\n}\n\n/* Row Based Overrides */\n.ui.grid > [class*=\"one column\"].row > .column {\n  width: 100% !important;\n}\n.ui.grid > [class*=\"two column\"].row > .column {\n  width: 50% !important;\n}\n.ui.grid > [class*=\"three column\"].row > .column {\n  width: 33.33333333% !important;\n}\n.ui.grid > [class*=\"four column\"].row > .column {\n  width: 25% !important;\n}\n.ui.grid > [class*=\"five column\"].row > .column {\n  width: 20% !important;\n}\n.ui.grid > [class*=\"six column\"].row > .column {\n  width: 16.66666667% !important;\n}\n.ui.grid > [class*=\"seven column\"].row > .column {\n  width: 14.28571429% !important;\n}\n.ui.grid > [class*=\"eight column\"].row > .column {\n  width: 12.5% !important;\n}\n.ui.grid > [class*=\"nine column\"].row > .column {\n  width: 11.11111111% !important;\n}\n.ui.grid > [class*=\"ten column\"].row > .column {\n  width: 10% !important;\n}\n.ui.grid > [class*=\"eleven column\"].row > .column {\n  width: 9.09090909% !important;\n}\n.ui.grid > [class*=\"twelve column\"].row > .column {\n  width: 8.33333333% !important;\n}\n.ui.grid > [class*=\"thirteen column\"].row > .column {\n  width: 7.69230769% !important;\n}\n.ui.grid > [class*=\"fourteen column\"].row > .column {\n  width: 7.14285714% !important;\n}\n.ui.grid > [class*=\"fifteen column\"].row > .column {\n  width: 6.66666667% !important;\n}\n.ui.grid > [class*=\"sixteen column\"].row > .column {\n  width: 6.25% !important;\n}\n\n/* Celled Page */\n.ui.celled.page.grid {\n  box-shadow: none;\n}\n\n/*-------------------\n    Column Width\n--------------------*/\n\n\n/* Sizing Combinations */\n.ui.grid > .row > [class*=\"one wide\"].column,\n.ui.grid > .column.row > [class*=\"one wide\"].column,\n.ui.grid > [class*=\"one wide\"].column,\n.ui.column.grid > [class*=\"one wide\"].column {\n  width: 6.25% !important;\n}\n.ui.grid > .row > [class*=\"two wide\"].column,\n.ui.grid > .column.row > [class*=\"two wide\"].column,\n.ui.grid > [class*=\"two wide\"].column,\n.ui.column.grid > [class*=\"two wide\"].column {\n  width: 12.5% !important;\n}\n.ui.grid > .row > [class*=\"three wide\"].column,\n.ui.grid > .column.row > [class*=\"three wide\"].column,\n.ui.grid > [class*=\"three wide\"].column,\n.ui.column.grid > [class*=\"three wide\"].column {\n  width: 18.75% !important;\n}\n.ui.grid > .row > [class*=\"four wide\"].column,\n.ui.grid > .column.row > [class*=\"four wide\"].column,\n.ui.grid > [class*=\"four wide\"].column,\n.ui.column.grid > [class*=\"four wide\"].column {\n  width: 25% !important;\n}\n.ui.grid > .row > [class*=\"five wide\"].column,\n.ui.grid > .column.row > [class*=\"five wide\"].column,\n.ui.grid > [class*=\"five wide\"].column,\n.ui.column.grid > [class*=\"five wide\"].column {\n  width: 31.25% !important;\n}\n.ui.grid > .row > [class*=\"six wide\"].column,\n.ui.grid > .column.row > [class*=\"six wide\"].column,\n.ui.grid > [class*=\"six wide\"].column,\n.ui.column.grid > [class*=\"six wide\"].column {\n  width: 37.5% !important;\n}\n.ui.grid > .row > [class*=\"seven wide\"].column,\n.ui.grid > .column.row > [class*=\"seven wide\"].column,\n.ui.grid > [class*=\"seven wide\"].column,\n.ui.column.grid > [class*=\"seven wide\"].column {\n  width: 43.75% !important;\n}\n.ui.grid > .row > [class*=\"eight wide\"].column,\n.ui.grid > .column.row > [class*=\"eight wide\"].column,\n.ui.grid > [class*=\"eight wide\"].column,\n.ui.column.grid > [class*=\"eight wide\"].column {\n  width: 50% !important;\n}\n.ui.grid > .row > [class*=\"nine wide\"].column,\n.ui.grid > .column.row > [class*=\"nine wide\"].column,\n.ui.grid > [class*=\"nine wide\"].column,\n.ui.column.grid > [class*=\"nine wide\"].column {\n  width: 56.25% !important;\n}\n.ui.grid > .row > [class*=\"ten wide\"].column,\n.ui.grid > .column.row > [class*=\"ten wide\"].column,\n.ui.grid > [class*=\"ten wide\"].column,\n.ui.column.grid > [class*=\"ten wide\"].column {\n  width: 62.5% !important;\n}\n.ui.grid > .row > [class*=\"eleven wide\"].column,\n.ui.grid > .column.row > [class*=\"eleven wide\"].column,\n.ui.grid > [class*=\"eleven wide\"].column,\n.ui.column.grid > [class*=\"eleven wide\"].column {\n  width: 68.75% !important;\n}\n.ui.grid > .row > [class*=\"twelve wide\"].column,\n.ui.grid > .column.row > [class*=\"twelve wide\"].column,\n.ui.grid > [class*=\"twelve wide\"].column,\n.ui.column.grid > [class*=\"twelve wide\"].column {\n  width: 75% !important;\n}\n.ui.grid > .row > [class*=\"thirteen wide\"].column,\n.ui.grid > .column.row > [class*=\"thirteen wide\"].column,\n.ui.grid > [class*=\"thirteen wide\"].column,\n.ui.column.grid > [class*=\"thirteen wide\"].column {\n  width: 81.25% !important;\n}\n.ui.grid > .row > [class*=\"fourteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fourteen wide\"].column,\n.ui.grid > [class*=\"fourteen wide\"].column,\n.ui.column.grid > [class*=\"fourteen wide\"].column {\n  width: 87.5% !important;\n}\n.ui.grid > .row > [class*=\"fifteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fifteen wide\"].column,\n.ui.grid > [class*=\"fifteen wide\"].column,\n.ui.column.grid > [class*=\"fifteen wide\"].column {\n  width: 93.75% !important;\n}\n.ui.grid > .row > [class*=\"sixteen wide\"].column,\n.ui.grid > .column.row > [class*=\"sixteen wide\"].column,\n.ui.grid > [class*=\"sixteen wide\"].column,\n.ui.column.grid > [class*=\"sixteen wide\"].column {\n  width: 100% !important;\n}\n\n/*----------------------\n    Width per Device\n-----------------------*/\n\n\n/* Mobile Sizing Combinations */\n@media only screen and (min-width: 320px) and (max-width: 767px) {\n  .ui.grid > .row > [class*=\"one wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"one wide mobile\"].column,\n  .ui.grid > [class*=\"one wide mobile\"].column,\n  .ui.column.grid > [class*=\"one wide mobile\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"two wide mobile\"].column,\n  .ui.grid > [class*=\"two wide mobile\"].column,\n  .ui.column.grid > [class*=\"two wide mobile\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"three wide mobile\"].column,\n  .ui.grid > [class*=\"three wide mobile\"].column,\n  .ui.column.grid > [class*=\"three wide mobile\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"four wide mobile\"].column,\n  .ui.grid > [class*=\"four wide mobile\"].column,\n  .ui.column.grid > [class*=\"four wide mobile\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"five wide mobile\"].column,\n  .ui.grid > [class*=\"five wide mobile\"].column,\n  .ui.column.grid > [class*=\"five wide mobile\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"six wide mobile\"].column,\n  .ui.grid > [class*=\"six wide mobile\"].column,\n  .ui.column.grid > [class*=\"six wide mobile\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > [class*=\"seven wide mobile\"].column,\n  .ui.column.grid > [class*=\"seven wide mobile\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > [class*=\"eight wide mobile\"].column,\n  .ui.column.grid > [class*=\"eight wide mobile\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > [class*=\"nine wide mobile\"].column,\n  .ui.column.grid > [class*=\"nine wide mobile\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > [class*=\"ten wide mobile\"].column,\n  .ui.column.grid > [class*=\"ten wide mobile\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > [class*=\"eleven wide mobile\"].column,\n  .ui.column.grid > [class*=\"eleven wide mobile\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > [class*=\"twelve wide mobile\"].column,\n  .ui.column.grid > [class*=\"twelve wide mobile\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > [class*=\"thirteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"thirteen wide mobile\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > [class*=\"fourteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fourteen wide mobile\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > [class*=\"fifteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fifteen wide mobile\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > [class*=\"sixteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"sixteen wide mobile\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Tablet Sizing Combinations */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.grid > .row > [class*=\"one wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"one wide tablet\"].column,\n  .ui.grid > [class*=\"one wide tablet\"].column,\n  .ui.column.grid > [class*=\"one wide tablet\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"two wide tablet\"].column,\n  .ui.grid > [class*=\"two wide tablet\"].column,\n  .ui.column.grid > [class*=\"two wide tablet\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"three wide tablet\"].column,\n  .ui.grid > [class*=\"three wide tablet\"].column,\n  .ui.column.grid > [class*=\"three wide tablet\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"four wide tablet\"].column,\n  .ui.grid > [class*=\"four wide tablet\"].column,\n  .ui.column.grid > [class*=\"four wide tablet\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"five wide tablet\"].column,\n  .ui.grid > [class*=\"five wide tablet\"].column,\n  .ui.column.grid > [class*=\"five wide tablet\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"six wide tablet\"].column,\n  .ui.grid > [class*=\"six wide tablet\"].column,\n  .ui.column.grid > [class*=\"six wide tablet\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > [class*=\"seven wide tablet\"].column,\n  .ui.column.grid > [class*=\"seven wide tablet\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > [class*=\"eight wide tablet\"].column,\n  .ui.column.grid > [class*=\"eight wide tablet\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > [class*=\"nine wide tablet\"].column,\n  .ui.column.grid > [class*=\"nine wide tablet\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > [class*=\"ten wide tablet\"].column,\n  .ui.column.grid > [class*=\"ten wide tablet\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > [class*=\"eleven wide tablet\"].column,\n  .ui.column.grid > [class*=\"eleven wide tablet\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > [class*=\"twelve wide tablet\"].column,\n  .ui.column.grid > [class*=\"twelve wide tablet\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > [class*=\"thirteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"thirteen wide tablet\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > [class*=\"fourteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fourteen wide tablet\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > [class*=\"fifteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fifteen wide tablet\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > [class*=\"sixteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"sixteen wide tablet\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Computer/Desktop Sizing Combinations */\n@media only screen and (min-width: 992px) {\n  .ui.grid > .row > [class*=\"one wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"one wide computer\"].column,\n  .ui.grid > [class*=\"one wide computer\"].column,\n  .ui.column.grid > [class*=\"one wide computer\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"two wide computer\"].column,\n  .ui.grid > [class*=\"two wide computer\"].column,\n  .ui.column.grid > [class*=\"two wide computer\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"three wide computer\"].column,\n  .ui.grid > [class*=\"three wide computer\"].column,\n  .ui.column.grid > [class*=\"three wide computer\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"four wide computer\"].column,\n  .ui.grid > [class*=\"four wide computer\"].column,\n  .ui.column.grid > [class*=\"four wide computer\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"five wide computer\"].column,\n  .ui.grid > [class*=\"five wide computer\"].column,\n  .ui.column.grid > [class*=\"five wide computer\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"six wide computer\"].column,\n  .ui.grid > [class*=\"six wide computer\"].column,\n  .ui.column.grid > [class*=\"six wide computer\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide computer\"].column,\n  .ui.grid > [class*=\"seven wide computer\"].column,\n  .ui.column.grid > [class*=\"seven wide computer\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide computer\"].column,\n  .ui.grid > [class*=\"eight wide computer\"].column,\n  .ui.column.grid > [class*=\"eight wide computer\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide computer\"].column,\n  .ui.grid > [class*=\"nine wide computer\"].column,\n  .ui.column.grid > [class*=\"nine wide computer\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide computer\"].column,\n  .ui.grid > [class*=\"ten wide computer\"].column,\n  .ui.column.grid > [class*=\"ten wide computer\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > [class*=\"eleven wide computer\"].column,\n  .ui.column.grid > [class*=\"eleven wide computer\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > [class*=\"twelve wide computer\"].column,\n  .ui.column.grid > [class*=\"twelve wide computer\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > [class*=\"thirteen wide computer\"].column,\n  .ui.column.grid > [class*=\"thirteen wide computer\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > [class*=\"fourteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fourteen wide computer\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > [class*=\"fifteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fifteen wide computer\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > [class*=\"sixteen wide computer\"].column,\n  .ui.column.grid > [class*=\"sixteen wide computer\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Large Monitor Sizing Combinations */\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.grid > .row > [class*=\"one wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide large screen\"].column,\n  .ui.grid > [class*=\"one wide large screen\"].column,\n  .ui.column.grid > [class*=\"one wide large screen\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide large screen\"].column,\n  .ui.grid > [class*=\"two wide large screen\"].column,\n  .ui.column.grid > [class*=\"two wide large screen\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide large screen\"].column,\n  .ui.grid > [class*=\"three wide large screen\"].column,\n  .ui.column.grid > [class*=\"three wide large screen\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide large screen\"].column,\n  .ui.grid > [class*=\"four wide large screen\"].column,\n  .ui.column.grid > [class*=\"four wide large screen\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide large screen\"].column,\n  .ui.grid > [class*=\"five wide large screen\"].column,\n  .ui.column.grid > [class*=\"five wide large screen\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide large screen\"].column,\n  .ui.grid > [class*=\"six wide large screen\"].column,\n  .ui.column.grid > [class*=\"six wide large screen\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > [class*=\"seven wide large screen\"].column,\n  .ui.column.grid > [class*=\"seven wide large screen\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > [class*=\"eight wide large screen\"].column,\n  .ui.column.grid > [class*=\"eight wide large screen\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > [class*=\"nine wide large screen\"].column,\n  .ui.column.grid > [class*=\"nine wide large screen\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > [class*=\"ten wide large screen\"].column,\n  .ui.column.grid > [class*=\"ten wide large screen\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > [class*=\"eleven wide large screen\"].column,\n  .ui.column.grid > [class*=\"eleven wide large screen\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > [class*=\"twelve wide large screen\"].column,\n  .ui.column.grid > [class*=\"twelve wide large screen\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > [class*=\"thirteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide large screen\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > [class*=\"fourteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide large screen\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > [class*=\"fifteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide large screen\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > [class*=\"sixteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide large screen\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Widescreen Sizing Combinations */\n@media only screen and (min-width: 1920px) {\n  .ui.grid > .row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > [class*=\"one wide widescreen\"].column,\n  .ui.column.grid > [class*=\"one wide widescreen\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > [class*=\"two wide widescreen\"].column,\n  .ui.column.grid > [class*=\"two wide widescreen\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > [class*=\"three wide widescreen\"].column,\n  .ui.column.grid > [class*=\"three wide widescreen\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > [class*=\"four wide widescreen\"].column,\n  .ui.column.grid > [class*=\"four wide widescreen\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > [class*=\"five wide widescreen\"].column,\n  .ui.column.grid > [class*=\"five wide widescreen\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > [class*=\"six wide widescreen\"].column,\n  .ui.column.grid > [class*=\"six wide widescreen\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > [class*=\"seven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"seven wide widescreen\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > [class*=\"eight wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eight wide widescreen\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > [class*=\"nine wide widescreen\"].column,\n  .ui.column.grid > [class*=\"nine wide widescreen\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > [class*=\"ten wide widescreen\"].column,\n  .ui.column.grid > [class*=\"ten wide widescreen\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > [class*=\"eleven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eleven wide widescreen\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > [class*=\"twelve wide widescreen\"].column,\n  .ui.column.grid > [class*=\"twelve wide widescreen\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > [class*=\"thirteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide widescreen\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fourteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide widescreen\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fifteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide widescreen\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > [class*=\"sixteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide widescreen\"].column {\n    width: 100% !important;\n  }\n}\n\n/*----------------------\n        Centered\n-----------------------*/\n\n.ui.centered.grid,\n.ui.centered.grid > .row,\n.ui.grid > .centered.row {\n  text-align: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row),\n.ui.centered.grid > .row > .column:not(.aligned):not(.justified),\n.ui.grid .centered.row > .column:not(.aligned):not(.justified) {\n  text-align: left;\n}\n.ui.grid > .centered.column,\n.ui.grid > .row > .centered.column {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*----------------------\n        Relaxed\n-----------------------*/\n\n.ui.relaxed.grid > .column:not(.row),\n.ui.relaxed.grid > .row > .column,\n.ui.grid > .relaxed.row > .column {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].grid > .row > .column,\n.ui.grid > [class*=\"very relaxed\"].row > .column {\n  padding-left: 2.5rem;\n  padding-right: 2.5rem;\n}\n\n/* Coupling with UI Divider */\n.ui.relaxed.grid .row + .ui.divider,\n.ui.grid .relaxed.row + .ui.divider {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid .row + .ui.divider,\n.ui.grid [class*=\"very relaxed\"].row + .ui.divider {\n  margin-left: 2.5rem;\n  margin-right: 2.5rem;\n}\n\n/*----------------------\n        Padded\n-----------------------*/\n\n.ui.padded.grid:not(.vertically):not(.horizontally) {\n  margin: 0em !important;\n}\n[class*=\"horizontally padded\"].ui.grid {\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n}\n[class*=\"vertically padded\"].ui.grid {\n  margin-top: 0em !important;\n  margin-bottom: 0em !important;\n}\n\n/*----------------------\n       \"Floated\"\n-----------------------*/\n\n.ui.grid [class*=\"left floated\"].column {\n  margin-right: auto;\n}\n.ui.grid [class*=\"right floated\"].column {\n  margin-left: auto;\n}\n\n/*----------------------\n        Divided\n-----------------------*/\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Swap from padding to margin on columns to have dividers align */\n.ui[class*=\"vertically divided\"].grid > .column:not(.row),\n.ui[class*=\"vertically divided\"].grid > .row > .column {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  padding-top: 0rem;\n  padding-bottom: 0rem;\n}\n.ui[class*=\"vertically divided\"].grid > .row {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/* No divider on first column on row */\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/* No space on top of first row */\n.ui[class*=\"vertically divided\"].grid > .row:first-child > .column {\n  margin-top: 0em;\n}\n\n/* Divided Row */\n.ui.grid > .divided.row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.grid > .divided.row > .column:first-child {\n  box-shadow: none;\n}\n\n/* Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row {\n  position: relative;\n}\n.ui[class*=\"vertically divided\"].grid > .row:before {\n  position: absolute;\n  content: \"\";\n  top: 0em;\n  left: 0px;\n  width: calc(100% -  2rem );\n  height: 1px;\n  margin: 0% 1rem;\n  box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Padded Horizontally Divided */\n[class*=\"horizontally padded\"].ui.divided.grid,\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\n  width: 100%;\n}\n\n/* First Row Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row:first-child:before {\n  box-shadow: none;\n}\n\n/* Inverted Divided */\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n}\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row):first-child,\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n.ui.inverted[class*=\"vertically divided\"].grid > .row:before {\n  box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n/* Relaxed */\n.ui.relaxed[class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n  width: calc(100% -  3rem );\n}\n.ui[class*=\"very relaxed\"][class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 5rem;\n  margin-right: 5rem;\n  width: calc(100% -  5rem );\n}\n\n/*----------------------\n         Celled\n-----------------------*/\n\n.ui.celled.grid {\n  width: 100%;\n  margin: 1em 0em;\n  box-shadow: 0px 0px 0px 1px #D4D4D5;\n}\n.ui.celled.grid > .row {\n  width: 100% !important;\n  margin: 0em;\n  padding: 0em;\n  box-shadow: 0px -1px 0px 0px #D4D4D5;\n}\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  box-shadow: -1px 0px 0px 0px #D4D4D5;\n}\n.ui.celled.grid > .column:first-child,\n.ui.celled.grid > .row > .column:first-child {\n  box-shadow: none;\n}\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  padding: 1em;\n}\n.ui.relaxed.celled.grid > .column:not(.row),\n.ui.relaxed.celled.grid > .row > .column {\n  padding: 1.5em;\n}\n.ui[class*=\"very relaxed\"].celled.grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].celled.grid > .row > .column {\n  padding: 2em;\n}\n\n/* Internally Celled */\n.ui[class*=\"internally celled\"].grid {\n  box-shadow: none;\n  margin: 0em;\n}\n.ui[class*=\"internally celled\"].grid > .row:first-child {\n  box-shadow: none;\n}\n.ui[class*=\"internally celled\"].grid > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/*----------------------\n   Vertically Aligned\n-----------------------*/\n\n\n/* Top Aligned */\n.ui[class*=\"top aligned\"].grid > .column:not(.row),\n.ui[class*=\"top aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"top aligned\"].row > .column,\n.ui.grid > [class*=\"top aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"top aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: top;\n  -ms-flex-item-align: start !important;\n      align-self: flex-start !important;\n}\n\n/* Middle Aligned */\n.ui[class*=\"middle aligned\"].grid > .column:not(.row),\n.ui[class*=\"middle aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"middle aligned\"].row > .column,\n.ui.grid > [class*=\"middle aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"middle aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: middle;\n  -ms-flex-item-align: center !important;\n      -ms-grid-row-align: center !important;\n      align-self: center !important;\n}\n\n/* Bottom Aligned */\n.ui[class*=\"bottom aligned\"].grid > .column:not(.row),\n.ui[class*=\"bottom aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"bottom aligned\"].row > .column,\n.ui.grid > [class*=\"bottom aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"bottom aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: bottom;\n  -ms-flex-item-align: end !important;\n      align-self: flex-end !important;\n}\n\n/* Stretched */\n.ui.stretched.grid > .row > .column,\n.ui.stretched.grid > .column,\n.ui.grid > .stretched.row > .column,\n.ui.grid > .stretched.column:not(.row),\n.ui.grid > .row > .stretched.column {\n  display: -webkit-inline-box !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n.ui.stretched.grid > .row > .column > *,\n.ui.stretched.grid > .column > *,\n.ui.grid > .stretched.row > .column > *,\n.ui.grid > .stretched.column:not(.row) > *,\n.ui.grid > .row > .stretched.column > * {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n\n/*----------------------\n  Horizontally Centered\n-----------------------*/\n\n\n/* Left Aligned */\n.ui[class*=\"left aligned\"].grid > .column,\n.ui[class*=\"left aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"left aligned\"].row > .column,\n.ui.grid > [class*=\"left aligned\"].column.column,\n.ui.grid > .row > [class*=\"left aligned\"].column.column {\n  text-align: left;\n  -ms-flex-item-align: inherit;\n      -ms-grid-row-align: inherit;\n      align-self: inherit;\n}\n\n/* Center Aligned */\n.ui[class*=\"center aligned\"].grid > .column,\n.ui[class*=\"center aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"center aligned\"].row > .column,\n.ui.grid > [class*=\"center aligned\"].column.column,\n.ui.grid > .row > [class*=\"center aligned\"].column.column {\n  text-align: center;\n  -ms-flex-item-align: inherit;\n      -ms-grid-row-align: inherit;\n      align-self: inherit;\n}\n.ui[class*=\"center aligned\"].grid {\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n\n/* Right Aligned */\n.ui[class*=\"right aligned\"].grid > .column,\n.ui[class*=\"right aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"right aligned\"].row > .column,\n.ui.grid > [class*=\"right aligned\"].column.column,\n.ui.grid > .row > [class*=\"right aligned\"].column.column {\n  text-align: right;\n  -ms-flex-item-align: inherit;\n      -ms-grid-row-align: inherit;\n      align-self: inherit;\n}\n\n/* Justified */\n.ui.justified.grid > .column,\n.ui.justified.grid > .row > .column,\n.ui.grid > .justified.row > .column,\n.ui.grid > .justified.column.column,\n.ui.grid > .row > .justified.column.column {\n  text-align: justify;\n  -webkit-hyphens: auto;\n      -ms-hyphens: auto;\n          hyphens: auto;\n}\n\n/*----------------------\n         Colored\n-----------------------*/\n\n.ui.grid > .row > .red.column,\n.ui.grid > .row > .orange.column,\n.ui.grid > .row > .yellow.column,\n.ui.grid > .row > .olive.column,\n.ui.grid > .row > .green.column,\n.ui.grid > .row > .teal.column,\n.ui.grid > .row > .blue.column,\n.ui.grid > .row > .violet.column,\n.ui.grid > .row > .purple.column,\n.ui.grid > .row > .pink.column,\n.ui.grid > .row > .brown.column,\n.ui.grid > .row > .grey.column,\n.ui.grid > .row > .black.column {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/* Red */\n.ui.grid > .red.row,\n.ui.grid > .red.column,\n.ui.grid > .row > .red.column {\n  background-color: #DB2828 !important;\n  color: #FFFFFF;\n}\n\n/* Orange */\n.ui.grid > .orange.row,\n.ui.grid > .orange.column,\n.ui.grid > .row > .orange.column {\n  background-color: #F2711C !important;\n  color: #FFFFFF;\n}\n\n/* Yellow */\n.ui.grid > .yellow.row,\n.ui.grid > .yellow.column,\n.ui.grid > .row > .yellow.column {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF;\n}\n\n/* Olive */\n.ui.grid > .olive.row,\n.ui.grid > .olive.column,\n.ui.grid > .row > .olive.column {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF;\n}\n\n/* Green */\n.ui.grid > .green.row,\n.ui.grid > .green.column,\n.ui.grid > .row > .green.column {\n  background-color: #21BA45 !important;\n  color: #FFFFFF;\n}\n\n/* Teal */\n.ui.grid > .teal.row,\n.ui.grid > .teal.column,\n.ui.grid > .row > .teal.column {\n  background-color: #00B5AD !important;\n  color: #FFFFFF;\n}\n\n/* Blue */\n.ui.grid > .blue.row,\n.ui.grid > .blue.column,\n.ui.grid > .row > .blue.column {\n  background-color: #2185D0 !important;\n  color: #FFFFFF;\n}\n\n/* Violet */\n.ui.grid > .violet.row,\n.ui.grid > .violet.column,\n.ui.grid > .row > .violet.column {\n  background-color: #6435C9 !important;\n  color: #FFFFFF;\n}\n\n/* Purple */\n.ui.grid > .purple.row,\n.ui.grid > .purple.column,\n.ui.grid > .row > .purple.column {\n  background-color: #A333C8 !important;\n  color: #FFFFFF;\n}\n\n/* Pink */\n.ui.grid > .pink.row,\n.ui.grid > .pink.column,\n.ui.grid > .row > .pink.column {\n  background-color: #E03997 !important;\n  color: #FFFFFF;\n}\n\n/* Brown */\n.ui.grid > .brown.row,\n.ui.grid > .brown.column,\n.ui.grid > .row > .brown.column {\n  background-color: #A5673F !important;\n  color: #FFFFFF;\n}\n\n/* Grey */\n.ui.grid > .grey.row,\n.ui.grid > .grey.column,\n.ui.grid > .row > .grey.column {\n  background-color: #767676 !important;\n  color: #FFFFFF;\n}\n\n/* Black */\n.ui.grid > .black.row,\n.ui.grid > .black.column,\n.ui.grid > .row > .black.column {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF;\n}\n\n/*----------------------\n      Equal Width\n-----------------------*/\n\n.ui[class*=\"equal width\"].grid > .column:not(.row),\n.ui[class*=\"equal width\"].grid > .row > .column,\n.ui.grid > [class*=\"equal width\"].row > .column {\n  display: inline-block;\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n.ui[class*=\"equal width\"].grid > .wide.column,\n.ui[class*=\"equal width\"].grid > .row > .wide.column,\n.ui.grid > [class*=\"equal width\"].row > .wide.column {\n  -webkit-box-flex: 0;\n      -ms-flex-positive: 0;\n          flex-grow: 0;\n}\n\n/*----------------------\n        Reverse\n-----------------------*/\n\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"mobile reversed\"].grid,\n  .ui[class*=\"mobile reversed\"].grid > .row,\n  .ui.grid > [class*=\"mobile reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"mobile vertically reversed\"].grid,\n  .ui.stackable[class*=\"mobile reversed\"] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:first-child:before {\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"tablet reversed\"].grid,\n  .ui[class*=\"tablet reversed\"].grid > .row,\n  .ui.grid > [class*=\"tablet reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"tablet vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:first-child:before {\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/* Computer */\n@media only screen and (min-width: 992px) {\n  .ui[class*=\"computer reversed\"].grid,\n  .ui[class*=\"computer reversed\"].grid > .row,\n  .ui.grid > [class*=\"computer reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"computer vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:first-child:before {\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.doubling.grid {\n    width: auto;\n  }\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    display: inline-block !important;\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    box-shadow: none !important;\n    margin: 0em;\n  }\n  .ui[class*=\"two column\"].doubling.grid > .row > .column,\n  .ui[class*=\"two column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling.row.row > .column {\n    width: 100% !important;\n  }\n  .ui[class*=\"three column\"].doubling.grid > .row > .column,\n  .ui[class*=\"three column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"four column\"].doubling.grid > .row > .column,\n  .ui[class*=\"four column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"five column\"].doubling.grid > .row > .column,\n  .ui[class*=\"five column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"six column\"].doubling.grid > .row > .column,\n  .ui[class*=\"six column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"seven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"eight column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"nine column\"].doubling.grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"ten column\"].doubling.grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n  .ui[class*=\"eleven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n  .ui[class*=\"twelve column\"].doubling.grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling.row.row > .column {\n    width: 12.5% !important;\n  }\n}\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    margin: 0em !important;\n    box-shadow: none !important;\n  }\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling:not(.stackable).row.row > .column {\n    width: 100% !important;\n  }\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid {\n    width: auto;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n  .ui.stackable.grid > .row > .wide.column,\n  .ui.stackable.grid > .wide.column,\n  .ui.stackable.grid > .column.grid > .column,\n  .ui.stackable.grid > .column.row > .column,\n  .ui.stackable.grid > .row > .column,\n  .ui.stackable.grid > .column:not(.row),\n  .ui.grid > .stackable.stackable.row > .column {\n    width: 100% !important;\n    margin: 0em 0em !important;\n    box-shadow: none !important;\n    padding: 1rem 1rem !important;\n  }\n  .ui.stackable.grid:not(.vertically) > .row {\n    margin: 0em;\n    padding: 0em;\n  }\n  \n/* Coupling */\n  .ui.container > .ui.stackable.grid > .column,\n  .ui.container > .ui.stackable.grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n  \n/* Don't pad inside segment or nested grid */\n  .ui.grid .ui.stackable.grid,\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\n    margin-left: -1rem !important;\n    margin-right: -1rem !important;\n  }\n  \n/* Divided Stackable */\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\n    border-top: none !important;\n  }\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\n  .ui.inverted.stackable.celled.grid > .row > .column,\n  .ui.inverted.stackable.divided.grid > .row > .column {\n    border-top: 1px solid rgba(255, 255, 255, 0.1);\n  }\n  .ui.stackable.celled.grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.celled.grid > .row > .column,\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    border-top: 1px solid rgba(34, 36, 38, 0.15);\n    box-shadow: none !important;\n    padding-top: 2rem !important;\n    padding-bottom: 2rem !important;\n  }\n  .ui.stackable.celled.grid > .row {\n    box-shadow: none !important;\n  }\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n}\n\n/*----------------------\n     Only (Device)\n-----------------------*/\n\n\n/* These include arbitrary class repetitions for forced specificity */\n\n/* Mobile Only Hide */\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Tablet Only Hide */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Computer Only Hide */\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Large Screen Only Hide */\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Widescreen Only Hide */\n@media only screen and (min-width: 1920px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/header.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Header\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Header\n*******************************/\n\n\n/* Standard */\n.ui.header {\n  border: none;\n  margin: calc(2rem -  0.14285em ) 0em 1rem;\n  padding: 0em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  line-height: 1.2857em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.header:first-child {\n  margin-top: -0.14285em;\n}\n.ui.header:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n   Sub Header\n---------------*/\n\n.ui.header .sub.header {\n  display: block;\n  font-weight: normal;\n  padding: 0em;\n  margin: 0em;\n  font-size: 1rem;\n  line-height: 1.2em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.header > .icon {\n  display: table-cell;\n  opacity: 1;\n  font-size: 1.5em;\n  padding-top: 0.14285em;\n  vertical-align: middle;\n}\n\n/* With Text Node */\n.ui.header .icon:only-child {\n  display: inline-block;\n  padding: 0em;\n  margin-right: 0.75rem;\n}\n\n/*-------------------\n        Image\n--------------------*/\n\n.ui.header > .image,\n.ui.header > img {\n  display: inline-block;\n  margin-top: 0.14285em;\n  width: 2.5em;\n  height: auto;\n  vertical-align: middle;\n}\n.ui.header > .image:only-child,\n.ui.header > img:only-child {\n  margin-right: 0.75rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.header .content {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* After Image */\n.ui.header > img + .content,\n.ui.header > .image + .content {\n  padding-left: 0.75rem;\n  vertical-align: middle;\n}\n\n/* After Icon */\n.ui.header > .icon + .content {\n  padding-left: 0.75rem;\n  display: table-cell;\n  vertical-align: middle;\n}\n\n/*--------------\n Loose Coupling\n---------------*/\n\n.ui.header .ui.label {\n  font-size: '';\n  margin-left: 0.5rem;\n  vertical-align: middle;\n}\n\n/* Positioning */\n.ui.header + p {\n  margin-top: 0em;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Page\n---------------*/\n\nh1.ui.header {\n  font-size: 2rem;\n}\nh2.ui.header {\n  font-size: 1.714rem;\n}\nh3.ui.header {\n  font-size: 1.28rem;\n}\nh4.ui.header {\n  font-size: 1.071rem;\n}\nh5.ui.header {\n  font-size: 1rem;\n}\n\n/* Sub Header */\nh1.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\nh2.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\nh3.ui.header .sub.header {\n  font-size: 1rem;\n}\nh4.ui.header .sub.header {\n  font-size: 1rem;\n}\nh5.ui.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n Content Heading\n---------------*/\n\n.ui.huge.header {\n  min-height: 1em;\n  font-size: 2em;\n}\n.ui.large.header {\n  font-size: 1.714em;\n}\n.ui.medium.header {\n  font-size: 1.28em;\n}\n.ui.small.header {\n  font-size: 1.071em;\n}\n.ui.tiny.header {\n  font-size: 1em;\n}\n\n/* Sub Header */\n.ui.huge.header .sub.header {\n  font-size: 1.14285714rem;\n}\n.ui.large.header .sub.header {\n  font-size: 1.14285714rem;\n}\n.ui.header .sub.header {\n  font-size: 1rem;\n}\n.ui.small.header .sub.header {\n  font-size: 1rem;\n}\n.ui.tiny.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n   Sub Heading\n---------------*/\n\n.ui.sub.header {\n  padding: 0em;\n  margin-bottom: 0.14285714rem;\n  font-weight: bold;\n  font-size: 0.85714286em;\n  text-transform: uppercase;\n  color: '';\n}\n.ui.small.sub.header {\n  font-size: 0.78571429em;\n}\n.ui.sub.header {\n  font-size: 0.85714286em;\n}\n.ui.large.sub.header {\n  font-size: 0.92857143em;\n}\n.ui.huge.sub.header {\n  font-size: 1em;\n}\n\n/*-------------------\n        Icon\n--------------------*/\n\n.ui.icon.header {\n  display: inline-block;\n  text-align: center;\n  margin: 2rem 0em 1rem;\n}\n.ui.icon.header:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n.ui.icon.header:first-child {\n  margin-top: 0em;\n}\n.ui.icon.header .icon {\n  float: none;\n  display: block;\n  width: auto;\n  height: auto;\n  line-height: 1;\n  padding: 0em;\n  font-size: 3em;\n  margin: 0em auto 0.5rem;\n  opacity: 1;\n}\n.ui.icon.header .content {\n  display: block;\n  padding: 0em;\n}\n.ui.icon.header .circular.icon {\n  font-size: 2em;\n}\n.ui.icon.header .square.icon {\n  font-size: 2em;\n}\n.ui.block.icon.header .icon {\n  margin-bottom: 0em;\n}\n.ui.icon.header.aligned {\n  margin-left: auto;\n  margin-right: auto;\n  display: block;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.disabled.header {\n  opacity: 0.45;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.header {\n  color: #FFFFFF;\n}\n.ui.inverted.header .sub.header {\n  color: rgba(255, 255, 255, 0.8);\n}\n.ui.inverted.attached.header {\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  box-shadow: none;\n  border-color: transparent;\n}\n.ui.inverted.block.header {\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  box-shadow: none;\n}\n.ui.inverted.block.header {\n  border-bottom: none;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Red ---*/\n\n.ui.red.header {\n  color: #DB2828 !important;\n}\na.ui.red.header:hover {\n  color: #d01919 !important;\n}\n.ui.red.dividing.header {\n  border-bottom: 2px solid #DB2828;\n}\n\n/* Inverted */\n.ui.inverted.red.header {\n  color: #FF695E !important;\n}\na.ui.inverted.red.header:hover {\n  color: #ff5144 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.header {\n  color: #F2711C !important;\n}\na.ui.orange.header:hover {\n  color: #f26202 !important;\n}\n.ui.orange.dividing.header {\n  border-bottom: 2px solid #F2711C;\n}\n\n/* Inverted */\n.ui.inverted.orange.header {\n  color: #FF851B !important;\n}\na.ui.inverted.orange.header:hover {\n  color: #ff7701 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.header {\n  color: #B5CC18 !important;\n}\na.ui.olive.header:hover {\n  color: #a7bd0d !important;\n}\n.ui.olive.dividing.header {\n  border-bottom: 2px solid #B5CC18;\n}\n\n/* Inverted */\n.ui.inverted.olive.header {\n  color: #D9E778 !important;\n}\na.ui.inverted.olive.header:hover {\n  color: #d8ea5c !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.header {\n  color: #FBBD08 !important;\n}\na.ui.yellow.header:hover {\n  color: #eaae00 !important;\n}\n.ui.yellow.dividing.header {\n  border-bottom: 2px solid #FBBD08;\n}\n\n/* Inverted */\n.ui.inverted.yellow.header {\n  color: #FFE21F !important;\n}\na.ui.inverted.yellow.header:hover {\n  color: #ffdf05 !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.header {\n  color: #21BA45 !important;\n}\na.ui.green.header:hover {\n  color: #16ab39 !important;\n}\n.ui.green.dividing.header {\n  border-bottom: 2px solid #21BA45;\n}\n\n/* Inverted */\n.ui.inverted.green.header {\n  color: #2ECC40 !important;\n}\na.ui.inverted.green.header:hover {\n  color: #22be34 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.header {\n  color: #00B5AD !important;\n}\na.ui.teal.header:hover {\n  color: #009c95 !important;\n}\n.ui.teal.dividing.header {\n  border-bottom: 2px solid #00B5AD;\n}\n\n/* Inverted */\n.ui.inverted.teal.header {\n  color: #6DFFFF !important;\n}\na.ui.inverted.teal.header:hover {\n  color: #54ffff !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.header {\n  color: #2185D0 !important;\n}\na.ui.blue.header:hover {\n  color: #1678c2 !important;\n}\n.ui.blue.dividing.header {\n  border-bottom: 2px solid #2185D0;\n}\n\n/* Inverted */\n.ui.inverted.blue.header {\n  color: #54C8FF !important;\n}\na.ui.inverted.blue.header:hover {\n  color: #3ac0ff !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.header {\n  color: #6435C9 !important;\n}\na.ui.violet.header:hover {\n  color: #5829bb !important;\n}\n.ui.violet.dividing.header {\n  border-bottom: 2px solid #6435C9;\n}\n\n/* Inverted */\n.ui.inverted.violet.header {\n  color: #A291FB !important;\n}\na.ui.inverted.violet.header:hover {\n  color: #8a73ff !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.header {\n  color: #A333C8 !important;\n}\na.ui.purple.header:hover {\n  color: #9627ba !important;\n}\n.ui.purple.dividing.header {\n  border-bottom: 2px solid #A333C8;\n}\n\n/* Inverted */\n.ui.inverted.purple.header {\n  color: #DC73FF !important;\n}\na.ui.inverted.purple.header:hover {\n  color: #d65aff !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.header {\n  color: #E03997 !important;\n}\na.ui.pink.header:hover {\n  color: #e61a8d !important;\n}\n.ui.pink.dividing.header {\n  border-bottom: 2px solid #E03997;\n}\n\n/* Inverted */\n.ui.inverted.pink.header {\n  color: #FF8EDF !important;\n}\na.ui.inverted.pink.header:hover {\n  color: #ff74d8 !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.header {\n  color: #A5673F !important;\n}\na.ui.brown.header:hover {\n  color: #975b33 !important;\n}\n.ui.brown.dividing.header {\n  border-bottom: 2px solid #A5673F;\n}\n\n/* Inverted */\n.ui.inverted.brown.header {\n  color: #D67C1C !important;\n}\na.ui.inverted.brown.header:hover {\n  color: #c86f11 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.header {\n  color: #767676 !important;\n}\na.ui.grey.header:hover {\n  color: #838383 !important;\n}\n.ui.grey.dividing.header {\n  border-bottom: 2px solid #767676;\n}\n\n/* Inverted */\n.ui.inverted.grey.header {\n  color: #DCDDDE !important;\n}\na.ui.inverted.grey.header:hover {\n  color: #cfd0d2 !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.left.aligned.header {\n  text-align: left;\n}\n.ui.right.aligned.header {\n  text-align: right;\n}\n.ui.centered.header,\n.ui.center.aligned.header {\n  text-align: center;\n}\n.ui.justified.header {\n  text-align: justify;\n}\n.ui.justified.header:after {\n  display: inline-block;\n  content: '';\n  width: 100%;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.header,\n.ui[class*=\"left floated\"].header {\n  float: left;\n  margin-top: 0em;\n  margin-right: 0.5em;\n}\n.ui[class*=\"right floated\"].header {\n  float: right;\n  margin-top: 0em;\n  margin-left: 0.5em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.header {\n  padding: 0em;\n}\n\n/*-------------------\n      Dividing\n--------------------*/\n\n.ui.dividing.header {\n  padding-bottom: 0.21428571rem;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.dividing.header .sub.header {\n  padding-bottom: 0.21428571rem;\n}\n.ui.dividing.header .icon {\n  margin-bottom: 0em;\n}\n.ui.inverted.dividing.header {\n  border-bottom-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Block\n--------------------*/\n\n.ui.block.header {\n  background: #F3F4F5;\n  padding: 0.78571429rem 1rem;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n  border-radius: 0.28571429rem;\n}\n.ui.tiny.block.header {\n  font-size: 0.85714286rem;\n}\n.ui.small.block.header {\n  font-size: 0.92857143rem;\n}\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1rem;\n}\n.ui.large.block.header {\n  font-size: 1.14285714rem;\n}\n.ui.huge.block.header {\n  font-size: 1.42857143rem;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n.ui.attached.header {\n  background: #FFFFFF;\n  padding: 0.78571429rem 1rem;\n  margin-left: -1px;\n  margin-right: -1px;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached.block.header {\n  background: #F3F4F5;\n}\n.ui.attached:not(.top):not(.bottom).header {\n  margin-top: 0em;\n  margin-bottom: 0em;\n  border-top: none;\n  border-radius: 0em;\n}\n.ui.top.attached.header {\n  margin-bottom: 0em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.bottom.attached.header {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Attached Sizes */\n.ui.tiny.attached.header {\n  font-size: 0.85714286em;\n}\n.ui.small.attached.header {\n  font-size: 0.92857143em;\n}\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1em;\n}\n.ui.large.attached.header {\n  font-size: 1.14285714em;\n}\n.ui.huge.attached.header {\n  font-size: 1.42857143em;\n}\n\n/*-------------------\n        Sizing\n--------------------*/\n\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1.28em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/icon.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Icon\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Icon\n*******************************/\n\n@font-face {\n  font-family: 'Icons';\n  src: url(\"./../themes/default/assets/fonts/icons.eot\");\n  src: url(\"./../themes/default/assets/fonts/icons.eot?#iefix\") format('embedded-opentype'), url(\"./../themes/default/assets/fonts/icons.woff2\") format('woff2'), url(\"./../themes/default/assets/fonts/icons.woff\") format('woff'), url(\"./../themes/default/assets/fonts/icons.ttf\") format('truetype'), url(\"./../themes/default/assets/fonts/icons.svg#icons\") format('svg');\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-transform: none;\n}\ni.icon {\n  display: inline-block;\n  opacity: 1;\n  margin: 0em 0.25rem 0em 0em;\n  width: 1.18em;\n  height: 1em;\n  font-family: 'Icons';\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  text-align: center;\n  speak: none;\n  font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\ni.icon:before {\n  background: none !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n    Loading\n---------------*/\n\ni.icon.loading {\n  height: 1em;\n  line-height: 1;\n  -webkit-animation: icon-loading 2s linear infinite;\n          animation: icon-loading 2s linear infinite;\n}\n@-webkit-keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\ni.icon.hover {\n  opacity: 1 !important;\n}\ni.icon.active {\n  opacity: 1 !important;\n}\ni.emphasized.icon {\n  opacity: 1 !important;\n}\ni.disabled.icon {\n  opacity: 0.45 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n        Fitted\n--------------------*/\n\ni.fitted.icon {\n  width: auto;\n  margin: 0em;\n}\n\n/*-------------------\n         Link\n--------------------*/\n\ni.link.icon,\ni.link.icons {\n  cursor: pointer;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\ni.link.icon:hover,\ni.link.icons:hover {\n  opacity: 1 !important;\n}\n\n/*-------------------\n      Circular\n--------------------*/\n\ni.circular.icon {\n  border-radius: 500em !important;\n  line-height: 1 !important;\n  padding: 0.5em 0.5em !important;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  width: 2em !important;\n  height: 2em !important;\n}\ni.circular.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Flipped\n--------------------*/\n\ni.flipped.icon,\ni.horizontally.flipped.icon {\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1);\n}\ni.vertically.flipped.icon {\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1);\n}\n\n/*-------------------\n      Rotated\n--------------------*/\n\ni.rotated.icon,\ni.right.rotated.icon,\ni.clockwise.rotated.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\ni.left.rotated.icon,\ni.counterclockwise.rotated.icon {\n  -webkit-transform: rotate(-90deg);\n          transform: rotate(-90deg);\n}\n\n/*-------------------\n      Bordered\n--------------------*/\n\ni.bordered.icon {\n  line-height: 1;\n  vertical-align: baseline;\n  width: 2em;\n  height: 2em;\n  padding: 0.5em 0.41em !important;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n}\ni.bordered.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n\n/* Inverted Shapes */\ni.inverted.bordered.icon,\ni.inverted.circular.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\ni.inverted.icon {\n  color: #FFFFFF;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\ni.red.icon {\n  color: #DB2828 !important;\n}\ni.inverted.red.icon {\n  color: #FF695E !important;\n}\ni.inverted.bordered.red.icon,\ni.inverted.circular.red.icon {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\ni.orange.icon {\n  color: #F2711C !important;\n}\ni.inverted.orange.icon {\n  color: #FF851B !important;\n}\ni.inverted.bordered.orange.icon,\ni.inverted.circular.orange.icon {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\ni.yellow.icon {\n  color: #FBBD08 !important;\n}\ni.inverted.yellow.icon {\n  color: #FFE21F !important;\n}\ni.inverted.bordered.yellow.icon,\ni.inverted.circular.yellow.icon {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\ni.olive.icon {\n  color: #B5CC18 !important;\n}\ni.inverted.olive.icon {\n  color: #D9E778 !important;\n}\ni.inverted.bordered.olive.icon,\ni.inverted.circular.olive.icon {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\ni.green.icon {\n  color: #21BA45 !important;\n}\ni.inverted.green.icon {\n  color: #2ECC40 !important;\n}\ni.inverted.bordered.green.icon,\ni.inverted.circular.green.icon {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\ni.teal.icon {\n  color: #00B5AD !important;\n}\ni.inverted.teal.icon {\n  color: #6DFFFF !important;\n}\ni.inverted.bordered.teal.icon,\ni.inverted.circular.teal.icon {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\ni.blue.icon {\n  color: #2185D0 !important;\n}\ni.inverted.blue.icon {\n  color: #54C8FF !important;\n}\ni.inverted.bordered.blue.icon,\ni.inverted.circular.blue.icon {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\ni.violet.icon {\n  color: #6435C9 !important;\n}\ni.inverted.violet.icon {\n  color: #A291FB !important;\n}\ni.inverted.bordered.violet.icon,\ni.inverted.circular.violet.icon {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\ni.purple.icon {\n  color: #A333C8 !important;\n}\ni.inverted.purple.icon {\n  color: #DC73FF !important;\n}\ni.inverted.bordered.purple.icon,\ni.inverted.circular.purple.icon {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\ni.pink.icon {\n  color: #E03997 !important;\n}\ni.inverted.pink.icon {\n  color: #FF8EDF !important;\n}\ni.inverted.bordered.pink.icon,\ni.inverted.circular.pink.icon {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\ni.brown.icon {\n  color: #A5673F !important;\n}\ni.inverted.brown.icon {\n  color: #D67C1C !important;\n}\ni.inverted.bordered.brown.icon,\ni.inverted.circular.brown.icon {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\ni.grey.icon {\n  color: #767676 !important;\n}\ni.inverted.grey.icon {\n  color: #DCDDDE !important;\n}\ni.inverted.bordered.grey.icon,\ni.inverted.circular.grey.icon {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\ni.black.icon {\n  color: #1B1C1D !important;\n}\ni.inverted.black.icon {\n  color: #545454 !important;\n}\ni.inverted.bordered.black.icon,\ni.inverted.circular.black.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\ni.mini.icon,\ni.mini.icons {\n  line-height: 1;\n  font-size: 0.4em;\n}\ni.tiny.icon,\ni.tiny.icons {\n  line-height: 1;\n  font-size: 0.5em;\n}\ni.small.icon,\ni.small.icons {\n  line-height: 1;\n  font-size: 0.75em;\n}\ni.icon,\ni.icons {\n  font-size: 1em;\n}\ni.large.icon,\ni.large.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 1.5em;\n}\ni.big.icon,\ni.big.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 2em;\n}\ni.huge.icon,\ni.huge.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 4em;\n}\ni.massive.icon,\ni.massive.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 8em;\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\ni.icons {\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\ni.icons .icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  margin: 0em;\n  margin: 0;\n}\ni.icons .icon:first-child {\n  position: static;\n  width: auto;\n  height: auto;\n  vertical-align: top;\n  -webkit-transform: none;\n          transform: none;\n  margin-right: 0.25rem;\n}\n\n/* Corner Icon */\ni.icons .corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n  -webkit-transform: none;\n          transform: none;\n  font-size: 0.45em;\n  text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF;\n}\ni.icons .inverted.corner.icon {\n  text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D;\n}\n/*\n * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n\n/*******************************\n\nSemantic-UI integration of font-awesome :\n\n///class names are separated\ni.icon.circle => i.icon.circle\ni.icon.circle-o => i.icon.circle.outline\n\n//abbreviation are replaced by full letters:\ni.icon.ellipsis-h => i.icon.ellipsis.horizontal\ni.icon.ellipsis-v => i.icon.ellipsis.vertical\n.alpha => .i.icon.alphabet\n.asc => .i.icon.ascending\n.desc => .i.icon.descending\n.alt =>.alternate\n\nASCII order is conserved for easier maintenance.\n\nIcons that only have one style 'outline', 'square' etc do not require this class\nfor instance `lemon icon` not `lemon outline icon` since there is only one lemon\n\n*******************************/\n\n\n\n/*******************************\n            Icons\n*******************************/\n\n\n/* Web Content */\ni.icon.search:before {\n  content: \"\\f002\";\n}\ni.icon.mail.outline:before {\n  content: \"\\f003\";\n}\ni.icon.signal:before {\n  content: \"\\f012\";\n}\ni.icon.setting:before {\n  content: \"\\f013\";\n}\ni.icon.home:before {\n  content: \"\\f015\";\n}\ni.icon.inbox:before {\n  content: \"\\f01c\";\n}\ni.icon.browser:before {\n  content: \"\\f022\";\n}\ni.icon.tag:before {\n  content: \"\\f02b\";\n}\ni.icon.tags:before {\n  content: \"\\f02c\";\n}\ni.icon.image:before {\n  content: \"\\f03e\";\n}\ni.icon.calendar:before {\n  content: \"\\f073\";\n}\ni.icon.comment:before {\n  content: \"\\f075\";\n}\ni.icon.shop:before {\n  content: \"\\f07a\";\n}\ni.icon.comments:before {\n  content: \"\\f086\";\n}\ni.icon.external:before {\n  content: \"\\f08e\";\n}\ni.icon.privacy:before {\n  content: \"\\f084\";\n}\ni.icon.settings:before {\n  content: \"\\f085\";\n}\ni.icon.comments:before {\n  content: \"\\f086\";\n}\ni.icon.external:before {\n  content: \"\\f08e\";\n}\ni.icon.trophy:before {\n  content: \"\\f091\";\n}\ni.icon.payment:before {\n  content: \"\\f09d\";\n}\ni.icon.feed:before {\n  content: \"\\f09e\";\n}\ni.icon.alarm.outline:before {\n  content: \"\\f0a2\";\n}\ni.icon.tasks:before {\n  content: \"\\f0ae\";\n}\ni.icon.cloud:before {\n  content: \"\\f0c2\";\n}\ni.icon.lab:before {\n  content: \"\\f0c3\";\n}\ni.icon.mail:before {\n  content: \"\\f0e0\";\n}\ni.icon.dashboard:before {\n  content: \"\\f0e4\";\n}\ni.icon.comment.outline:before {\n  content: \"\\f0e5\";\n}\ni.icon.comments.outline:before {\n  content: \"\\f0e6\";\n}\ni.icon.sitemap:before {\n  content: \"\\f0e8\";\n}\ni.icon.idea:before {\n  content: \"\\f0eb\";\n}\ni.icon.alarm:before {\n  content: \"\\f0f3\";\n}\ni.icon.terminal:before {\n  content: \"\\f120\";\n}\ni.icon.code:before {\n  content: \"\\f121\";\n}\ni.icon.protect:before {\n  content: \"\\f132\";\n}\ni.icon.calendar.outline:before {\n  content: \"\\f133\";\n}\ni.icon.ticket:before {\n  content: \"\\f145\";\n}\ni.icon.external.square:before {\n  content: \"\\f14c\";\n}\ni.icon.bug:before {\n  content: \"\\f188\";\n}\ni.icon.mail.square:before {\n  content: \"\\f199\";\n}\ni.icon.history:before {\n  content: \"\\f1da\";\n}\ni.icon.options:before {\n  content: \"\\f1de\";\n}\ni.icon.text.telephone:before {\n  content: \"\\f1e4\";\n}\ni.icon.find:before {\n  content: \"\\f1e5\";\n}\ni.icon.wifi:before {\n  content: \"\\f1eb\";\n}\ni.icon.alarm.mute:before {\n  content: \"\\f1f6\";\n}\ni.icon.alarm.mute.outline:before {\n  content: \"\\f1f7\";\n}\ni.icon.copyright:before {\n  content: \"\\f1f9\";\n}\ni.icon.at:before {\n  content: \"\\f1fa\";\n}\ni.icon.eyedropper:before {\n  content: \"\\f1fb\";\n}\ni.icon.paint.brush:before {\n  content: \"\\f1fc\";\n}\ni.icon.heartbeat:before {\n  content: \"\\f21e\";\n}\ni.icon.mouse.pointer:before {\n  content: \"\\f245\";\n}\ni.icon.hourglass.empty:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.start:before {\n  content: \"\\f251\";\n}\ni.icon.hourglass.half:before {\n  content: \"\\f252\";\n}\ni.icon.hourglass.end:before {\n  content: \"\\f253\";\n}\ni.icon.hourglass.full:before {\n  content: \"\\f254\";\n}\ni.icon.hand.pointer:before {\n  content: \"\\f25a\";\n}\ni.icon.trademark:before {\n  content: \"\\f25c\";\n}\ni.icon.registered:before {\n  content: \"\\f25d\";\n}\ni.icon.creative.commons:before {\n  content: \"\\f25e\";\n}\ni.icon.add.to.calendar:before {\n  content: \"\\f271\";\n}\ni.icon.remove.from.calendar:before {\n  content: \"\\f272\";\n}\ni.icon.delete.calendar:before {\n  content: \"\\f273\";\n}\ni.icon.checked.calendar:before {\n  content: \"\\f274\";\n}\ni.icon.industry:before {\n  content: \"\\f275\";\n}\ni.icon.shopping.bag:before {\n  content: \"\\f290\";\n}\ni.icon.shopping.basket:before {\n  content: \"\\f291\";\n}\ni.icon.hashtag:before {\n  content: \"\\f292\";\n}\ni.icon.percent:before {\n  content: \"\\f295\";\n}\n\n/* User Actions */\ni.icon.wait:before {\n  content: \"\\f017\";\n}\ni.icon.download:before {\n  content: \"\\f019\";\n}\ni.icon.repeat:before {\n  content: \"\\f01e\";\n}\ni.icon.refresh:before {\n  content: \"\\f021\";\n}\ni.icon.lock:before {\n  content: \"\\f023\";\n}\ni.icon.bookmark:before {\n  content: \"\\f02e\";\n}\ni.icon.print:before {\n  content: \"\\f02f\";\n}\ni.icon.write:before {\n  content: \"\\f040\";\n}\ni.icon.adjust:before {\n  content: \"\\f042\";\n}\ni.icon.theme:before {\n  content: \"\\f043\";\n}\ni.icon.edit:before {\n  content: \"\\f044\";\n}\ni.icon.external.share:before {\n  content: \"\\f045\";\n}\ni.icon.ban:before {\n  content: \"\\f05e\";\n}\ni.icon.mail.forward:before {\n  content: \"\\f064\";\n}\ni.icon.share:before {\n  content: \"\\f064\";\n}\ni.icon.expand:before {\n  content: \"\\f065\";\n}\ni.icon.compress:before {\n  content: \"\\f066\";\n}\ni.icon.unhide:before {\n  content: \"\\f06e\";\n}\ni.icon.hide:before {\n  content: \"\\f070\";\n}\ni.icon.random:before {\n  content: \"\\f074\";\n}\ni.icon.retweet:before {\n  content: \"\\f079\";\n}\ni.icon.sign.out:before {\n  content: \"\\f08b\";\n}\ni.icon.pin:before {\n  content: \"\\f08d\";\n}\ni.icon.sign.in:before {\n  content: \"\\f090\";\n}\ni.icon.upload:before {\n  content: \"\\f093\";\n}\ni.icon.call:before {\n  content: \"\\f095\";\n}\ni.icon.remove.bookmark:before {\n  content: \"\\f097\";\n}\ni.icon.call.square:before {\n  content: \"\\f098\";\n}\ni.icon.unlock:before {\n  content: \"\\f09c\";\n}\ni.icon.configure:before {\n  content: \"\\f0ad\";\n}\ni.icon.filter:before {\n  content: \"\\f0b0\";\n}\ni.icon.wizard:before {\n  content: \"\\f0d0\";\n}\ni.icon.undo:before {\n  content: \"\\f0e2\";\n}\ni.icon.exchange:before {\n  content: \"\\f0ec\";\n}\ni.icon.cloud.download:before {\n  content: \"\\f0ed\";\n}\ni.icon.cloud.upload:before {\n  content: \"\\f0ee\";\n}\ni.icon.reply:before {\n  content: \"\\f112\";\n}\ni.icon.reply.all:before {\n  content: \"\\f122\";\n}\ni.icon.erase:before {\n  content: \"\\f12d\";\n}\ni.icon.unlock.alternate:before {\n  content: \"\\f13e\";\n}\ni.icon.write.square:before {\n  content: \"\\f14b\";\n}\ni.icon.share.square:before {\n  content: \"\\f14d\";\n}\ni.icon.archive:before {\n  content: \"\\f187\";\n}\ni.icon.translate:before {\n  content: \"\\f1ab\";\n}\ni.icon.recycle:before {\n  content: \"\\f1b8\";\n}\ni.icon.send:before {\n  content: \"\\f1d8\";\n}\ni.icon.send.outline:before {\n  content: \"\\f1d9\";\n}\ni.icon.share.alternate:before {\n  content: \"\\f1e0\";\n}\ni.icon.share.alternate.square:before {\n  content: \"\\f1e1\";\n}\ni.icon.add.to.cart:before {\n  content: \"\\f217\";\n}\ni.icon.in.cart:before {\n  content: \"\\f218\";\n}\ni.icon.add.user:before {\n  content: \"\\f234\";\n}\ni.icon.remove.user:before {\n  content: \"\\f235\";\n}\ni.icon.object.group:before {\n  content: \"\\f247\";\n}\ni.icon.object.ungroup:before {\n  content: \"\\f248\";\n}\ni.icon.clone:before {\n  content: \"\\f24d\";\n}\ni.icon.talk:before {\n  content: \"\\f27a\";\n}\ni.icon.talk.outline:before {\n  content: \"\\f27b\";\n}\n\n/* Messages */\ni.icon.help.circle:before {\n  content: \"\\f059\";\n}\ni.icon.info.circle:before {\n  content: \"\\f05a\";\n}\ni.icon.warning.circle:before {\n  content: \"\\f06a\";\n}\ni.icon.warning.sign:before {\n  content: \"\\f071\";\n}\ni.icon.announcement:before {\n  content: \"\\f0a1\";\n}\ni.icon.help:before {\n  content: \"\\f128\";\n}\ni.icon.info:before {\n  content: \"\\f129\";\n}\ni.icon.warning:before {\n  content: \"\\f12a\";\n}\ni.icon.birthday:before {\n  content: \"\\f1fd\";\n}\ni.icon.help.circle.outline:before {\n  content: \"\\f29c\";\n}\n\n/* Users */\ni.icon.user:before {\n  content: \"\\f007\";\n}\ni.icon.users:before {\n  content: \"\\f0c0\";\n}\ni.icon.doctor:before {\n  content: \"\\f0f0\";\n}\ni.icon.handicap:before {\n  content: \"\\f193\";\n}\ni.icon.student:before {\n  content: \"\\f19d\";\n}\ni.icon.child:before {\n  content: \"\\f1ae\";\n}\ni.icon.spy:before {\n  content: \"\\f21b\";\n}\n\n/* Gender & Sexuality */\ni.icon.female:before {\n  content: \"\\f182\";\n}\ni.icon.male:before {\n  content: \"\\f183\";\n}\ni.icon.woman:before {\n  content: \"\\f221\";\n}\ni.icon.man:before {\n  content: \"\\f222\";\n}\ni.icon.non.binary.transgender:before {\n  content: \"\\f223\";\n}\ni.icon.intergender:before {\n  content: \"\\f224\";\n}\ni.icon.transgender:before {\n  content: \"\\f225\";\n}\ni.icon.lesbian:before {\n  content: \"\\f226\";\n}\ni.icon.gay:before {\n  content: \"\\f227\";\n}\ni.icon.heterosexual:before {\n  content: \"\\f228\";\n}\ni.icon.other.gender:before {\n  content: \"\\f229\";\n}\ni.icon.other.gender.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.other.gender.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.neuter:before {\n  content: \"\\f22c\";\n}\ni.icon.genderless:before {\n  content: \"\\f22d\";\n}\n\n/* Accessibility */\ni.icon.universal.access:before {\n  content: \"\\f29a\";\n}\ni.icon.wheelchair:before {\n  content: \"\\f29b\";\n}\ni.icon.blind:before {\n  content: \"\\f29d\";\n}\ni.icon.audio.description:before {\n  content: \"\\f29e\";\n}\ni.icon.volume.control.phone:before {\n  content: \"\\f2a0\";\n}\ni.icon.braille:before {\n  content: \"\\f2a1\";\n}\ni.icon.asl:before {\n  content: \"\\f2a3\";\n}\ni.icon.assistive.listening.systems:before {\n  content: \"\\f2a2\";\n}\ni.icon.deafness:before {\n  content: \"\\f2a4\";\n}\ni.icon.sign.language:before {\n  content: \"\\f2a7\";\n}\ni.icon.low.vision:before {\n  content: \"\\f2a8\";\n}\n\n/* View Adjustment */\ni.icon.block.layout:before {\n  content: \"\\f009\";\n}\ni.icon.grid.layout:before {\n  content: \"\\f00a\";\n}\ni.icon.list.layout:before {\n  content: \"\\f00b\";\n}\ni.icon.zoom:before {\n  content: \"\\f00e\";\n}\ni.icon.zoom.out:before {\n  content: \"\\f010\";\n}\ni.icon.resize.vertical:before {\n  content: \"\\f07d\";\n}\ni.icon.resize.horizontal:before {\n  content: \"\\f07e\";\n}\ni.icon.maximize:before {\n  content: \"\\f0b2\";\n}\ni.icon.crop:before {\n  content: \"\\f125\";\n}\n\n/* Literal Objects */\ni.icon.cocktail:before {\n  content: \"\\f000\";\n}\ni.icon.road:before {\n  content: \"\\f018\";\n}\ni.icon.flag:before {\n  content: \"\\f024\";\n}\ni.icon.book:before {\n  content: \"\\f02d\";\n}\ni.icon.gift:before {\n  content: \"\\f06b\";\n}\ni.icon.leaf:before {\n  content: \"\\f06c\";\n}\ni.icon.fire:before {\n  content: \"\\f06d\";\n}\ni.icon.plane:before {\n  content: \"\\f072\";\n}\ni.icon.magnet:before {\n  content: \"\\f076\";\n}\ni.icon.lemon:before {\n  content: \"\\f094\";\n}\ni.icon.world:before {\n  content: \"\\f0ac\";\n}\ni.icon.travel:before {\n  content: \"\\f0b1\";\n}\ni.icon.shipping:before {\n  content: \"\\f0d1\";\n}\ni.icon.money:before {\n  content: \"\\f0d6\";\n}\ni.icon.legal:before {\n  content: \"\\f0e3\";\n}\ni.icon.lightning:before {\n  content: \"\\f0e7\";\n}\ni.icon.umbrella:before {\n  content: \"\\f0e9\";\n}\ni.icon.treatment:before {\n  content: \"\\f0f1\";\n}\ni.icon.suitcase:before {\n  content: \"\\f0f2\";\n}\ni.icon.bar:before {\n  content: \"\\f0fc\";\n}\ni.icon.flag.outline:before {\n  content: \"\\f11d\";\n}\ni.icon.flag.checkered:before {\n  content: \"\\f11e\";\n}\ni.icon.puzzle:before {\n  content: \"\\f12e\";\n}\ni.icon.fire.extinguisher:before {\n  content: \"\\f134\";\n}\ni.icon.rocket:before {\n  content: \"\\f135\";\n}\ni.icon.anchor:before {\n  content: \"\\f13d\";\n}\ni.icon.bullseye:before {\n  content: \"\\f140\";\n}\ni.icon.sun:before {\n  content: \"\\f185\";\n}\ni.icon.moon:before {\n  content: \"\\f186\";\n}\ni.icon.fax:before {\n  content: \"\\f1ac\";\n}\ni.icon.life.ring:before {\n  content: \"\\f1cd\";\n}\ni.icon.bomb:before {\n  content: \"\\f1e2\";\n}\ni.icon.soccer:before {\n  content: \"\\f1e3\";\n}\ni.icon.calculator:before {\n  content: \"\\f1ec\";\n}\ni.icon.diamond:before {\n  content: \"\\f219\";\n}\ni.icon.sticky.note:before {\n  content: \"\\f249\";\n}\ni.icon.sticky.note.outline:before {\n  content: \"\\f24a\";\n}\ni.icon.law:before {\n  content: \"\\f24e\";\n}\ni.icon.hand.peace:before {\n  content: \"\\f25b\";\n}\ni.icon.hand.rock:before {\n  content: \"\\f255\";\n}\ni.icon.hand.paper:before {\n  content: \"\\f256\";\n}\ni.icon.hand.scissors:before {\n  content: \"\\f257\";\n}\ni.icon.hand.lizard:before {\n  content: \"\\f258\";\n}\ni.icon.hand.spock:before {\n  content: \"\\f259\";\n}\ni.icon.tv:before {\n  content: \"\\f26c\";\n}\n\n/* Shapes */\ni.icon.crosshairs:before {\n  content: \"\\f05b\";\n}\ni.icon.asterisk:before {\n  content: \"\\f069\";\n}\ni.icon.square.outline:before {\n  content: \"\\f096\";\n}\ni.icon.certificate:before {\n  content: \"\\f0a3\";\n}\ni.icon.square:before {\n  content: \"\\f0c8\";\n}\ni.icon.quote.left:before {\n  content: \"\\f10d\";\n}\ni.icon.quote.right:before {\n  content: \"\\f10e\";\n}\ni.icon.spinner:before {\n  content: \"\\f110\";\n}\ni.icon.circle:before {\n  content: \"\\f111\";\n}\ni.icon.ellipsis.horizontal:before {\n  content: \"\\f141\";\n}\ni.icon.ellipsis.vertical:before {\n  content: \"\\f142\";\n}\ni.icon.cube:before {\n  content: \"\\f1b2\";\n}\ni.icon.cubes:before {\n  content: \"\\f1b3\";\n}\ni.icon.circle.notched:before {\n  content: \"\\f1ce\";\n}\ni.icon.circle.thin:before {\n  content: \"\\f1db\";\n}\n\n/* Item Selection */\ni.icon.checkmark:before {\n  content: \"\\f00c\";\n}\ni.icon.remove:before {\n  content: \"\\f00d\";\n}\ni.icon.checkmark.box:before {\n  content: \"\\f046\";\n}\ni.icon.move:before {\n  content: \"\\f047\";\n}\ni.icon.add.circle:before {\n  content: \"\\f055\";\n}\ni.icon.minus.circle:before {\n  content: \"\\f056\";\n}\ni.icon.remove.circle:before {\n  content: \"\\f057\";\n}\ni.icon.check.circle:before {\n  content: \"\\f058\";\n}\ni.icon.remove.circle.outline:before {\n  content: \"\\f05c\";\n}\ni.icon.check.circle.outline:before {\n  content: \"\\f05d\";\n}\ni.icon.plus:before {\n  content: \"\\f067\";\n}\ni.icon.minus:before {\n  content: \"\\f068\";\n}\ni.icon.add.square:before {\n  content: \"\\f0fe\";\n}\ni.icon.radio:before {\n  content: \"\\f10c\";\n}\ni.icon.minus.square:before {\n  content: \"\\f146\";\n}\ni.icon.minus.square.outline:before {\n  content: \"\\f147\";\n}\ni.icon.check.square:before {\n  content: \"\\f14a\";\n}\ni.icon.selected.radio:before {\n  content: \"\\f192\";\n}\ni.icon.plus.square.outline:before {\n  content: \"\\f196\";\n}\ni.icon.toggle.off:before {\n  content: \"\\f204\";\n}\ni.icon.toggle.on:before {\n  content: \"\\f205\";\n}\n\n/* Media */\ni.icon.film:before {\n  content: \"\\f008\";\n}\ni.icon.sound:before {\n  content: \"\\f025\";\n}\ni.icon.photo:before {\n  content: \"\\f030\";\n}\ni.icon.bar.chart:before {\n  content: \"\\f080\";\n}\ni.icon.camera.retro:before {\n  content: \"\\f083\";\n}\ni.icon.newspaper:before {\n  content: \"\\f1ea\";\n}\ni.icon.area.chart:before {\n  content: \"\\f1fe\";\n}\ni.icon.pie.chart:before {\n  content: \"\\f200\";\n}\ni.icon.line.chart:before {\n  content: \"\\f201\";\n}\n\n/* Pointers */\ni.icon.arrow.circle.outline.down:before {\n  content: \"\\f01a\";\n}\ni.icon.arrow.circle.outline.up:before {\n  content: \"\\f01b\";\n}\ni.icon.chevron.left:before {\n  content: \"\\f053\";\n}\ni.icon.chevron.right:before {\n  content: \"\\f054\";\n}\ni.icon.arrow.left:before {\n  content: \"\\f060\";\n}\ni.icon.arrow.right:before {\n  content: \"\\f061\";\n}\ni.icon.arrow.up:before {\n  content: \"\\f062\";\n}\ni.icon.arrow.down:before {\n  content: \"\\f063\";\n}\ni.icon.chevron.up:before {\n  content: \"\\f077\";\n}\ni.icon.chevron.down:before {\n  content: \"\\f078\";\n}\ni.icon.pointing.right:before {\n  content: \"\\f0a4\";\n}\ni.icon.pointing.left:before {\n  content: \"\\f0a5\";\n}\ni.icon.pointing.up:before {\n  content: \"\\f0a6\";\n}\ni.icon.pointing.down:before {\n  content: \"\\f0a7\";\n}\ni.icon.arrow.circle.left:before {\n  content: \"\\f0a8\";\n}\ni.icon.arrow.circle.right:before {\n  content: \"\\f0a9\";\n}\ni.icon.arrow.circle.up:before {\n  content: \"\\f0aa\";\n}\ni.icon.arrow.circle.down:before {\n  content: \"\\f0ab\";\n}\ni.icon.caret.down:before {\n  content: \"\\f0d7\";\n}\ni.icon.caret.up:before {\n  content: \"\\f0d8\";\n}\ni.icon.caret.left:before {\n  content: \"\\f0d9\";\n}\ni.icon.caret.right:before {\n  content: \"\\f0da\";\n}\ni.icon.angle.double.left:before {\n  content: \"\\f100\";\n}\ni.icon.angle.double.right:before {\n  content: \"\\f101\";\n}\ni.icon.angle.double.up:before {\n  content: \"\\f102\";\n}\ni.icon.angle.double.down:before {\n  content: \"\\f103\";\n}\ni.icon.angle.left:before {\n  content: \"\\f104\";\n}\ni.icon.angle.right:before {\n  content: \"\\f105\";\n}\ni.icon.angle.up:before {\n  content: \"\\f106\";\n}\ni.icon.angle.down:before {\n  content: \"\\f107\";\n}\ni.icon.chevron.circle.left:before {\n  content: \"\\f137\";\n}\ni.icon.chevron.circle.right:before {\n  content: \"\\f138\";\n}\ni.icon.chevron.circle.up:before {\n  content: \"\\f139\";\n}\ni.icon.chevron.circle.down:before {\n  content: \"\\f13a\";\n}\ni.icon.toggle.down:before {\n  content: \"\\f150\";\n}\ni.icon.toggle.up:before {\n  content: \"\\f151\";\n}\ni.icon.toggle.right:before {\n  content: \"\\f152\";\n}\ni.icon.long.arrow.down:before {\n  content: \"\\f175\";\n}\ni.icon.long.arrow.up:before {\n  content: \"\\f176\";\n}\ni.icon.long.arrow.left:before {\n  content: \"\\f177\";\n}\ni.icon.long.arrow.right:before {\n  content: \"\\f178\";\n}\ni.icon.arrow.circle.outline.right:before {\n  content: \"\\f18e\";\n}\ni.icon.arrow.circle.outline.left:before {\n  content: \"\\f190\";\n}\ni.icon.toggle.left:before {\n  content: \"\\f191\";\n}\n\n/* Mobile */\ni.icon.tablet:before {\n  content: \"\\f10a\";\n}\ni.icon.mobile:before {\n  content: \"\\f10b\";\n}\ni.icon.battery.full:before {\n  content: \"\\f240\";\n}\ni.icon.battery.high:before {\n  content: \"\\f241\";\n}\ni.icon.battery.medium:before {\n  content: \"\\f242\";\n}\ni.icon.battery.low:before {\n  content: \"\\f243\";\n}\ni.icon.battery.empty:before {\n  content: \"\\f244\";\n}\n\n/* Computer */\ni.icon.power:before {\n  content: \"\\f011\";\n}\ni.icon.trash.outline:before {\n  content: \"\\f014\";\n}\ni.icon.disk.outline:before {\n  content: \"\\f0a0\";\n}\ni.icon.desktop:before {\n  content: \"\\f108\";\n}\ni.icon.laptop:before {\n  content: \"\\f109\";\n}\ni.icon.game:before {\n  content: \"\\f11b\";\n}\ni.icon.keyboard:before {\n  content: \"\\f11c\";\n}\ni.icon.plug:before {\n  content: \"\\f1e6\";\n}\n\n/* File System */\ni.icon.trash:before {\n  content: \"\\f1f8\";\n}\ni.icon.file.outline:before {\n  content: \"\\f016\";\n}\ni.icon.folder:before {\n  content: \"\\f07b\";\n}\ni.icon.folder.open:before {\n  content: \"\\f07c\";\n}\ni.icon.file.text.outline:before {\n  content: \"\\f0f6\";\n}\ni.icon.folder.outline:before {\n  content: \"\\f114\";\n}\ni.icon.folder.open.outline:before {\n  content: \"\\f115\";\n}\ni.icon.level.up:before {\n  content: \"\\f148\";\n}\ni.icon.level.down:before {\n  content: \"\\f149\";\n}\ni.icon.file:before {\n  content: \"\\f15b\";\n}\ni.icon.file.text:before {\n  content: \"\\f15c\";\n}\ni.icon.file.pdf.outline:before {\n  content: \"\\f1c1\";\n}\ni.icon.file.word.outline:before {\n  content: \"\\f1c2\";\n}\ni.icon.file.excel.outline:before {\n  content: \"\\f1c3\";\n}\ni.icon.file.powerpoint.outline:before {\n  content: \"\\f1c4\";\n}\ni.icon.file.image.outline:before {\n  content: \"\\f1c5\";\n}\ni.icon.file.archive.outline:before {\n  content: \"\\f1c6\";\n}\ni.icon.file.audio.outline:before {\n  content: \"\\f1c7\";\n}\ni.icon.file.video.outline:before {\n  content: \"\\f1c8\";\n}\ni.icon.file.code.outline:before {\n  content: \"\\f1c9\";\n}\n\n/* Technologies */\ni.icon.qrcode:before {\n  content: \"\\f029\";\n}\ni.icon.barcode:before {\n  content: \"\\f02a\";\n}\ni.icon.rss:before {\n  content: \"\\f09e\";\n}\ni.icon.fork:before {\n  content: \"\\f126\";\n}\ni.icon.html5:before {\n  content: \"\\f13b\";\n}\ni.icon.css3:before {\n  content: \"\\f13c\";\n}\ni.icon.rss.square:before {\n  content: \"\\f143\";\n}\ni.icon.openid:before {\n  content: \"\\f19b\";\n}\ni.icon.database:before {\n  content: \"\\f1c0\";\n}\ni.icon.server:before {\n  content: \"\\f233\";\n}\ni.icon.usb:before {\n  content: \"\\f287\";\n}\ni.icon.bluetooth:before {\n  content: \"\\f293\";\n}\ni.icon.bluetooth.alternative:before {\n  content: \"\\f294\";\n}\n\n/* Rating */\ni.icon.heart:before {\n  content: \"\\f004\";\n}\ni.icon.star:before {\n  content: \"\\f005\";\n}\ni.icon.empty.star:before {\n  content: \"\\f006\";\n}\ni.icon.thumbs.outline.up:before {\n  content: \"\\f087\";\n}\ni.icon.thumbs.outline.down:before {\n  content: \"\\f088\";\n}\ni.icon.star.half:before {\n  content: \"\\f089\";\n}\ni.icon.empty.heart:before {\n  content: \"\\f08a\";\n}\ni.icon.smile:before {\n  content: \"\\f118\";\n}\ni.icon.frown:before {\n  content: \"\\f119\";\n}\ni.icon.meh:before {\n  content: \"\\f11a\";\n}\ni.icon.star.half.empty:before {\n  content: \"\\f123\";\n}\ni.icon.thumbs.up:before {\n  content: \"\\f164\";\n}\ni.icon.thumbs.down:before {\n  content: \"\\f165\";\n}\n\n/* Audio */\ni.icon.music:before {\n  content: \"\\f001\";\n}\ni.icon.video.play.outline:before {\n  content: \"\\f01d\";\n}\ni.icon.volume.off:before {\n  content: \"\\f026\";\n}\ni.icon.volume.down:before {\n  content: \"\\f027\";\n}\ni.icon.volume.up:before {\n  content: \"\\f028\";\n}\ni.icon.record:before {\n  content: \"\\f03d\";\n}\ni.icon.step.backward:before {\n  content: \"\\f048\";\n}\ni.icon.fast.backward:before {\n  content: \"\\f049\";\n}\ni.icon.backward:before {\n  content: \"\\f04a\";\n}\ni.icon.play:before {\n  content: \"\\f04b\";\n}\ni.icon.pause:before {\n  content: \"\\f04c\";\n}\ni.icon.stop:before {\n  content: \"\\f04d\";\n}\ni.icon.forward:before {\n  content: \"\\f04e\";\n}\ni.icon.fast.forward:before {\n  content: \"\\f050\";\n}\ni.icon.step.forward:before {\n  content: \"\\f051\";\n}\ni.icon.eject:before {\n  content: \"\\f052\";\n}\ni.icon.unmute:before {\n  content: \"\\f130\";\n}\ni.icon.mute:before {\n  content: \"\\f131\";\n}\ni.icon.video.play:before {\n  content: \"\\f144\";\n}\ni.icon.closed.captioning:before {\n  content: \"\\f20a\";\n}\ni.icon.pause.circle:before {\n  content: \"\\f28b\";\n}\ni.icon.pause.circle.outline:before {\n  content: \"\\f28c\";\n}\ni.icon.stop.circle:before {\n  content: \"\\f28d\";\n}\ni.icon.stop.circle.outline:before {\n  content: \"\\f28e\";\n}\n\n/* Map, Locations, & Transportation */\ni.icon.marker:before {\n  content: \"\\f041\";\n}\ni.icon.coffee:before {\n  content: \"\\f0f4\";\n}\ni.icon.food:before {\n  content: \"\\f0f5\";\n}\ni.icon.building.outline:before {\n  content: \"\\f0f7\";\n}\ni.icon.hospital:before {\n  content: \"\\f0f8\";\n}\ni.icon.emergency:before {\n  content: \"\\f0f9\";\n}\ni.icon.first.aid:before {\n  content: \"\\f0fa\";\n}\ni.icon.military:before {\n  content: \"\\f0fb\";\n}\ni.icon.h:before {\n  content: \"\\f0fd\";\n}\ni.icon.location.arrow:before {\n  content: \"\\f124\";\n}\ni.icon.compass:before {\n  content: \"\\f14e\";\n}\ni.icon.space.shuttle:before {\n  content: \"\\f197\";\n}\ni.icon.university:before {\n  content: \"\\f19c\";\n}\ni.icon.building:before {\n  content: \"\\f1ad\";\n}\ni.icon.paw:before {\n  content: \"\\f1b0\";\n}\ni.icon.spoon:before {\n  content: \"\\f1b1\";\n}\ni.icon.car:before {\n  content: \"\\f1b9\";\n}\ni.icon.taxi:before {\n  content: \"\\f1ba\";\n}\ni.icon.tree:before {\n  content: \"\\f1bb\";\n}\ni.icon.bicycle:before {\n  content: \"\\f206\";\n}\ni.icon.bus:before {\n  content: \"\\f207\";\n}\ni.icon.ship:before {\n  content: \"\\f21a\";\n}\ni.icon.motorcycle:before {\n  content: \"\\f21c\";\n}\ni.icon.street.view:before {\n  content: \"\\f21d\";\n}\ni.icon.hotel:before {\n  content: \"\\f236\";\n}\ni.icon.train:before {\n  content: \"\\f238\";\n}\ni.icon.subway:before {\n  content: \"\\f239\";\n}\ni.icon.map.pin:before {\n  content: \"\\f276\";\n}\ni.icon.map.signs:before {\n  content: \"\\f277\";\n}\ni.icon.map.outline:before {\n  content: \"\\f278\";\n}\ni.icon.map:before {\n  content: \"\\f279\";\n}\n\n/* Tables */\ni.icon.table:before {\n  content: \"\\f0ce\";\n}\ni.icon.columns:before {\n  content: \"\\f0db\";\n}\ni.icon.sort:before {\n  content: \"\\f0dc\";\n}\ni.icon.sort.descending:before {\n  content: \"\\f0dd\";\n}\ni.icon.sort.ascending:before {\n  content: \"\\f0de\";\n}\ni.icon.sort.alphabet.ascending:before {\n  content: \"\\f15d\";\n}\ni.icon.sort.alphabet.descending:before {\n  content: \"\\f15e\";\n}\ni.icon.sort.content.ascending:before {\n  content: \"\\f160\";\n}\ni.icon.sort.content.descending:before {\n  content: \"\\f161\";\n}\ni.icon.sort.numeric.ascending:before {\n  content: \"\\f162\";\n}\ni.icon.sort.numeric.descending:before {\n  content: \"\\f163\";\n}\n\n/* Text Editor */\ni.icon.font:before {\n  content: \"\\f031\";\n}\ni.icon.bold:before {\n  content: \"\\f032\";\n}\ni.icon.italic:before {\n  content: \"\\f033\";\n}\ni.icon.text.height:before {\n  content: \"\\f034\";\n}\ni.icon.text.width:before {\n  content: \"\\f035\";\n}\ni.icon.align.left:before {\n  content: \"\\f036\";\n}\ni.icon.align.center:before {\n  content: \"\\f037\";\n}\ni.icon.align.right:before {\n  content: \"\\f038\";\n}\ni.icon.align.justify:before {\n  content: \"\\f039\";\n}\ni.icon.list:before {\n  content: \"\\f03a\";\n}\ni.icon.outdent:before {\n  content: \"\\f03b\";\n}\ni.icon.indent:before {\n  content: \"\\f03c\";\n}\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\ni.icon.cut:before {\n  content: \"\\f0c4\";\n}\ni.icon.copy:before {\n  content: \"\\f0c5\";\n}\ni.icon.attach:before {\n  content: \"\\f0c6\";\n}\ni.icon.save:before {\n  content: \"\\f0c7\";\n}\ni.icon.content:before {\n  content: \"\\f0c9\";\n}\ni.icon.unordered.list:before {\n  content: \"\\f0ca\";\n}\ni.icon.ordered.list:before {\n  content: \"\\f0cb\";\n}\ni.icon.strikethrough:before {\n  content: \"\\f0cc\";\n}\ni.icon.underline:before {\n  content: \"\\f0cd\";\n}\ni.icon.paste:before {\n  content: \"\\f0ea\";\n}\ni.icon.unlinkify:before {\n  content: \"\\f127\";\n}\ni.icon.superscript:before {\n  content: \"\\f12b\";\n}\ni.icon.subscript:before {\n  content: \"\\f12c\";\n}\ni.icon.header:before {\n  content: \"\\f1dc\";\n}\ni.icon.paragraph:before {\n  content: \"\\f1dd\";\n}\ni.icon.text.cursor:before {\n  content: \"\\f246\";\n}\n\n/* Currency */\ni.icon.euro:before {\n  content: \"\\f153\";\n}\ni.icon.pound:before {\n  content: \"\\f154\";\n}\ni.icon.dollar:before {\n  content: \"\\f155\";\n}\ni.icon.rupee:before {\n  content: \"\\f156\";\n}\ni.icon.yen:before {\n  content: \"\\f157\";\n}\ni.icon.ruble:before {\n  content: \"\\f158\";\n}\ni.icon.won:before {\n  content: \"\\f159\";\n}\ni.icon.bitcoin:before {\n  content: \"\\f15a\";\n}\ni.icon.lira:before {\n  content: \"\\f195\";\n}\ni.icon.shekel:before {\n  content: \"\\f20b\";\n}\n\n/* Payment Options */\ni.icon.paypal:before {\n  content: \"\\f1ed\";\n}\ni.icon.google.wallet:before {\n  content: \"\\f1ee\";\n}\ni.icon.visa:before {\n  content: \"\\f1f0\";\n}\ni.icon.mastercard:before {\n  content: \"\\f1f1\";\n}\ni.icon.discover:before {\n  content: \"\\f1f2\";\n}\ni.icon.american.express:before {\n  content: \"\\f1f3\";\n}\ni.icon.paypal.card:before {\n  content: \"\\f1f4\";\n}\ni.icon.stripe:before {\n  content: \"\\f1f5\";\n}\ni.icon.japan.credit.bureau:before {\n  content: \"\\f24b\";\n}\ni.icon.diners.club:before {\n  content: \"\\f24c\";\n}\ni.icon.credit.card.alternative:before {\n  content: \"\\f283\";\n}\n/* Networks and Websites*/\ni.icon.twitter.square:before {\n  content: \"\\f081\";\n}\ni.icon.facebook.square:before {\n  content: \"\\f082\";\n}\ni.icon.linkedin.square:before {\n  content: \"\\f08c\";\n}\ni.icon.github.square:before {\n  content: \"\\f092\";\n}\ni.icon.twitter:before {\n  content: \"\\f099\";\n}\ni.icon.facebook.f:before {\n  content: \"\\f09a\";\n}\ni.icon.github:before {\n  content: \"\\f09b\";\n}\ni.icon.pinterest:before {\n  content: \"\\f0d2\";\n}\ni.icon.pinterest.square:before {\n  content: \"\\f0d3\";\n}\ni.icon.google.plus.square:before {\n  content: \"\\f0d4\";\n}\ni.icon.google.plus:before {\n  content: \"\\f0d5\";\n}\ni.icon.linkedin:before {\n  content: \"\\f0e1\";\n}\ni.icon.github.alternate:before {\n  content: \"\\f113\";\n}\ni.icon.maxcdn:before {\n  content: \"\\f136\";\n}\ni.icon.youtube.square:before {\n  content: \"\\f166\";\n}\ni.icon.youtube:before {\n  content: \"\\f167\";\n}\ni.icon.xing:before {\n  content: \"\\f168\";\n}\ni.icon.xing.square:before {\n  content: \"\\f169\";\n}\ni.icon.youtube.play:before {\n  content: \"\\f16a\";\n}\ni.icon.dropbox:before {\n  content: \"\\f16b\";\n}\ni.icon.stack.overflow:before {\n  content: \"\\f16c\";\n}\ni.icon.instagram:before {\n  content: \"\\f16d\";\n}\ni.icon.flickr:before {\n  content: \"\\f16e\";\n}\ni.icon.adn:before {\n  content: \"\\f170\";\n}\ni.icon.bitbucket:before {\n  content: \"\\f171\";\n}\ni.icon.bitbucket.square:before {\n  content: \"\\f172\";\n}\ni.icon.tumblr:before {\n  content: \"\\f173\";\n}\ni.icon.tumblr.square:before {\n  content: \"\\f174\";\n}\ni.icon.apple:before {\n  content: \"\\f179\";\n}\ni.icon.windows:before {\n  content: \"\\f17a\";\n}\ni.icon.android:before {\n  content: \"\\f17b\";\n}\ni.icon.linux:before {\n  content: \"\\f17c\";\n}\ni.icon.dribble:before {\n  content: \"\\f17d\";\n}\ni.icon.skype:before {\n  content: \"\\f17e\";\n}\ni.icon.foursquare:before {\n  content: \"\\f180\";\n}\ni.icon.trello:before {\n  content: \"\\f181\";\n}\ni.icon.gittip:before {\n  content: \"\\f184\";\n}\ni.icon.vk:before {\n  content: \"\\f189\";\n}\ni.icon.weibo:before {\n  content: \"\\f18a\";\n}\ni.icon.renren:before {\n  content: \"\\f18b\";\n}\ni.icon.pagelines:before {\n  content: \"\\f18c\";\n}\ni.icon.stack.exchange:before {\n  content: \"\\f18d\";\n}\ni.icon.vimeo.square:before {\n  content: \"\\f194\";\n}\ni.icon.slack:before {\n  content: \"\\f198\";\n}\ni.icon.wordpress:before {\n  content: \"\\f19a\";\n}\ni.icon.yahoo:before {\n  content: \"\\f19e\";\n}\ni.icon.google:before {\n  content: \"\\f1a0\";\n}\ni.icon.reddit:before {\n  content: \"\\f1a1\";\n}\ni.icon.reddit.square:before {\n  content: \"\\f1a2\";\n}\ni.icon.stumbleupon.circle:before {\n  content: \"\\f1a3\";\n}\ni.icon.stumbleupon:before {\n  content: \"\\f1a4\";\n}\ni.icon.delicious:before {\n  content: \"\\f1a5\";\n}\ni.icon.digg:before {\n  content: \"\\f1a6\";\n}\ni.icon.pied.piper:before {\n  content: \"\\f1a7\";\n}\ni.icon.pied.piper.alternate:before {\n  content: \"\\f1a8\";\n}\ni.icon.drupal:before {\n  content: \"\\f1a9\";\n}\ni.icon.joomla:before {\n  content: \"\\f1aa\";\n}\ni.icon.behance:before {\n  content: \"\\f1b4\";\n}\ni.icon.behance.square:before {\n  content: \"\\f1b5\";\n}\ni.icon.steam:before {\n  content: \"\\f1b6\";\n}\ni.icon.steam.square:before {\n  content: \"\\f1b7\";\n}\ni.icon.spotify:before {\n  content: \"\\f1bc\";\n}\ni.icon.deviantart:before {\n  content: \"\\f1bd\";\n}\ni.icon.soundcloud:before {\n  content: \"\\f1be\";\n}\ni.icon.vine:before {\n  content: \"\\f1ca\";\n}\ni.icon.codepen:before {\n  content: \"\\f1cb\";\n}\ni.icon.jsfiddle:before {\n  content: \"\\f1cc\";\n}\ni.icon.rebel:before {\n  content: \"\\f1d0\";\n}\ni.icon.empire:before {\n  content: \"\\f1d1\";\n}\ni.icon.git.square:before {\n  content: \"\\f1d2\";\n}\ni.icon.git:before {\n  content: \"\\f1d3\";\n}\ni.icon.hacker.news:before {\n  content: \"\\f1d4\";\n}\ni.icon.tencent.weibo:before {\n  content: \"\\f1d5\";\n}\ni.icon.qq:before {\n  content: \"\\f1d6\";\n}\ni.icon.wechat:before {\n  content: \"\\f1d7\";\n}\ni.icon.slideshare:before {\n  content: \"\\f1e7\";\n}\ni.icon.twitch:before {\n  content: \"\\f1e8\";\n}\ni.icon.yelp:before {\n  content: \"\\f1e9\";\n}\ni.icon.lastfm:before {\n  content: \"\\f202\";\n}\ni.icon.lastfm.square:before {\n  content: \"\\f203\";\n}\ni.icon.ioxhost:before {\n  content: \"\\f208\";\n}\ni.icon.angellist:before {\n  content: \"\\f209\";\n}\ni.icon.meanpath:before {\n  content: \"\\f20c\";\n}\ni.icon.buysellads:before {\n  content: \"\\f20d\";\n}\ni.icon.connectdevelop:before {\n  content: \"\\f20e\";\n}\ni.icon.dashcube:before {\n  content: \"\\f210\";\n}\ni.icon.forumbee:before {\n  content: \"\\f211\";\n}\ni.icon.leanpub:before {\n  content: \"\\f212\";\n}\ni.icon.sellsy:before {\n  content: \"\\f213\";\n}\ni.icon.shirtsinbulk:before {\n  content: \"\\f214\";\n}\ni.icon.simplybuilt:before {\n  content: \"\\f215\";\n}\ni.icon.skyatlas:before {\n  content: \"\\f216\";\n}\ni.icon.facebook:before {\n  content: \"\\f230\";\n}\ni.icon.pinterest:before {\n  content: \"\\f231\";\n}\ni.icon.whatsapp:before {\n  content: \"\\f232\";\n}\ni.icon.viacoin:before {\n  content: \"\\f237\";\n}\ni.icon.medium:before {\n  content: \"\\f23a\";\n}\ni.icon.y.combinator:before {\n  content: \"\\f23b\";\n}\ni.icon.optinmonster:before {\n  content: \"\\f23c\";\n}\ni.icon.opencart:before {\n  content: \"\\f23d\";\n}\ni.icon.expeditedssl:before {\n  content: \"\\f23e\";\n}\ni.icon.gg:before {\n  content: \"\\f260\";\n}\ni.icon.gg.circle:before {\n  content: \"\\f261\";\n}\ni.icon.tripadvisor:before {\n  content: \"\\f262\";\n}\ni.icon.odnoklassniki:before {\n  content: \"\\f263\";\n}\ni.icon.odnoklassniki.square:before {\n  content: \"\\f264\";\n}\ni.icon.pocket:before {\n  content: \"\\f265\";\n}\ni.icon.wikipedia:before {\n  content: \"\\f266\";\n}\ni.icon.safari:before {\n  content: \"\\f267\";\n}\ni.icon.chrome:before {\n  content: \"\\f268\";\n}\ni.icon.firefox:before {\n  content: \"\\f269\";\n}\ni.icon.opera:before {\n  content: \"\\f26a\";\n}\ni.icon.internet.explorer:before {\n  content: \"\\f26b\";\n}\ni.icon.contao:before {\n  content: \"\\f26d\";\n}\ni.icon.\\35 00px:before {\n  content: \"\\f26e\";\n}\ni.icon.amazon:before {\n  content: \"\\f270\";\n}\ni.icon.houzz:before {\n  content: \"\\f27c\";\n}\ni.icon.vimeo:before {\n  content: \"\\f27d\";\n}\ni.icon.black.tie:before {\n  content: \"\\f27e\";\n}\ni.icon.fonticons:before {\n  content: \"\\f280\";\n}\ni.icon.reddit.alien:before {\n  content: \"\\f281\";\n}\ni.icon.microsoft.edge:before {\n  content: \"\\f282\";\n}\ni.icon.codiepie:before {\n  content: \"\\f284\";\n}\ni.icon.modx:before {\n  content: \"\\f285\";\n}\ni.icon.fort.awesome:before {\n  content: \"\\f286\";\n}\ni.icon.product.hunt:before {\n  content: \"\\f288\";\n}\ni.icon.mixcloud:before {\n  content: \"\\f289\";\n}\ni.icon.scribd:before {\n  content: \"\\f28a\";\n}\ni.icon.gitlab:before {\n  content: \"\\f296\";\n}\ni.icon.wpbeginner:before {\n  content: \"\\f297\";\n}\ni.icon.wpforms:before {\n  content: \"\\f298\";\n}\ni.icon.envira.gallery:before {\n  content: \"\\f299\";\n}\ni.icon.glide:before {\n  content: \"\\f2a5\";\n}\ni.icon.glide.g:before {\n  content: \"\\f2a6\";\n}\ni.icon.viadeo:before {\n  content: \"\\f2a9\";\n}\ni.icon.viadeo.square:before {\n  content: \"\\f2aa\";\n}\ni.icon.snapchat:before {\n  content: \"\\f2ab\";\n}\ni.icon.snapchat.ghost:before {\n  content: \"\\f2ac\";\n}\ni.icon.snapchat.square:before {\n  content: \"\\f2ad\";\n}\ni.icon.pied.piper.hat:before {\n  content: \"\\f2ae\";\n}\ni.icon.first.order:before {\n  content: \"\\f2b0\";\n}\ni.icon.yoast:before {\n  content: \"\\f2b1\";\n}\ni.icon.themeisle:before {\n  content: \"\\f2b2\";\n}\ni.icon.google.plus.circle:before {\n  content: \"\\f2b3\";\n}\ni.icon.font.awesome:before {\n  content: \"\\f2b4\";\n}\n\n\n/*******************************\n            Aliases\n*******************************/\n\ni.icon.like:before {\n  content: \"\\f004\";\n}\ni.icon.favorite:before {\n  content: \"\\f005\";\n}\ni.icon.video:before {\n  content: \"\\f008\";\n}\ni.icon.check:before {\n  content: \"\\f00c\";\n}\ni.icon.close:before {\n  content: \"\\f00d\";\n}\ni.icon.cancel:before {\n  content: \"\\f00d\";\n}\ni.icon.delete:before {\n  content: \"\\f00d\";\n}\ni.icon.x:before {\n  content: \"\\f00d\";\n}\ni.icon.zoom.in:before {\n  content: \"\\f00e\";\n}\ni.icon.magnify:before {\n  content: \"\\f00e\";\n}\ni.icon.shutdown:before {\n  content: \"\\f011\";\n}\ni.icon.clock:before {\n  content: \"\\f017\";\n}\ni.icon.time:before {\n  content: \"\\f017\";\n}\ni.icon.play.circle.outline:before {\n  content: \"\\f01d\";\n}\ni.icon.headphone:before {\n  content: \"\\f025\";\n}\ni.icon.camera:before {\n  content: \"\\f030\";\n}\ni.icon.video.camera:before {\n  content: \"\\f03d\";\n}\ni.icon.picture:before {\n  content: \"\\f03e\";\n}\ni.icon.pencil:before {\n  content: \"\\f040\";\n}\ni.icon.compose:before {\n  content: \"\\f040\";\n}\ni.icon.point:before {\n  content: \"\\f041\";\n}\ni.icon.tint:before {\n  content: \"\\f043\";\n}\ni.icon.signup:before {\n  content: \"\\f044\";\n}\ni.icon.plus.circle:before {\n  content: \"\\f055\";\n}\ni.icon.question.circle:before {\n  content: \"\\f059\";\n}\ni.icon.dont:before {\n  content: \"\\f05e\";\n}\ni.icon.minimize:before {\n  content: \"\\f066\";\n}\ni.icon.add:before {\n  content: \"\\f067\";\n}\ni.icon.exclamation.circle:before {\n  content: \"\\f06a\";\n}\ni.icon.attention:before {\n  content: \"\\f06a\";\n}\ni.icon.eye:before {\n  content: \"\\f06e\";\n}\ni.icon.exclamation.triangle:before {\n  content: \"\\f071\";\n}\ni.icon.shuffle:before {\n  content: \"\\f074\";\n}\ni.icon.chat:before {\n  content: \"\\f075\";\n}\ni.icon.cart:before {\n  content: \"\\f07a\";\n}\ni.icon.shopping.cart:before {\n  content: \"\\f07a\";\n}\ni.icon.bar.graph:before {\n  content: \"\\f080\";\n}\ni.icon.key:before {\n  content: \"\\f084\";\n}\ni.icon.cogs:before {\n  content: \"\\f085\";\n}\ni.icon.discussions:before {\n  content: \"\\f086\";\n}\ni.icon.like.outline:before {\n  content: \"\\f087\";\n}\ni.icon.dislike.outline:before {\n  content: \"\\f088\";\n}\ni.icon.heart.outline:before {\n  content: \"\\f08a\";\n}\ni.icon.log.out:before {\n  content: \"\\f08b\";\n}\ni.icon.thumb.tack:before {\n  content: \"\\f08d\";\n}\ni.icon.winner:before {\n  content: \"\\f091\";\n}\ni.icon.phone:before {\n  content: \"\\f095\";\n}\ni.icon.bookmark.outline:before {\n  content: \"\\f097\";\n}\ni.icon.phone.square:before {\n  content: \"\\f098\";\n}\ni.icon.credit.card:before {\n  content: \"\\f09d\";\n}\ni.icon.hdd.outline:before {\n  content: \"\\f0a0\";\n}\ni.icon.bullhorn:before {\n  content: \"\\f0a1\";\n}\ni.icon.bell.outline:before {\n  content: \"\\f0a2\";\n}\ni.icon.hand.outline.right:before {\n  content: \"\\f0a4\";\n}\ni.icon.hand.outline.left:before {\n  content: \"\\f0a5\";\n}\ni.icon.hand.outline.up:before {\n  content: \"\\f0a6\";\n}\ni.icon.hand.outline.down:before {\n  content: \"\\f0a7\";\n}\ni.icon.globe:before {\n  content: \"\\f0ac\";\n}\ni.icon.wrench:before {\n  content: \"\\f0ad\";\n}\ni.icon.briefcase:before {\n  content: \"\\f0b1\";\n}\ni.icon.group:before {\n  content: \"\\f0c0\";\n}\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\ni.icon.chain:before {\n  content: \"\\f0c1\";\n}\ni.icon.flask:before {\n  content: \"\\f0c3\";\n}\ni.icon.sidebar:before {\n  content: \"\\f0c9\";\n}\ni.icon.bars:before {\n  content: \"\\f0c9\";\n}\ni.icon.list.ul:before {\n  content: \"\\f0ca\";\n}\ni.icon.list.ol:before {\n  content: \"\\f0cb\";\n}\ni.icon.numbered.list:before {\n  content: \"\\f0cb\";\n}\ni.icon.magic:before {\n  content: \"\\f0d0\";\n}\ni.icon.truck:before {\n  content: \"\\f0d1\";\n}\ni.icon.currency:before {\n  content: \"\\f0d6\";\n}\ni.icon.triangle.down:before {\n  content: \"\\f0d7\";\n}\ni.icon.dropdown:before {\n  content: \"\\f0d7\";\n}\ni.icon.triangle.up:before {\n  content: \"\\f0d8\";\n}\ni.icon.triangle.left:before {\n  content: \"\\f0d9\";\n}\ni.icon.triangle.right:before {\n  content: \"\\f0da\";\n}\ni.icon.envelope:before {\n  content: \"\\f0e0\";\n}\ni.icon.conversation:before {\n  content: \"\\f0e6\";\n}\ni.icon.rain:before {\n  content: \"\\f0e9\";\n}\ni.icon.clipboard:before {\n  content: \"\\f0ea\";\n}\ni.icon.lightbulb:before {\n  content: \"\\f0eb\";\n}\ni.icon.bell:before {\n  content: \"\\f0f3\";\n}\ni.icon.ambulance:before {\n  content: \"\\f0f9\";\n}\ni.icon.medkit:before {\n  content: \"\\f0fa\";\n}\ni.icon.fighter.jet:before {\n  content: \"\\f0fb\";\n}\ni.icon.beer:before {\n  content: \"\\f0fc\";\n}\ni.icon.plus.square:before {\n  content: \"\\f0fe\";\n}\ni.icon.computer:before {\n  content: \"\\f108\";\n}\ni.icon.circle.outline:before {\n  content: \"\\f10c\";\n}\ni.icon.gamepad:before {\n  content: \"\\f11b\";\n}\ni.icon.star.half.full:before {\n  content: \"\\f123\";\n}\ni.icon.broken.chain:before {\n  content: \"\\f127\";\n}\ni.icon.question:before {\n  content: \"\\f128\";\n}\ni.icon.exclamation:before {\n  content: \"\\f12a\";\n}\ni.icon.eraser:before {\n  content: \"\\f12d\";\n}\ni.icon.microphone:before {\n  content: \"\\f130\";\n}\ni.icon.microphone.slash:before {\n  content: \"\\f131\";\n}\ni.icon.shield:before {\n  content: \"\\f132\";\n}\ni.icon.target:before {\n  content: \"\\f140\";\n}\ni.icon.play.circle:before {\n  content: \"\\f144\";\n}\ni.icon.pencil.square:before {\n  content: \"\\f14b\";\n}\ni.icon.eur:before {\n  content: \"\\f153\";\n}\ni.icon.gbp:before {\n  content: \"\\f154\";\n}\ni.icon.usd:before {\n  content: \"\\f155\";\n}\ni.icon.inr:before {\n  content: \"\\f156\";\n}\ni.icon.cny:before {\n  content: \"\\f157\";\n}\ni.icon.rmb:before {\n  content: \"\\f157\";\n}\ni.icon.jpy:before {\n  content: \"\\f157\";\n}\ni.icon.rouble:before {\n  content: \"\\f158\";\n}\ni.icon.rub:before {\n  content: \"\\f158\";\n}\ni.icon.krw:before {\n  content: \"\\f159\";\n}\ni.icon.btc:before {\n  content: \"\\f15a\";\n}\ni.icon.gratipay:before {\n  content: \"\\f184\";\n}\ni.icon.zip:before {\n  content: \"\\f187\";\n}\ni.icon.dot.circle.outline:before {\n  content: \"\\f192\";\n}\ni.icon.try:before {\n  content: \"\\f195\";\n}\ni.icon.graduation:before {\n  content: \"\\f19d\";\n}\ni.icon.circle.outline:before {\n  content: \"\\f1db\";\n}\ni.icon.sliders:before {\n  content: \"\\f1de\";\n}\ni.icon.weixin:before {\n  content: \"\\f1d7\";\n}\ni.icon.tty:before {\n  content: \"\\f1e4\";\n}\ni.icon.teletype:before {\n  content: \"\\f1e4\";\n}\ni.icon.binoculars:before {\n  content: \"\\f1e5\";\n}\ni.icon.power.cord:before {\n  content: \"\\f1e6\";\n}\ni.icon.wi-fi:before {\n  content: \"\\f1eb\";\n}\ni.icon.visa.card:before {\n  content: \"\\f1f0\";\n}\ni.icon.mastercard.card:before {\n  content: \"\\f1f1\";\n}\ni.icon.discover.card:before {\n  content: \"\\f1f2\";\n}\ni.icon.amex:before {\n  content: \"\\f1f3\";\n}\ni.icon.american.express.card:before {\n  content: \"\\f1f3\";\n}\ni.icon.stripe.card:before {\n  content: \"\\f1f5\";\n}\ni.icon.bell.slash:before {\n  content: \"\\f1f6\";\n}\ni.icon.bell.slash.outline:before {\n  content: \"\\f1f7\";\n}\ni.icon.area.graph:before {\n  content: \"\\f1fe\";\n}\ni.icon.pie.graph:before {\n  content: \"\\f200\";\n}\ni.icon.line.graph:before {\n  content: \"\\f201\";\n}\ni.icon.cc:before {\n  content: \"\\f20a\";\n}\ni.icon.sheqel:before {\n  content: \"\\f20b\";\n}\ni.icon.ils:before {\n  content: \"\\f20b\";\n}\ni.icon.plus.cart:before {\n  content: \"\\f217\";\n}\ni.icon.arrow.down.cart:before {\n  content: \"\\f218\";\n}\ni.icon.detective:before {\n  content: \"\\f21b\";\n}\ni.icon.venus:before {\n  content: \"\\f221\";\n}\ni.icon.mars:before {\n  content: \"\\f222\";\n}\ni.icon.mercury:before {\n  content: \"\\f223\";\n}\ni.icon.intersex:before {\n  content: \"\\f224\";\n}\ni.icon.venus.double:before {\n  content: \"\\f226\";\n}\ni.icon.female.homosexual:before {\n  content: \"\\f226\";\n}\ni.icon.mars.double:before {\n  content: \"\\f227\";\n}\ni.icon.male.homosexual:before {\n  content: \"\\f227\";\n}\ni.icon.venus.mars:before {\n  content: \"\\f228\";\n}\ni.icon.mars.stroke:before {\n  content: \"\\f229\";\n}\ni.icon.mars.alternate:before {\n  content: \"\\f229\";\n}\ni.icon.mars.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.mars.stroke.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.mars.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.mars.stroke.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.asexual:before {\n  content: \"\\f22d\";\n}\ni.icon.facebook.official:before {\n  content: \"\\f230\";\n}\ni.icon.user.plus:before {\n  content: \"\\f234\";\n}\ni.icon.user.times:before {\n  content: \"\\f235\";\n}\ni.icon.user.close:before {\n  content: \"\\f235\";\n}\ni.icon.user.cancel:before {\n  content: \"\\f235\";\n}\ni.icon.user.delete:before {\n  content: \"\\f235\";\n}\ni.icon.user.x:before {\n  content: \"\\f235\";\n}\ni.icon.bed:before {\n  content: \"\\f236\";\n}\ni.icon.yc:before {\n  content: \"\\f23b\";\n}\ni.icon.ycombinator:before {\n  content: \"\\f23b\";\n}\ni.icon.battery.four:before {\n  content: \"\\f240\";\n}\ni.icon.battery.three:before {\n  content: \"\\f241\";\n}\ni.icon.battery.three.quarters:before {\n  content: \"\\f241\";\n}\ni.icon.battery.two:before {\n  content: \"\\f242\";\n}\ni.icon.battery.half:before {\n  content: \"\\f242\";\n}\ni.icon.battery.one:before {\n  content: \"\\f243\";\n}\ni.icon.battery.quarter:before {\n  content: \"\\f243\";\n}\ni.icon.battery.zero:before {\n  content: \"\\f244\";\n}\ni.icon.i.cursor:before {\n  content: \"\\f246\";\n}\ni.icon.jcb:before {\n  content: \"\\f24b\";\n}\ni.icon.japan.credit.bureau.card:before {\n  content: \"\\f24b\";\n}\ni.icon.diners.club.card:before {\n  content: \"\\f24c\";\n}\ni.icon.balance:before {\n  content: \"\\f24e\";\n}\ni.icon.hourglass.outline:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.zero:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.one:before {\n  content: \"\\f251\";\n}\ni.icon.hourglass.two:before {\n  content: \"\\f252\";\n}\ni.icon.hourglass.three:before {\n  content: \"\\f253\";\n}\ni.icon.hourglass.four:before {\n  content: \"\\f254\";\n}\ni.icon.grab:before {\n  content: \"\\f255\";\n}\ni.icon.hand.victory:before {\n  content: \"\\f25b\";\n}\ni.icon.tm:before {\n  content: \"\\f25c\";\n}\ni.icon.r.circle:before {\n  content: \"\\f25d\";\n}\ni.icon.television:before {\n  content: \"\\f26c\";\n}\ni.icon.five.hundred.pixels:before {\n  content: \"\\f26e\";\n}\ni.icon.calendar.plus:before {\n  content: \"\\f271\";\n}\ni.icon.calendar.minus:before {\n  content: \"\\f272\";\n}\ni.icon.calendar.times:before {\n  content: \"\\f273\";\n}\ni.icon.calendar.check:before {\n  content: \"\\f274\";\n}\ni.icon.factory:before {\n  content: \"\\f275\";\n}\ni.icon.commenting:before {\n  content: \"\\f27a\";\n}\ni.icon.commenting.outline:before {\n  content: \"\\f27b\";\n}\ni.icon.edge:before {\n  content: \"\\f282\";\n}\ni.icon.ms.edge:before {\n  content: \"\\f282\";\n}\ni.icon.wordpress.beginner:before {\n  content: \"\\f297\";\n}\ni.icon.wordpress.forms:before {\n  content: \"\\f298\";\n}\ni.icon.envira:before {\n  content: \"\\f299\";\n}\ni.icon.question.circle.outline:before {\n  content: \"\\f29c\";\n}\ni.icon.assistive.listening.devices:before {\n  content: \"\\f2a2\";\n}\ni.icon.als:before {\n  content: \"\\f2a2\";\n}\ni.icon.ald:before {\n  content: \"\\f2a2\";\n}\ni.icon.asl.interpreting:before {\n  content: \"\\f2a3\";\n}\ni.icon.deaf:before {\n  content: \"\\f2a4\";\n}\ni.icon.american.sign.language.interpreting:before {\n  content: \"\\f2a3\";\n}\ni.icon.hard.of.hearing:before {\n  content: \"\\f2a4\";\n}\ni.icon.signing:before {\n  content: \"\\f2a7\";\n}\ni.icon.new.pied.piper:before {\n  content: \"\\f2ae\";\n}\ni.icon.theme.isle:before {\n  content: \"\\f2b2\";\n}\ni.icon.google.plus.official:before {\n  content: \"\\f2b3\";\n}\ni.icon.fa:before {\n  content: \"\\f2b4\";\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/image.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Image\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Image\n*******************************/\n\n.ui.image {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  max-width: 100%;\n  background-color: transparent;\n}\nimg.ui.image {\n  display: block;\n}\n.ui.image svg,\n.ui.image img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.hidden.images,\n.ui.hidden.image {\n  display: none;\n}\n.ui.hidden.transition.images,\n.ui.hidden.transition.image {\n  display: block;\n  visibility: hidden;\n}\n.ui.disabled.images,\n.ui.disabled.image {\n  cursor: default;\n  opacity: 0.45;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.image,\n.ui.inline.image svg,\n.ui.inline.image img {\n  display: inline-block;\n}\n\n/*------------------\n  Vertical Aligned\n-------------------*/\n\n.ui.top.aligned.images .image,\n.ui.top.aligned.image,\n.ui.top.aligned.image svg,\n.ui.top.aligned.image img {\n  display: inline-block;\n  vertical-align: top;\n}\n.ui.middle.aligned.images .image,\n.ui.middle.aligned.image,\n.ui.middle.aligned.image svg,\n.ui.middle.aligned.image img {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.bottom.aligned.images .image,\n.ui.bottom.aligned.image,\n.ui.bottom.aligned.image svg,\n.ui.bottom.aligned.image img {\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n/*--------------\n     Rounded\n---------------*/\n\n.ui.rounded.images .image,\n.ui.rounded.image,\n.ui.rounded.images .image > *,\n.ui.rounded.image > * {\n  border-radius: 0.3125em;\n}\n\n/*--------------\n    Bordered\n---------------*/\n\n.ui.bordered.images .image,\n.ui.bordered.images img,\n.ui.bordered.images svg,\n.ui.bordered.image img,\n.ui.bordered.image svg,\nimg.ui.bordered.image {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.images,\n.ui.circular.image {\n  overflow: hidden;\n}\n.ui.circular.images .image,\n.ui.circular.image,\n.ui.circular.images .image > *,\n.ui.circular.image > * {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.images,\n.ui.fluid.image,\n.ui.fluid.images img,\n.ui.fluid.images svg,\n.ui.fluid.image svg,\n.ui.fluid.image img {\n  display: block;\n  width: 100%;\n  height: auto;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.avatar.images .image,\n.ui.avatar.images img,\n.ui.avatar.images svg,\n.ui.avatar.image img,\n.ui.avatar.image svg,\n.ui.avatar.image {\n  margin-right: 0.25em;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*-------------------\n       Spaced\n--------------------*/\n\n.ui.spaced.image {\n  display: inline-block !important;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n.ui[class*=\"left spaced\"].image {\n  margin-left: 0.5em;\n  margin-right: 0em;\n}\n.ui[class*=\"right spaced\"].image {\n  margin-left: 0em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.image,\n.ui.floated.images {\n  float: left;\n  margin-right: 1em;\n  margin-bottom: 1em;\n}\n.ui.right.floated.images,\n.ui.right.floated.image {\n  float: right;\n  margin-right: 0em;\n  margin-bottom: 1em;\n  margin-left: 1em;\n}\n.ui.floated.images:last-child,\n.ui.floated.image:last-child {\n  margin-bottom: 0em;\n}\n.ui.centered.images,\n.ui.centered.image {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.images .image,\n.ui.mini.images img,\n.ui.mini.images svg,\n.ui.mini.image {\n  width: 35px;\n  height: auto;\n  font-size: 0.78571429rem;\n}\n.ui.tiny.images .image,\n.ui.tiny.images img,\n.ui.tiny.images svg,\n.ui.tiny.image {\n  width: 80px;\n  height: auto;\n  font-size: 0.85714286rem;\n}\n.ui.small.images .image,\n.ui.small.images img,\n.ui.small.images svg,\n.ui.small.image {\n  width: 150px;\n  height: auto;\n  font-size: 0.92857143rem;\n}\n.ui.medium.images .image,\n.ui.medium.images img,\n.ui.medium.images svg,\n.ui.medium.image {\n  width: 300px;\n  height: auto;\n  font-size: 1rem;\n}\n.ui.large.images .image,\n.ui.large.images img,\n.ui.large.images svg,\n.ui.large.image {\n  width: 450px;\n  height: auto;\n  font-size: 1.14285714rem;\n}\n.ui.big.images .image,\n.ui.big.images img,\n.ui.big.images svg,\n.ui.big.image {\n  width: 600px;\n  height: auto;\n  font-size: 1.28571429rem;\n}\n.ui.huge.images .image,\n.ui.huge.images img,\n.ui.huge.images svg,\n.ui.huge.image {\n  width: 800px;\n  height: auto;\n  font-size: 1.42857143rem;\n}\n.ui.massive.images .image,\n.ui.massive.images img,\n.ui.massive.images svg,\n.ui.massive.image {\n  width: 960px;\n  height: auto;\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n              Groups\n*******************************/\n\n.ui.images {\n  font-size: 0em;\n  margin: 0em -0.25rem 0rem;\n}\n.ui.images .image,\n.ui.images img,\n.ui.images svg {\n  display: inline-block;\n  margin: 0em 0.25rem 0.5rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/input.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Input\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Standard\n*******************************/\n\n\n/*--------------------\n        Inputs\n---------------------*/\n\n.ui.input {\n  position: relative;\n  font-weight: normal;\n  font-style: normal;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.input input {\n  margin: 0em;\n  max-width: 100%;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-align: left;\n  line-height: 1.2142em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  padding: 0.67861429em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-transition: box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease;\n  box-shadow: none;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n\n/* browsers require these rules separate */\n.ui.input input::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.input input::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.input input:-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n        Disabled\n---------------------*/\n\n.ui.disabled.input,\n.ui.input input[disabled] {\n  opacity: 0.45;\n}\n.ui.disabled.input input,\n.ui.input input[disabled] {\n  pointer-events: none;\n}\n\n/*--------------------\n        Active\n---------------------*/\n\n.ui.input input:active,\n.ui.input.down input {\n  border-color: rgba(0, 0, 0, 0.3);\n  background: #FAFAFA;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.loading.input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.loading.input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.input.focus input,\n.ui.input input:focus {\n  border-color: #85B7D9;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.8);\n  box-shadow: none;\n}\n.ui.input.focus input::-webkit-input-placeholder,\n.ui.input input:focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.input.focus input::-moz-placeholder,\n.ui.input input:focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.input.focus input:-ms-input-placeholder,\n.ui.input input:focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n.ui.input.error input {\n  background-color: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  box-shadow: none;\n}\n\n/* Error Placeholder */\n.ui.input.error input::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n.ui.input.error input::-moz-placeholder {\n  color: #e7bdbc;\n}\n.ui.input.error input:-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n\n/* Focused Error Placeholder */\n.ui.input.error input:focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n.ui.input.error input:focus::-moz-placeholder {\n  color: #da9796;\n}\n.ui.input.error input:focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n      Transparent\n---------------------*/\n\n.ui.transparent.input input {\n  border-color: transparent !important;\n  background-color: transparent !important;\n  padding: 0em !important;\n  box-shadow: none !important;\n}\n\n/* Transparent Icon */\n.ui.transparent.icon.input > i.icon {\n  width: 1.1em;\n}\n.ui.transparent.icon.input > input {\n  padding-left: 0em !important;\n  padding-right: 2em !important;\n}\n.ui.transparent[class*=\"left icon\"].input > input {\n  padding-left: 2em !important;\n  padding-right: 0em !important;\n}\n\n/* Transparent Inverted */\n.ui.transparent.inverted.input {\n  color: #FFFFFF;\n}\n.ui.transparent.inverted.input input {\n  color: inherit;\n}\n.ui.transparent.inverted.input input::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.transparent.inverted.input input::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.transparent.inverted.input input:-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/*--------------------\n         Icon\n---------------------*/\n\n.ui.icon.input > i.icon {\n  cursor: default;\n  position: absolute;\n  line-height: 1;\n  text-align: center;\n  top: 0px;\n  right: 0px;\n  margin: 0em;\n  height: 100%;\n  width: 2.67142857em;\n  opacity: 0.5;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n.ui.icon.input > i.icon:not(.link) {\n  pointer-events: none;\n}\n.ui.icon.input input {\n  padding-right: 2.67142857em !important;\n}\n.ui.icon.input > i.icon:before,\n.ui.icon.input > i.icon:after {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  top: 50%;\n  width: 100%;\n  margin-top: -0.5em;\n}\n.ui.icon.input > i.link.icon {\n  cursor: pointer;\n}\n.ui.icon.input > i.circular.icon {\n  top: 0.35em;\n  right: 0.5em;\n}\n\n/* Left Icon Input */\n.ui[class*=\"left icon\"].input > i.icon {\n  right: auto;\n  left: 1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"left icon\"].input > i.circular.icon {\n  right: auto;\n  left: 0.5em;\n}\n.ui[class*=\"left icon\"].input > input {\n  padding-left: 2.67142857em !important;\n  padding-right: 1em !important;\n}\n\n/* Focus */\n.ui.icon.input > input:focus ~ i.icon {\n  opacity: 1;\n}\n\n/*--------------------\n        Labeled\n---------------------*/\n\n\n/* Adjacent Label */\n.ui.labeled.input > .label {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  margin: 0;\n  font-size: 1em;\n}\n.ui.labeled.input > .label:not(.corner) {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n}\n\n/* Regular Label on Left */\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n  border-left-color: transparent;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input:focus {\n  border-left-color: #85B7D9;\n}\n\n/* Regular Label on Right */\n.ui[class*=\"right labeled\"].input input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui[class*=\"right labeled\"].input input + .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.ui[class*=\"right labeled\"].input input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Corner Label */\n.ui.labeled.input .corner.label {\n  top: 1px;\n  right: 1px;\n  font-size: 0.64285714em;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Spacing with corner label */\n.ui[class*=\"corner labeled\"]:not([class*=\"left corner labeled\"]).labeled.input input {\n  padding-right: 2.5em !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > input {\n  padding-right: 3.25em !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > .icon {\n  margin-right: 1.25em;\n}\n\n/* Left Labeled */\n.ui[class*=\"left corner labeled\"].labeled.input input {\n  padding-left: 2.5em !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > input {\n  padding-left: 3.25em !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > .icon {\n  margin-left: 1.25em;\n}\n\n/* Corner Label Position  */\n.ui.input > .ui.corner.label {\n  top: 1px;\n  right: 1px;\n}\n.ui.input > .ui.left.corner.label {\n  right: auto;\n  left: 1px;\n}\n\n/*--------------------\n        Action\n---------------------*/\n\n.ui.action.input > .button,\n.ui.action.input > .buttons {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n}\n.ui.action.input > .button,\n.ui.action.input > .buttons > .button {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n  margin: 0;\n}\n\n/* Button on Right */\n.ui.action.input:not([class*=\"left action\"]) > input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .button:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .buttons:not(:first-child) > .button {\n  border-radius: 0px;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .button:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .buttons:last-child > .button {\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px;\n}\n\n/* Input Focus */\n.ui.action.input:not([class*=\"left action\"]) input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Button on Left */\n.ui[class*=\"left action\"].input > input {\n  border-top-left-radius: 0px !important;\n  border-bottom-left-radius: 0px !important;\n  border-left-color: transparent !important;\n}\n.ui[class*=\"left action\"].input > .dropdown,\n.ui[class*=\"left action\"].input > .button,\n.ui[class*=\"left action\"].input > .buttons > .button {\n  border-radius: 0px;\n}\n.ui[class*=\"left action\"].input > .dropdown:first-child,\n.ui[class*=\"left action\"].input > .button:first-child,\n.ui[class*=\"left action\"].input > .buttons:first-child > .button {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Input Focus */\n.ui[class*=\"left action\"].input > input:focus {\n  border-left-color: #85B7D9 !important;\n}\n\n/*--------------------\n       Inverted\n---------------------*/\n\n\n/* Standard */\n.ui.inverted.input input {\n  border: none;\n}\n\n/*--------------------\n        Fluid\n---------------------*/\n\n.ui.fluid.input {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n.ui.fluid.input > input {\n  width: 0px !important;\n}\n\n/*--------------------\n        Size\n---------------------*/\n\n.ui.mini.input {\n  font-size: 0.78571429em;\n}\n.ui.small.input {\n  font-size: 0.92857143em;\n}\n.ui.input {\n  font-size: 1em;\n}\n.ui.large.input {\n  font-size: 1.14285714em;\n}\n.ui.big.input {\n  font-size: 1.28571429em;\n}\n.ui.huge.input {\n  font-size: 1.42857143em;\n}\n.ui.massive.input {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/item.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em 0em;\n  width: 100%;\n  min-height: 0px;\n  background: transparent;\n  padding: 0em;\n  border: none;\n  border-radius: 0rem;\n  box-shadow: none;\n  -webkit-transition: box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease;\n  z-index: '';\n}\n.ui.items > .item a {\n  cursor: pointer;\n}\n\n/*--------------\n      Items\n---------------*/\n\n.ui.items {\n  margin: 1.5em 0em;\n}\n.ui.items:first-child {\n  margin-top: 0em !important;\n}\n.ui.items:last-child {\n  margin-bottom: 0em !important;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.items > .item:first-child {\n  margin-top: 0em;\n}\n.ui.items > .item:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.items > .item > .image {\n  position: relative;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  display: block;\n  float: none;\n  margin: 0em;\n  padding: 0em;\n  max-height: '';\n  -ms-flex-item-align: top;\n      -ms-grid-row-align: top;\n      align-self: top;\n}\n.ui.items > .item > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: 0.125rem;\n  border: none;\n}\n.ui.items > .item > .image:only-child > img {\n  border-radius: 0rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.items > .item > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  background: none;\n  margin: 0em;\n  padding: 0em;\n  box-shadow: none;\n  font-size: 1em;\n  border: none;\n  border-radius: 0em;\n}\n.ui.items > .item > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.items > .item > .image + .content {\n  min-width: 0;\n  width: auto;\n  display: block;\n  margin-left: 0em;\n  -ms-flex-item-align: top;\n      -ms-grid-row-align: top;\n      align-self: top;\n  padding-left: 1.5em;\n}\n.ui.items > .item > .content > .header {\n  display: inline-block;\n  margin: -0.21425em 0em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n.ui.items > .item > .content > .header:not(.ui) {\n  font-size: 1.28571429em;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.items > .item [class*=\"left floated\"] {\n  float: left;\n}\n.ui.items > .item [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.items > .item .content img {\n  -ms-flex-item-align: middle;\n      -ms-grid-row-align: middle;\n      align-self: middle;\n  width: '';\n}\n.ui.items > .item img.avatar,\n.ui.items > .item .avatar img {\n  width: '';\n  height: '';\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.items > .item > .content > .description {\n  margin-top: 0.6em;\n  max-width: auto;\n  font-size: 1em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.items > .item > .content p {\n  margin: 0em 0em 0.5em;\n}\n.ui.items > .item > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.items > .item .meta {\n  margin: 0.5em 0em 0.5em;\n  font-size: 1em;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.items > .item .meta * {\n  margin-right: 0.3em;\n}\n.ui.items > .item .meta :last-child {\n  margin-right: 0em;\n}\n.ui.items > .item .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n\n/* Generic */\n.ui.items > .item > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n.ui.items > .item > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.items > .item > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n.ui.items > .item .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.items > .item .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Labels\n---------------*/\n\n\n/*-----Star----- */\n\n\n/* Icon */\n.ui.items > .item > .content .favorite.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content .favorite.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n.ui.items > .item > .content .active.favorite.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n\n/* Icon */\n.ui.items > .item > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n.ui.items > .item > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.items > .item .extra {\n  display: block;\n  position: relative;\n  background: none;\n  margin: 0.5rem 0em 0em;\n  width: 100%;\n  padding: 0em 0em 0em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-top: none;\n}\n.ui.items > .item .extra > * {\n  margin: 0.25rem 0.5rem 0.25rem 0em;\n}\n.ui.items > .item .extra > [class*=\"right floated\"] {\n  margin: 0.25rem 0em 0.25rem 0.5rem;\n}\n.ui.items > .item .extra:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n\n/*******************************\n          Responsive\n*******************************/\n\n\n/* Default Image Width */\n.ui.items > .item > .image:not(.ui) {\n  width: 175px;\n}\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.items > .item {\n    margin: 1em 0em;\n  }\n  .ui.items > .item > .image:not(.ui) {\n    width: 150px;\n  }\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 0em 0em 0em 1em;\n  }\n}\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.items > .item {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    margin: 2em 0em;\n  }\n  .ui.items > .item > .image {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n  .ui.items > .item > .image,\n  .ui.items > .item > .image > img {\n    max-width: 100% !important;\n    width: auto !important;\n    max-height: 250px !important;\n  }\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 1.5em 0em 0em;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.items > .item > .image + [class*=\"top aligned\"].content {\n  -ms-flex-item-align: start;\n      align-self: flex-start;\n}\n.ui.items > .item > .image + [class*=\"middle aligned\"].content {\n  -ms-flex-item-align: center;\n      -ms-grid-row-align: center;\n      align-self: center;\n}\n.ui.items > .item > .image + [class*=\"bottom aligned\"].content {\n  -ms-flex-item-align: end;\n      align-self: flex-end;\n}\n\n/*--------------\n     Relaxed\n---------------*/\n\n.ui.relaxed.items > .item {\n  margin: 1.5em 0em;\n}\n.ui[class*=\"very relaxed\"].items > .item {\n  margin: 2em 0em;\n}\n\n/*-------------------\n      Divided\n--------------------*/\n\n.ui.divided.items > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding: 1em 0em;\n}\n.ui.divided.items > .item:first-child {\n  border-top: none;\n  margin-top: 0em !important;\n  padding-top: 0em !important;\n}\n.ui.divided.items > .item:last-child {\n  margin-bottom: 0em !important;\n  padding-bottom: 0em !important;\n}\n\n/* Relaxed Divided */\n.ui.relaxed.divided.items > .item {\n  margin: 0em;\n  padding: 1.5em 0em;\n}\n.ui[class*=\"very relaxed\"].divided.items > .item {\n  margin: 0em;\n  padding: 2em 0em;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.items a.item:hover,\n.ui.link.items > .item:hover {\n  cursor: pointer;\n}\n.ui.items a.item:hover .content .header,\n.ui.link.items > .item:hover .content .header {\n  color: #1e70bf;\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.items > .item {\n  font-size: 1em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/label.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Label\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Label\n*******************************/\n\n.ui.label {\n  display: inline-block;\n  line-height: 1;\n  vertical-align: baseline;\n  margin: 0em 0.14285714em;\n  background-color: #E8E8E8;\n  background-image: none;\n  padding: 0.5833em 0.833em;\n  color: rgba(0, 0, 0, 0.6);\n  text-transform: none;\n  font-weight: bold;\n  border: 0px solid transparent;\n  border-radius: 0.28571429rem;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.label:first-child {\n  margin-left: 0em;\n}\n.ui.label:last-child {\n  margin-right: 0em;\n}\n\n/* Link */\na.ui.label {\n  cursor: pointer;\n}\n\n/* Inside Link */\n.ui.label > a {\n  cursor: pointer;\n  color: inherit;\n  opacity: 0.5;\n  -webkit-transition: 0.1s opacity ease;\n  transition: 0.1s opacity ease;\n}\n.ui.label > a:hover {\n  opacity: 1;\n}\n\n/* Image */\n.ui.label > img {\n  width: auto !important;\n  vertical-align: middle;\n  height: 2.1666em !important;\n}\n\n/* Icon */\n.ui.label > .icon {\n  width: auto;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Detail */\n.ui.label > .detail {\n  display: inline-block;\n  vertical-align: top;\n  font-weight: bold;\n  margin-left: 1em;\n  opacity: 0.8;\n}\n.ui.label > .detail .icon {\n  margin: 0em 0.25em 0em 0em;\n}\n\n/* Removable label */\n.ui.label > .close.icon,\n.ui.label > .delete.icon {\n  cursor: pointer;\n  margin-right: 0em;\n  margin-left: 0.5em;\n  font-size: 0.92857143em;\n  opacity: 0.5;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.label > .delete.icon:hover {\n  opacity: 1;\n}\n\n/*-------------------\n       Group\n--------------------*/\n\n.ui.labels > .label {\n  margin: 0em 0.5em 0.5em 0em;\n}\n\n/*-------------------\n       Coupling\n--------------------*/\n\n.ui.header > .ui.label {\n  margin-top: -0.29165em;\n}\n\n/* Remove border radius on attached segment */\n.ui.attached.segment > .ui.top.left.attached.label,\n.ui.bottom.attached.segment > .ui.top.left.attached.label {\n  border-top-left-radius: 0;\n}\n.ui.attached.segment > .ui.top.right.attached.label,\n.ui.bottom.attached.segment > .ui.top.right.attached.label {\n  border-top-right-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.left.attached.label {\n  border-bottom-left-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.right.attached.label {\n  border-bottom-right-radius: 0;\n}\n\n/* Padding on next content after a label */\n.ui.top.attached.label:first-child + :not(.attached),\n.ui.top.attached.label + [class*=\"right floated\"] + * {\n  margin-top: 2rem !important;\n}\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\n  margin-top: 0em;\n  margin-bottom: 2rem !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.image.label {\n  width: auto !important;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  max-width: 9999px;\n  vertical-align: baseline;\n  text-transform: none;\n  background: #E8E8E8;\n  padding: 0.5833em 0.833em 0.5833em 0.5em;\n  border-radius: 0.28571429rem;\n  box-shadow: none;\n}\n.ui.image.label img {\n  display: inline-block;\n  vertical-align: top;\n  height: 2.1666em;\n  margin: -0.5833em 0.5em -0.5833em -0.5em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui.image.label .detail {\n  background: rgba(0, 0, 0, 0.1);\n  margin: -0.5833em -0.833em -0.5833em 0.5em;\n  padding: 0.5833em 0.833em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/*-------------------\n         Tag\n--------------------*/\n\n.ui.tag.labels .label,\n.ui.tag.label {\n  margin-left: 1em;\n  position: relative;\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: none;\n  transition: none;\n}\n.ui.tag.labels .label:before,\n.ui.tag.label:before {\n  position: absolute;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n          transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  top: 50%;\n  right: 100%;\n  content: '';\n  background-color: inherit;\n  background-image: none;\n  width: 1.56em;\n  height: 1.56em;\n  -webkit-transition: none;\n  transition: none;\n}\n.ui.tag.labels .label:after,\n.ui.tag.label:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: -0.25em;\n  margin-top: -0.25em;\n  background-color: #FFFFFF !important;\n  width: 0.5em;\n  height: 0.5em;\n  box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n  border-radius: 500rem;\n}\n\n/*-------------------\n    Corner Label\n--------------------*/\n\n.ui.corner.label {\n  position: absolute;\n  top: 0em;\n  right: 0em;\n  margin: 0em;\n  padding: 0em;\n  text-align: center;\n  border-color: #E8E8E8;\n  width: 4em;\n  height: 4em;\n  z-index: 1;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n/* Icon Label */\n.ui.corner.label {\n  background-color: transparent !important;\n}\n.ui.corner.label:after {\n  position: absolute;\n  content: \"\";\n  right: 0em;\n  top: 0em;\n  z-index: -1;\n  width: 0em;\n  height: 0em;\n  background-color: transparent !important;\n  border-top: 0em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 4em solid transparent;\n  border-left: 0em solid transparent;\n  border-right-color: inherit;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n.ui.corner.label .icon {\n  cursor: default;\n  position: relative;\n  top: 0.64285714em;\n  left: 0.78571429em;\n  font-size: 1.14285714em;\n  margin: 0em;\n}\n\n/* Left Corner */\n.ui.left.corner.label,\n.ui.left.corner.label:after {\n  right: auto;\n  left: 0em;\n}\n.ui.left.corner.label:after {\n  border-top: 4em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 0em solid transparent;\n  border-left: 0em solid transparent;\n  border-top-color: inherit;\n}\n.ui.left.corner.label .icon {\n  left: -0.78571429em;\n}\n\n/* Segment */\n.ui.segment > .ui.corner.label {\n  top: -1px;\n  right: -1px;\n}\n.ui.segment > .ui.left.corner.label {\n  right: auto;\n  left: -1px;\n}\n\n/*-------------------\n       Ribbon\n--------------------*/\n\n.ui.ribbon.label {\n  position: relative;\n  margin: 0em;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.ui.ribbon.label:after {\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 0%;\n  background-color: transparent !important;\n  border-style: solid;\n  border-width: 0em 1.2em 1.2em 0em;\n  border-color: transparent;\n  border-right-color: inherit;\n  width: 0em;\n  height: 0em;\n}\n\n/* Positioning */\n.ui.ribbon.label {\n  left: calc( -1rem  -  1.2em );\n  margin-right: -1.2em;\n  padding-left: calc( 1rem  +  1.2em );\n  padding-right: 1.2em;\n}\n.ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  1rem  +  1.2em );\n  padding-left: 1.2em;\n  padding-right: calc( 1rem  +  1.2em );\n}\n\n/* Right Ribbon */\n.ui[class*=\"right ribbon\"].label {\n  text-align: left;\n  -webkit-transform: translateX(-100%);\n          transform: translateX(-100%);\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"right ribbon\"].label:after {\n  left: auto;\n  right: 0%;\n  border-style: solid;\n  border-width: 1.2em 1.2em 0em 0em;\n  border-color: transparent;\n  border-top-color: inherit;\n}\n\n/* Inside Table */\n.ui.image > .ribbon.label,\n.ui.card .image > .ribbon.label {\n  position: absolute;\n  top: 1rem;\n}\n.ui.card .image > .ui.ribbon.label,\n.ui.image > .ui.ribbon.label {\n  left: calc( 0.05rem  -  1.2em );\n}\n.ui.card .image > .ui[class*=\"right ribbon\"].label,\n.ui.image > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  -0.05rem  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/* Inside Table */\n.ui.table td > .ui.ribbon.label {\n  left: calc( -0.78571429em  -  1.2em );\n}\n.ui.table td > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  0.78571429em  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui[class*=\"top attached\"].label,\n.ui.attached.label {\n  width: 100%;\n  position: absolute;\n  margin: 0em;\n  top: 0em;\n  left: 0em;\n  padding: 0.75em 1em;\n  border-radius: 0.21428571rem 0.21428571rem 0em 0em;\n}\n.ui[class*=\"bottom attached\"].label {\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0em 0.21428571rem 0.21428571rem;\n}\n.ui[class*=\"top left attached\"].label {\n  width: auto;\n  margin-top: 0em !important;\n  border-radius: 0.21428571rem 0em 0.28571429rem 0em;\n}\n.ui[class*=\"top right attached\"].label {\n  width: auto;\n  left: auto;\n  right: 0em;\n  border-radius: 0em 0.21428571rem 0em 0.28571429rem;\n}\n.ui[class*=\"bottom left attached\"].label {\n  width: auto;\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0.28571429rem 0em 0.21428571rem;\n}\n.ui[class*=\"bottom right attached\"].label {\n  top: auto;\n  bottom: 0em;\n  left: auto;\n  right: 0em;\n  width: auto;\n  border-radius: 0.28571429rem 0em 0.21428571rem 0em;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.label.disabled {\n  opacity: 0.5;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\na.ui.labels .label:hover,\na.ui.label:hover {\n  background-color: #E0E0E0;\n  border-color: #E0E0E0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.labels a.label:hover:before,\na.ui.label:hover:before {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n        Active\n--------------------*/\n\n.ui.active.label {\n  background-color: #D0D0D0;\n  border-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.label:before {\n  background-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n     Active Hover\n--------------------*/\n\na.ui.labels .active.label:hover,\na.ui.active.label:hover {\n  background-color: #C8C8C8;\n  border-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.labels a.active.label:ActiveHover:before,\na.ui.active.label:ActiveHover:before {\n  background-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n      Visible\n--------------------*/\n\n.ui.labels.visible .label,\n.ui.label.visible:not(.dropdown) {\n  display: inline-block !important;\n}\n\n/*-------------------\n      Hidden\n--------------------*/\n\n.ui.labels.hidden .label,\n.ui.label.hidden {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Red ---*/\n\n.ui.red.labels .label,\n.ui.red.label {\n  background-color: #DB2828 !important;\n  border-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.red.labels .label:hover,\na.ui.red.label:hover {\n  background-color: #d01919 !important;\n  border-color: #d01919 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.red.corner.label,\n.ui.red.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.red.ribbon.label {\n  border-color: #b21e1e !important;\n}\n\n/* Basic */\n.ui.basic.red.label {\n  background-color: #FFFFFF !important;\n  color: #DB2828 !important;\n  border-color: #DB2828 !important;\n}\n.ui.basic.red.labels a.label:hover,\na.ui.basic.red.label:hover {\n  background-color: #FFFFFF !important;\n  color: #d01919 !important;\n  border-color: #d01919 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.labels .label,\n.ui.orange.label {\n  background-color: #F2711C !important;\n  border-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.orange.labels .label:hover,\na.ui.orange.label:hover {\n  background-color: #f26202 !important;\n  border-color: #f26202 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.orange.corner.label,\n.ui.orange.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.orange.ribbon.label {\n  border-color: #cf590c !important;\n}\n\n/* Basic */\n.ui.basic.orange.label {\n  background-color: #FFFFFF !important;\n  color: #F2711C !important;\n  border-color: #F2711C !important;\n}\n.ui.basic.orange.labels a.label:hover,\na.ui.basic.orange.label:hover {\n  background-color: #FFFFFF !important;\n  color: #f26202 !important;\n  border-color: #f26202 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.labels .label,\n.ui.yellow.label {\n  background-color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.yellow.labels .label:hover,\na.ui.yellow.label:hover {\n  background-color: #eaae00 !important;\n  border-color: #eaae00 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.yellow.corner.label,\n.ui.yellow.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.yellow.ribbon.label {\n  border-color: #cd9903 !important;\n}\n\n/* Basic */\n.ui.basic.yellow.label {\n  background-color: #FFFFFF !important;\n  color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n}\n.ui.basic.yellow.labels a.label:hover,\na.ui.basic.yellow.label:hover {\n  background-color: #FFFFFF !important;\n  color: #eaae00 !important;\n  border-color: #eaae00 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.labels .label,\n.ui.olive.label {\n  background-color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.olive.labels .label:hover,\na.ui.olive.label:hover {\n  background-color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.olive.corner.label,\n.ui.olive.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.olive.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n.ui.basic.olive.label {\n  background-color: #FFFFFF !important;\n  color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n}\n.ui.basic.olive.labels a.label:hover,\na.ui.basic.olive.label:hover {\n  background-color: #FFFFFF !important;\n  color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.labels .label,\n.ui.green.label {\n  background-color: #21BA45 !important;\n  border-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.green.labels .label:hover,\na.ui.green.label:hover {\n  background-color: #16ab39 !important;\n  border-color: #16ab39 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.green.corner.label,\n.ui.green.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.green.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n.ui.basic.green.label {\n  background-color: #FFFFFF !important;\n  color: #21BA45 !important;\n  border-color: #21BA45 !important;\n}\n.ui.basic.green.labels a.label:hover,\na.ui.basic.green.label:hover {\n  background-color: #FFFFFF !important;\n  color: #16ab39 !important;\n  border-color: #16ab39 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.labels .label,\n.ui.teal.label {\n  background-color: #00B5AD !important;\n  border-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.teal.labels .label:hover,\na.ui.teal.label:hover {\n  background-color: #009c95 !important;\n  border-color: #009c95 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.teal.corner.label,\n.ui.teal.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.teal.ribbon.label {\n  border-color: #00827c !important;\n}\n\n/* Basic */\n.ui.basic.teal.label {\n  background-color: #FFFFFF !important;\n  color: #00B5AD !important;\n  border-color: #00B5AD !important;\n}\n.ui.basic.teal.labels a.label:hover,\na.ui.basic.teal.label:hover {\n  background-color: #FFFFFF !important;\n  color: #009c95 !important;\n  border-color: #009c95 !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.labels .label,\n.ui.blue.label {\n  background-color: #2185D0 !important;\n  border-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.blue.labels .label:hover,\na.ui.blue.label:hover {\n  background-color: #1678c2 !important;\n  border-color: #1678c2 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.blue.corner.label,\n.ui.blue.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.blue.ribbon.label {\n  border-color: #1a69a4 !important;\n}\n\n/* Basic */\n.ui.basic.blue.label {\n  background-color: #FFFFFF !important;\n  color: #2185D0 !important;\n  border-color: #2185D0 !important;\n}\n.ui.basic.blue.labels a.label:hover,\na.ui.basic.blue.label:hover {\n  background-color: #FFFFFF !important;\n  color: #1678c2 !important;\n  border-color: #1678c2 !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.labels .label,\n.ui.violet.label {\n  background-color: #6435C9 !important;\n  border-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.violet.labels .label:hover,\na.ui.violet.label:hover {\n  background-color: #5829bb !important;\n  border-color: #5829bb !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.violet.corner.label,\n.ui.violet.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.violet.ribbon.label {\n  border-color: #502aa1 !important;\n}\n\n/* Basic */\n.ui.basic.violet.label {\n  background-color: #FFFFFF !important;\n  color: #6435C9 !important;\n  border-color: #6435C9 !important;\n}\n.ui.basic.violet.labels a.label:hover,\na.ui.basic.violet.label:hover {\n  background-color: #FFFFFF !important;\n  color: #5829bb !important;\n  border-color: #5829bb !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.labels .label,\n.ui.purple.label {\n  background-color: #A333C8 !important;\n  border-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.purple.labels .label:hover,\na.ui.purple.label:hover {\n  background-color: #9627ba !important;\n  border-color: #9627ba !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.purple.corner.label,\n.ui.purple.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.purple.ribbon.label {\n  border-color: #82299f !important;\n}\n\n/* Basic */\n.ui.basic.purple.label {\n  background-color: #FFFFFF !important;\n  color: #A333C8 !important;\n  border-color: #A333C8 !important;\n}\n.ui.basic.purple.labels a.label:hover,\na.ui.basic.purple.label:hover {\n  background-color: #FFFFFF !important;\n  color: #9627ba !important;\n  border-color: #9627ba !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.labels .label,\n.ui.pink.label {\n  background-color: #E03997 !important;\n  border-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.pink.labels .label:hover,\na.ui.pink.label:hover {\n  background-color: #e61a8d !important;\n  border-color: #e61a8d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.pink.corner.label,\n.ui.pink.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.pink.ribbon.label {\n  border-color: #c71f7e !important;\n}\n\n/* Basic */\n.ui.basic.pink.label {\n  background-color: #FFFFFF !important;\n  color: #E03997 !important;\n  border-color: #E03997 !important;\n}\n.ui.basic.pink.labels a.label:hover,\na.ui.basic.pink.label:hover {\n  background-color: #FFFFFF !important;\n  color: #e61a8d !important;\n  border-color: #e61a8d !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.labels .label,\n.ui.brown.label {\n  background-color: #A5673F !important;\n  border-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.brown.labels .label:hover,\na.ui.brown.label:hover {\n  background-color: #975b33 !important;\n  border-color: #975b33 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.brown.corner.label,\n.ui.brown.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.brown.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.brown.label {\n  background-color: #FFFFFF !important;\n  color: #A5673F !important;\n  border-color: #A5673F !important;\n}\n.ui.basic.brown.labels a.label:hover,\na.ui.basic.brown.label:hover {\n  background-color: #FFFFFF !important;\n  color: #975b33 !important;\n  border-color: #975b33 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.labels .label,\n.ui.grey.label {\n  background-color: #767676 !important;\n  border-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.grey.labels .label:hover,\na.ui.grey.label:hover {\n  background-color: #838383 !important;\n  border-color: #838383 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.grey.corner.label,\n.ui.grey.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.grey.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.grey.label {\n  background-color: #FFFFFF !important;\n  color: #767676 !important;\n  border-color: #767676 !important;\n}\n.ui.basic.grey.labels a.label:hover,\na.ui.basic.grey.label:hover {\n  background-color: #FFFFFF !important;\n  color: #838383 !important;\n  border-color: #838383 !important;\n}\n\n/*--- Black ---*/\n\n.ui.black.labels .label,\n.ui.black.label {\n  background-color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.black.labels .label:hover,\na.ui.black.label:hover {\n  background-color: #27292a !important;\n  border-color: #27292a !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.black.corner.label,\n.ui.black.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.black.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.black.label {\n  background-color: #FFFFFF !important;\n  color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n}\n.ui.basic.black.labels a.label:hover,\na.ui.basic.black.label:hover {\n  background-color: #FFFFFF !important;\n  color: #27292a !important;\n  border-color: #27292a !important;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.label {\n  background: none #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n}\n\n/* Link */\na.ui.basic.label:hover {\n  text-decoration: none;\n  background: none #FFFFFF;\n  color: #1e70bf;\n  box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n\n/* Pointing */\n.ui.basic.pointing.label:before {\n  border-color: inherit;\n}\n\n/*-------------------\n       Fluid\n--------------------*/\n\n.ui.label.fluid,\n.ui.fluid.labels > .label {\n  width: 100%;\n  box-sizing: border-box;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.labels .label,\n.ui.inverted.label {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n/*-------------------\n     Horizontal\n--------------------*/\n\n.ui.horizontal.labels .label,\n.ui.horizontal.label {\n  margin: 0em 0.5em 0em 0em;\n  padding: 0.4em 0.833em;\n  min-width: 3em;\n  text-align: center;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.labels .label,\n.ui.circular.label {\n  min-width: 2em;\n  min-height: 2em;\n  padding: 0.5em !important;\n  line-height: 1em;\n  text-align: center;\n  border-radius: 500rem;\n}\n.ui.empty.circular.labels .label,\n.ui.empty.circular.label {\n  min-width: 0em;\n  min-height: 0em;\n  overflow: hidden;\n  width: 0.5em;\n  height: 0.5em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.label {\n  position: relative;\n}\n.ui.attached.pointing.label {\n  position: absolute;\n}\n.ui.pointing.label:before {\n  background-color: inherit;\n  background-image: inherit;\n  border-width: none;\n  border-style: solid;\n  border-color: inherit;\n}\n\n/* Arrow */\n.ui.pointing.label:before {\n  position: absolute;\n  content: '';\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  background-image: none;\n  z-index: 2;\n  width: 0.6666em;\n  height: 0.6666em;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n/*--- Above ---*/\n\n.ui.pointing.label,\n.ui[class*=\"pointing above\"].label {\n  margin-top: 1em;\n}\n.ui.pointing.label:before,\n.ui[class*=\"pointing above\"].label:before {\n  border-width: 1px 0px 0px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 0%;\n  left: 50%;\n}\n\n/*--- Below ---*/\n\n.ui[class*=\"bottom pointing\"].label,\n.ui[class*=\"pointing below\"].label {\n  margin-top: 0em;\n  margin-bottom: 1em;\n}\n.ui[class*=\"bottom pointing\"].label:before,\n.ui[class*=\"pointing below\"].label:before {\n  border-width: 0px 1px 1px 0px;\n  top: auto;\n  right: auto;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 100%;\n  left: 50%;\n}\n\n/*--- Left ---*/\n\n.ui[class*=\"left pointing\"].label {\n  margin-top: 0em;\n  margin-left: 0.6666em;\n}\n.ui[class*=\"left pointing\"].label:before {\n  border-width: 0px 0px 1px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*--- Right ---*/\n\n.ui[class*=\"right pointing\"].label {\n  margin-top: 0em;\n  margin-right: 0.6666em;\n}\n.ui[class*=\"right pointing\"].label:before {\n  border-width: 1px 1px 0px 0px;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n          transform: translateX(50%) translateY(-50%) rotate(45deg);\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n}\n\n/* Basic Pointing */\n\n/*--- Above ---*/\n\n.ui.basic.pointing.label:before,\n.ui.basic[class*=\"pointing above\"].label:before {\n  margin-top: -1px;\n}\n\n/*--- Below ---*/\n\n.ui.basic[class*=\"bottom pointing\"].label:before,\n.ui.basic[class*=\"pointing below\"].label:before {\n  bottom: auto;\n  top: 100%;\n  margin-top: 1px;\n}\n\n/*--- Left ---*/\n\n.ui.basic[class*=\"left pointing\"].label:before {\n  top: 50%;\n  left: -1px;\n}\n\n/*--- Right ---*/\n\n.ui.basic[class*=\"right pointing\"].label:before {\n  top: 50%;\n  right: -1px;\n}\n\n/*------------------\n   Floating Label\n-------------------*/\n\n.ui.floating.label {\n  position: absolute;\n  z-index: 100;\n  top: -1em;\n  left: 100%;\n  margin: 0em 0em 0em -1.5em !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.labels .label,\n.ui.mini.label {\n  font-size: 0.64285714rem;\n}\n.ui.tiny.labels .label,\n.ui.tiny.label {\n  font-size: 0.71428571rem;\n}\n.ui.small.labels .label,\n.ui.small.label {\n  font-size: 0.78571429rem;\n}\n.ui.labels .label,\n.ui.label {\n  font-size: 0.85714286rem;\n}\n.ui.large.labels .label,\n.ui.large.label {\n  font-size: 1rem;\n}\n.ui.big.labels .label,\n.ui.big.label {\n  font-size: 1.28571429rem;\n}\n.ui.huge.labels .label,\n.ui.huge.label {\n  font-size: 1.42857143rem;\n}\n.ui.massive.labels .label,\n.ui.massive.label {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/list.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - List\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            List\n*******************************/\n\nul.ui.list,\nol.ui.list,\n.ui.list {\n  list-style-type: none;\n  margin: 1em 0em;\n  padding: 0em 0em;\n}\nul.ui.list:first-child,\nol.ui.list:first-child,\n.ui.list:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\nul.ui.list:last-child,\nol.ui.list:last-child,\n.ui.list:last-child {\n  margin-bottom: 0em;\n  padding-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* List Item */\nul.ui.list li,\nol.ui.list li,\n.ui.list > .item,\n.ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\nul.ui.list > li:first-child:after,\nol.ui.list > li:first-child:after,\n.ui.list > .list > .item,\n.ui.list > .item:after {\n  content: '';\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\nul.ui.list li:first-child,\nol.ui.list li:first-child,\n.ui.list .list > .item:first-child,\n.ui.list > .item:first-child {\n  padding-top: 0em;\n}\nul.ui.list li:last-child,\nol.ui.list li:last-child,\n.ui.list .list > .item:last-child,\n.ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/* Child List */\nul.ui.list ul,\nol.ui.list ol,\n.ui.list .list {\n  clear: both;\n  margin: 0em;\n  padding: 0.75em 0em 0.25em 0.5em;\n}\n\n/* Child Item */\nul.ui.list ul li,\nol.ui.list ol li,\n.ui.list .list > .item {\n  padding: 0.14285714em 0em;\n  line-height: inherit;\n}\n\n/* Icon */\n.ui.list .list > .item > i.icon,\n.ui.list > .item > i.icon {\n  display: table-cell;\n  margin: 0em;\n  padding-top: 0.07142857em;\n  padding-right: 0.28571429em;\n  vertical-align: top;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.list .list > .item > i.icon:only-child,\n.ui.list > .item > i.icon:only-child {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* Image */\n.ui.list .list > .item > .image,\n.ui.list > .item > .image {\n  display: table-cell;\n  background-color: transparent;\n  margin: 0em;\n  vertical-align: top;\n}\n.ui.list .list > .item > .image:not(:only-child):not(img),\n.ui.list > .item > .image:not(:only-child):not(img) {\n  padding-right: 0.5em;\n}\n.ui.list .list > .item > .image img,\n.ui.list > .item > .image img {\n  vertical-align: top;\n}\n.ui.list .list > .item > img.image,\n.ui.list .list > .item > .image:only-child,\n.ui.list > .item > img.image,\n.ui.list > .item > .image:only-child {\n  display: inline-block;\n}\n\n/* Content */\n.ui.list .list > .item > .content,\n.ui.list > .item > .content {\n  line-height: 1.14285714em;\n}\n.ui.list .list > .item > .image + .content,\n.ui.list .list > .item > .icon + .content,\n.ui.list > .item > .image + .content,\n.ui.list > .item > .icon + .content {\n  display: table-cell;\n  padding: 0em 0em 0em 0.5em;\n  vertical-align: top;\n}\n.ui.list .list > .item > img.image + .content,\n.ui.list > .item > img.image + .content {\n  display: inline-block;\n}\n.ui.list .list > .item > .content > .list,\n.ui.list > .item > .content > .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n/* Header */\n.ui.list .list > .item .header,\n.ui.list > .item .header {\n  display: block;\n  margin: 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Description */\n.ui.list .list > .item .description,\n.ui.list > .item .description {\n  display: block;\n  color: rgba(0, 0, 0, 0.7);\n}\n\n/* Child Link */\n.ui.list > .item a,\n.ui.list .list > .item a {\n  cursor: pointer;\n}\n\n/* Linking Item */\n.ui.list .list > a.item,\n.ui.list > a.item {\n  cursor: pointer;\n  color: #4183C4;\n}\n.ui.list .list > a.item:hover,\n.ui.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linked Item Icons */\n.ui.list .list > a.item i.icon,\n.ui.list > a.item i.icon {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Header Link */\n.ui.list .list > .item a.header,\n.ui.list > .item a.header {\n  cursor: pointer;\n  color: #4183C4 !important;\n}\n.ui.list .list > .item a.header:hover,\n.ui.list > .item a.header:hover {\n  color: #1e70bf !important;\n}\n\n/* Floated Content */\n.ui[class*=\"left floated\"].list {\n  float: left;\n}\n.ui[class*=\"right floated\"].list {\n  float: right;\n}\n.ui.list .list > .item [class*=\"left floated\"],\n.ui.list > .item [class*=\"left floated\"] {\n  float: left;\n  margin: 0em 1em 0em 0em;\n}\n.ui.list .list > .item [class*=\"right floated\"],\n.ui.list > .item [class*=\"right floated\"] {\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.menu .ui.list > .item,\n.ui.menu .ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  background-color: transparent;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n.ui.menu .ui.list .list > .item:before,\n.ui.menu .ui.list > .item:before {\n  border: none;\n  background: none;\n}\n.ui.menu .ui.list .list > .item:first-child,\n.ui.menu .ui.list > .item:first-child {\n  padding-top: 0em;\n}\n.ui.menu .ui.list .list > .item:last-child,\n.ui.menu .ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*-------------------\n      Horizontal\n--------------------*/\n\n.ui.horizontal.list {\n  display: inline-block;\n  font-size: 0em;\n}\n.ui.horizontal.list > .item {\n  display: inline-block;\n  margin-left: 1em;\n  font-size: 1rem;\n}\n.ui.horizontal.list:not(.celled) > .item:first-child {\n  margin-left: 0em !important;\n  padding-left: 0em !important;\n}\n.ui.horizontal.list .list {\n  padding-left: 0em;\n  padding-bottom: 0em;\n}\n.ui.horizontal.list > .item > .image,\n.ui.horizontal.list .list > .item > .image,\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list .list > .item > .icon,\n.ui.horizontal.list > .item > .content,\n.ui.horizontal.list .list > .item > .content {\n  vertical-align: middle;\n}\n\n/* Padding on all elements */\n.ui.horizontal.list > .item:first-child,\n.ui.horizontal.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Horizontal List */\n.ui.horizontal.list > .item > i.icon {\n  margin: 0em;\n  padding: 0em 0.25em 0em 0em;\n}\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list > .item > .icon + .content {\n  float: none;\n  display: inline-block;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n       Disabled\n--------------------*/\n\n.ui.list .list > .disabled.item,\n.ui.list > .disabled.item {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3) !important;\n}\n.ui.inverted.list .list > .disabled.item,\n.ui.inverted.list > .disabled.item {\n  color: rgba(225, 225, 225, 0.3) !important;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\n.ui.list .list > a.item:hover .icon,\n.ui.list > a.item:hover .icon {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.list .list > a.item > .icon,\n.ui.inverted.list > a.item > .icon {\n  color: rgba(255, 255, 255, 0.7);\n}\n.ui.inverted.list .list > .item .header,\n.ui.inverted.list > .item .header {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.list .list > .item .description,\n.ui.inverted.list > .item .description {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Item Link */\n.ui.inverted.list .list > a.item,\n.ui.inverted.list > a.item {\n  cursor: pointer;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.list .list > a.item:hover,\n.ui.inverted.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linking Content */\n.ui.inverted.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n.ui.inverted.list .item a:not(.ui):hover {\n  color: #1e70bf !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.list[class*=\"top aligned\"] .image,\n.ui.list[class*=\"top aligned\"] .content,\n.ui.list [class*=\"top aligned\"] {\n  vertical-align: top !important;\n}\n.ui.list[class*=\"middle aligned\"] .image,\n.ui.list[class*=\"middle aligned\"] .content,\n.ui.list [class*=\"middle aligned\"] {\n  vertical-align: middle !important;\n}\n.ui.list[class*=\"bottom aligned\"] .image,\n.ui.list[class*=\"bottom aligned\"] .content,\n.ui.list [class*=\"bottom aligned\"] {\n  vertical-align: bottom !important;\n}\n\n/*-------------------\n       Link\n--------------------*/\n\n.ui.link.list .item,\n.ui.link.list a.item,\n.ui.link.list .item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-transition: 0.1s color ease;\n  transition: 0.1s color ease;\n}\n.ui.link.list a.item:hover,\n.ui.link.list .item a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.link.list a.item:active,\n.ui.link.list .item a:not(.ui):active {\n  color: rgba(0, 0, 0, 0.9);\n}\n.ui.link.list .active.item,\n.ui.link.list .active.item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.link.list .item,\n.ui.inverted.link.list a.item,\n.ui.inverted.link.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.inverted.link.list a.item:hover,\n.ui.inverted.link.list .item a:not(.ui):hover {\n  color: #ffffff;\n}\n.ui.inverted.link.list a.item:active,\n.ui.inverted.link.list .item a:not(.ui):active {\n  color: #ffffff;\n}\n.ui.inverted.link.list a.active.item,\n.ui.inverted.link.list .active.item a:not(.ui) {\n  color: #ffffff;\n}\n\n/*-------------------\n      Selection\n--------------------*/\n\n.ui.selection.list .list > .item,\n.ui.selection.list > .item {\n  cursor: pointer;\n  background: transparent;\n  padding: 0.5em 0.5em;\n  margin: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  border-radius: 0.5em;\n  -webkit-transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n  transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n}\n.ui.selection.list .list > .item:last-child,\n.ui.selection.list > .item:last-child {\n  margin-bottom: 0em;\n}\n.ui.selection.list.list > .item:hover,\n.ui.selection.list > .item:hover {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.selection.list .list > .item:active,\n.ui.selection.list > .item:active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.9);\n}\n.ui.selection.list .list > .item.active,\n.ui.selection.list > .item.active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.selection.list > .item,\n.ui.inverted.selection.list > .item {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.inverted.selection.list > .item:hover,\n.ui.inverted.selection.list > .item:hover {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n.ui.inverted.selection.list > .item:active,\n.ui.inverted.selection.list > .item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n.ui.inverted.selection.list > .item.active,\n.ui.inverted.selection.list > .item.active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/* Celled / Divided Selection List */\n.ui.celled.selection.list .list > .item,\n.ui.divided.selection.list .list > .item,\n.ui.celled.selection.list > .item,\n.ui.divided.selection.list > .item {\n  border-radius: 0em;\n}\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.list > .item {\n  -webkit-transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n  transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n}\n.ui.animated.list:not(.horizontal) > .item:hover {\n  padding-left: 1em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.list:not(.selection) .list > .item,\n.ui.fitted.list:not(.selection) > .item {\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.fitted.selection.list .list > .item,\n.ui.fitted.selection.list > .item {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n/*-------------------\n      Bulleted\n--------------------*/\n\nul.ui.list,\n.ui.bulleted.list {\n  margin-left: 1.25rem;\n}\nul.ui.list li,\n.ui.bulleted.list .list > .item,\n.ui.bulleted.list > .item {\n  position: relative;\n}\nul.ui.list li:before,\n.ui.bulleted.list .list > .item:before,\n.ui.bulleted.list > .item:before {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  pointer-events: none;\n  position: absolute;\n  top: auto;\n  left: auto;\n  font-weight: normal;\n  margin-left: -1.25rem;\n  content: '•';\n  opacity: 1;\n  color: inherit;\n  vertical-align: top;\n}\nul.ui.list li:before,\n.ui.bulleted.list .list > a.item:before,\n.ui.bulleted.list > a.item:before {\n  color: rgba(0, 0, 0, 0.87);\n}\nul.ui.list ul,\n.ui.bulleted.list .list {\n  padding-left: 1.25rem;\n}\n\n/* Horizontal Bulleted */\nul.ui.horizontal.bulleted.list,\n.ui.horizontal.bulleted.list {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li,\n.ui.horizontal.bulleted.list > .item {\n  margin-left: 1.75rem;\n}\nul.ui.horizontal.bulleted.list li:first-child,\n.ui.horizontal.bulleted.list > .item:first-child {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li::before,\n.ui.horizontal.bulleted.list > .item::before {\n  color: rgba(0, 0, 0, 0.87);\n}\nul.ui.horizontal.bulleted.list li:first-child::before,\n.ui.horizontal.bulleted.list > .item:first-child::before {\n  display: none;\n}\n\n/*-------------------\n       Ordered\n--------------------*/\n\nol.ui.list,\n.ui.ordered.list,\n.ui.ordered.list .list,\nol.ui.list ol {\n  counter-reset: ordered;\n  margin-left: 1.25rem;\n  list-style-type: none;\n}\nol.ui.list li,\n.ui.ordered.list .list > .item,\n.ui.ordered.list > .item {\n  list-style-type: none;\n  position: relative;\n}\nol.ui.list li:before,\n.ui.ordered.list .list > .item:before,\n.ui.ordered.list > .item:before {\n  position: absolute;\n  top: auto;\n  left: auto;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  pointer-events: none;\n  margin-left: -1.25rem;\n  counter-increment: ordered;\n  content: counters(ordered, \".\") \" \";\n  text-align: right;\n  color: rgba(0, 0, 0, 0.87);\n  vertical-align: middle;\n  opacity: 0.8;\n}\nol.ui.inverted.list li:before,\n.ui.ordered.inverted.list .list > .item:before,\n.ui.ordered.inverted.list > .item:before {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Value */\n.ui.ordered.list > .list > .item[data-value],\n.ui.ordered.list > .item[data-value] {\n  content: attr(data-value);\n}\nol.ui.list li[value]:before {\n  content: attr(value);\n}\n\n/* Child Lists */\nol.ui.list ol,\n.ui.ordered.list .list {\n  margin-left: 1em;\n}\nol.ui.list ol li:before,\n.ui.ordered.list .list > .item:before {\n  margin-left: -2em;\n}\n\n/* Horizontal Ordered */\nol.ui.horizontal.list,\n.ui.ordered.horizontal.list {\n  margin-left: 0em;\n}\nol.ui.horizontal.list li:before,\n.ui.ordered.horizontal.list .list > .item:before,\n.ui.ordered.horizontal.list > .item:before {\n  position: static;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*-------------------\n       Divided\n--------------------*/\n\n.ui.divided.list > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.divided.list .list > .item {\n  border-top: none;\n}\n.ui.divided.list .item .list > .item {\n  border-top: none;\n}\n.ui.divided.list .list > .item:first-child,\n.ui.divided.list > .item:first-child {\n  border-top: none;\n}\n\n/* Sub Menu */\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\n  border-top-width: 1px;\n}\n\n/* Divided bulleted */\n.ui.divided.bulleted.list:not(.horizontal),\n.ui.divided.bulleted.list .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n.ui.divided.bulleted.list > .item:not(.horizontal) {\n  padding-left: 1.25rem;\n}\n\n/* Divided Ordered */\n.ui.divided.ordered.list {\n  margin-left: 0em;\n}\n.ui.divided.ordered.list .list > .item,\n.ui.divided.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.divided.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n.ui.divided.ordered.list .item .list > .item {\n  padding-left: 1em;\n}\n\n/* Divided Selection */\n.ui.divided.selection.list .list > .item,\n.ui.divided.selection.list > .item {\n  margin: 0em;\n  border-radius: 0em;\n}\n\n/* Divided horizontal */\n.ui.divided.horizontal.list {\n  margin-left: 0em;\n}\n.ui.divided.horizontal.list > .item:not(:first-child) {\n  padding-left: 0.5em;\n}\n.ui.divided.horizontal.list > .item:not(:last-child) {\n  padding-right: 0.5em;\n}\n.ui.divided.horizontal.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  line-height: 0.6;\n}\n.ui.horizontal.divided.list > .item:first-child {\n  border-left: none;\n}\n\n/* Inverted */\n.ui.divided.inverted.list > .item,\n.ui.divided.inverted.list > .list,\n.ui.divided.inverted.horizontal.list > .item {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Celled\n--------------------*/\n\n.ui.celled.list > .item,\n.ui.celled.list > .list {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.celled.list > .item:last-child {\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Padding on all elements */\n.ui.celled.list > .item:first-child,\n.ui.celled.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Sub Menu */\n.ui.celled.list .item .list > .item {\n  border-width: 0px;\n}\n.ui.celled.list .list > .item:first-child {\n  border-top-width: 0px;\n}\n\n/* Celled Bulleted */\n.ui.celled.bulleted.list {\n  margin-left: 0em;\n}\n.ui.celled.bulleted.list .list > .item,\n.ui.celled.bulleted.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.celled.bulleted.list .item .list {\n  margin-left: -1.25rem;\n  margin-right: -1.25rem;\n  padding-bottom: 0.21428571em;\n}\n\n/* Celled Ordered */\n.ui.celled.ordered.list {\n  margin-left: 0em;\n}\n.ui.celled.ordered.list .list > .item,\n.ui.celled.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.celled.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n.ui.celled.ordered.list .list > .item {\n  padding-left: 1em;\n}\n\n/* Celled Horizontal */\n.ui.horizontal.celled.list {\n  margin-left: 0em;\n}\n.ui.horizontal.celled.list .list > .item,\n.ui.horizontal.celled.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  line-height: 0.6;\n}\n.ui.horizontal.celled.list .list > .item:last-child,\n.ui.horizontal.celled.list > .item:last-child {\n  border-bottom: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Inverted */\n.ui.celled.inverted.list > .item,\n.ui.celled.inverted.list > .list {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n.ui.celled.inverted.horizontal.list .list > .item,\n.ui.celled.inverted.horizontal.list > .item {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n       Relaxed\n--------------------*/\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.42857143em;\n}\n.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.42857143em;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:first-child),\n.ui.horizontal.relaxed.list > .item:not(:first-child) {\n  padding-left: 1rem;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:last-child),\n.ui.horizontal.relaxed.list > .item:not(:last-child) {\n  padding-right: 1rem;\n}\n\n/* Very Relaxed */\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.85714286em;\n}\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.85714286em;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:first-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:first-child) {\n  padding-left: 1.5rem;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:last-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:last-child) {\n  padding-right: 1.5rem;\n}\n\n/*-------------------\n      Sizes\n--------------------*/\n\n.ui.mini.list {\n  font-size: 0.78571429em;\n}\n.ui.tiny.list {\n  font-size: 0.85714286em;\n}\n.ui.small.list {\n  font-size: 0.92857143em;\n}\n.ui.list {\n  font-size: 1em;\n}\n.ui.large.list {\n  font-size: 1.14285714em;\n}\n.ui.big.list {\n  font-size: 1.28571429em;\n}\n.ui.huge.list {\n  font-size: 1.42857143em;\n}\n.ui.massive.list {\n  font-size: 1.71428571em;\n}\n.ui.mini.horizontal.list .list > .item,\n.ui.mini.horizontal.list > .item {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.horizontal.list .list > .item,\n.ui.tiny.horizontal.list > .item {\n  font-size: 0.85714286rem;\n}\n.ui.small.horizontal.list .list > .item,\n.ui.small.horizontal.list > .item {\n  font-size: 0.92857143rem;\n}\n.ui.horizontal.list .list > .item,\n.ui.horizontal.list > .item {\n  font-size: 1rem;\n}\n.ui.large.horizontal.list .list > .item,\n.ui.large.horizontal.list > .item {\n  font-size: 1.14285714rem;\n}\n.ui.big.horizontal.list .list > .item,\n.ui.big.horizontal.list > .item {\n  font-size: 1.28571429rem;\n}\n.ui.huge.horizontal.list .list > .item,\n.ui.huge.horizontal.list > .item {\n  font-size: 1.42857143rem;\n}\n.ui.massive.horizontal.list .list > .item,\n.ui.massive.horizontal.list > .item {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/loader.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Loader\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Loader\n*******************************/\n\n\n/* Standard Size */\n.ui.loader {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: 0px;\n  text-align: center;\n  z-index: 1000;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n}\n\n/* Static Shape */\n.ui.loader:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n/* Active Shape */\n.ui.loader:after {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  -webkit-animation: loader 0.6s linear;\n          animation: loader 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/* Active Animation */\n@-webkit-keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n/* Sizes */\n.ui.mini.loader:before,\n.ui.mini.loader:after {\n  width: 1rem;\n  height: 1rem;\n  margin: 0em 0em 0em -0.5rem;\n}\n.ui.tiny.loader:before,\n.ui.tiny.loader:after {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  margin: 0em 0em 0em -0.57142857rem;\n}\n.ui.small.loader:before,\n.ui.small.loader:after {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  margin: 0em 0em 0em -0.85714286rem;\n}\n.ui.loader:before,\n.ui.loader:after {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  margin: 0em 0em 0em -1.14285714rem;\n}\n.ui.large.loader:before,\n.ui.large.loader:after {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  margin: 0em 0em 0em -1.71428571rem;\n}\n.ui.big.loader:before,\n.ui.big.loader:after {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  margin: 0em 0em 0em -1.85714286rem;\n}\n.ui.huge.loader:before,\n.ui.huge.loader:after {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  margin: 0em 0em 0em -2.07142857rem;\n}\n.ui.massive.loader:before,\n.ui.massive.loader:after {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  margin: 0em 0em 0em -2.28571429rem;\n}\n\n/*-------------------\n      Coupling\n--------------------*/\n\n\n/* Show inside active dimmer */\n.ui.dimmer .loader {\n  display: block;\n}\n\n/* Black Dimmer */\n.ui.dimmer .ui.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.dimmer .ui.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.ui.dimmer .ui.loader:after {\n  border-color: #FFFFFF transparent transparent;\n}\n\n/* White Dimmer (Inverted) */\n.ui.inverted.dimmer .ui.loader {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.dimmer .ui.loader:before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.ui.inverted.dimmer .ui.loader:after {\n  border-color: #767676 transparent transparent;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n        Text\n--------------------*/\n\n.ui.text.loader {\n  width: auto !important;\n  height: auto !important;\n  text-align: center;\n  font-style: normal;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.indeterminate.loader:after {\n  -webkit-animation-direction: reverse;\n          animation-direction: reverse;\n  -webkit-animation-duration: 1.2s;\n          animation-duration: 1.2s;\n}\n.ui.loader.active,\n.ui.loader.visible {\n  display: block;\n}\n.ui.loader.disabled,\n.ui.loader.hidden {\n  display: none;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*-------------------\n        Sizes\n--------------------*/\n\n\n/* Loader */\n.ui.inverted.dimmer .ui.mini.loader,\n.ui.mini.loader {\n  width: 1rem;\n  height: 1rem;\n  font-size: 0.78571429em;\n}\n.ui.inverted.dimmer .ui.tiny.loader,\n.ui.tiny.loader {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  font-size: 0.85714286em;\n}\n.ui.inverted.dimmer .ui.small.loader,\n.ui.small.loader {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  font-size: 0.92857143em;\n}\n.ui.inverted.dimmer .ui.loader,\n.ui.loader {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  font-size: 1em;\n}\n.ui.inverted.dimmer .ui.large.loader,\n.ui.large.loader {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  font-size: 1.14285714em;\n}\n.ui.inverted.dimmer .ui.big.loader,\n.ui.big.loader {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  font-size: 1.28571429em;\n}\n.ui.inverted.dimmer .ui.huge.loader,\n.ui.huge.loader {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  font-size: 1.42857143em;\n}\n.ui.inverted.dimmer .ui.massive.loader,\n.ui.massive.loader {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  font-size: 1.71428571em;\n}\n\n/* Text Loader */\n.ui.mini.text.loader {\n  min-width: 1rem;\n  padding-top: 1.78571429rem;\n}\n.ui.tiny.text.loader {\n  min-width: 1.14285714rem;\n  padding-top: 1.92857143rem;\n}\n.ui.small.text.loader {\n  min-width: 1.71428571rem;\n  padding-top: 2.5rem;\n}\n.ui.text.loader {\n  min-width: 2.28571429rem;\n  padding-top: 3.07142857rem;\n}\n.ui.large.text.loader {\n  min-width: 3.42857143rem;\n  padding-top: 4.21428571rem;\n}\n.ui.big.text.loader {\n  min-width: 3.71428571rem;\n  padding-top: 4.5rem;\n}\n.ui.huge.text.loader {\n  min-width: 4.14285714rem;\n  padding-top: 4.92857143rem;\n}\n.ui.massive.text.loader {\n  min-width: 4.57142857rem;\n  padding-top: 5.35714286rem;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.ui.inverted.loader:after {\n  border-top-color: #FFFFFF;\n}\n\n/*-------------------\n       Inline\n--------------------*/\n\n.ui.inline.loader {\n  position: relative;\n  vertical-align: middle;\n  margin: 0em;\n  left: 0em;\n  top: 0em;\n  -webkit-transform: none;\n          transform: none;\n}\n.ui.inline.loader.active,\n.ui.inline.loader.visible {\n  display: inline-block;\n}\n\n/* Centered Inline */\n.ui.centered.inline.loader.active,\n.ui.centered.inline.loader.visible {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/menu.css",
    "content": "/*\n * # Semantic - Menu\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributor\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1rem 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  font-weight: normal;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  min-height: 2.85714286em;\n}\n.ui.menu:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n.ui.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n/*--------------\n    Sub-Menu\n---------------*/\n\n.ui.menu .menu {\n  margin: 0em;\n}\n.ui.menu:not(.vertical) > .menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.menu:not(.vertical) .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.menu .item {\n  position: relative;\n  vertical-align: middle;\n  line-height: 1;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background: none;\n  padding: 0.92857143em 1.14285714em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: normal;\n  -webkit-transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n}\n.ui.menu > .item:first-child {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Border */\n.ui.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  right: 0px;\n  height: 100%;\n  width: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n  Text Content\n---------------*/\n\n.ui.menu .text.item > *,\n.ui.menu .item > a:not(.ui),\n.ui.menu .item > p:only-child {\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n  line-height: 1.3;\n}\n.ui.menu .item > p:first-child {\n  margin-top: 0;\n}\n.ui.menu .item > p:last-child {\n  margin-bottom: 0;\n}\n\n/*--------------\n      Icons\n---------------*/\n\n.ui.menu .item > i.icon {\n  opacity: 0.9;\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.menu:not(.vertical) .item > .button {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n  padding-bottom: 0.78571429em;\n  padding-top: 0.78571429em;\n  font-size: 1em;\n}\n\n/*----------------\n Grid / Container\n-----------------*/\n\n.ui.menu > .grid,\n.ui.menu > .container {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: inherit;\n      -ms-flex-align: inherit;\n          align-items: inherit;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: inherit;\n          flex-direction: inherit;\n}\n\n/*--------------\n     Inputs\n---------------*/\n\n.ui.menu .item > .input {\n  width: 100%;\n}\n.ui.menu:not(.vertical) .item > .input {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n}\n.ui.menu .item > .input input {\n  font-size: 1em;\n  padding-top: 0.57142857em;\n  padding-bottom: 0.57142857em;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.menu .header.item,\n.ui.vertical.menu .header.item {\n  margin: 0em;\n  background: '';\n  text-transform: normal;\n  font-weight: bold;\n}\n.ui.vertical.menu .item > .header:not(.ui) {\n  margin: 0em 0em 0.5em;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n/*--------------\n    Dropdowns\n---------------*/\n\n\n/* Dropdown Icon */\n.ui.menu .item > i.dropdown.icon {\n  padding: 0em;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/* Menu */\n.ui.menu .dropdown.item .menu {\n  left: 0px;\n  min-width: calc(100% - 1px);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  background: #FFFFFF;\n  margin: 0em 0px 0px;\n  box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n      -ms-flex-direction: column !important;\n          flex-direction: column !important;\n}\n\n/* Menu Items */\n.ui.menu .ui.dropdown .menu > .item {\n  margin: 0;\n  text-align: left;\n  font-size: 1em !important;\n  padding: 0.78571429em 1.14285714em !important;\n  background: transparent !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n  text-transform: none !important;\n  font-weight: normal !important;\n  box-shadow: none !important;\n  -webkit-transition: none !important;\n  transition: none !important;\n}\n.ui.menu .ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown .menu > .selected.item {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown .menu > .active.item {\n  background: rgba(0, 0, 0, 0.03) !important;\n  font-weight: bold !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\n  display: block;\n}\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\n  display: inline-block;\n  font-size: 1em !important;\n  float: none;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Secondary */\n.ui.secondary.menu .dropdown.item > .menu,\n.ui.text.menu .dropdown.item > .menu {\n  border-radius: 0.28571429rem;\n  margin-top: 0.35714286em;\n}\n\n/* Pointing */\n.ui.menu .pointing.dropdown.item .menu {\n  margin-top: 0.75em;\n}\n\n/* Inverted */\n.ui.inverted.menu .search.dropdown.item > .search,\n.ui.inverted.menu .search.dropdown.item > .text {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Vertical */\n.ui.vertical.menu .dropdown.item > .icon {\n  float: right;\n  content: \"\\f0da\";\n  margin-left: 1em;\n}\n.ui.vertical.menu .dropdown.item .menu {\n  left: 100%;\n  min-width: 0;\n  margin: 0em 0em 0em 0em;\n  box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0.28571429rem 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.menu .dropdown.item.upward .menu {\n  bottom: 0;\n}\n.ui.vertical.menu .dropdown.item:not(.upward) .menu {\n  top: 0;\n}\n.ui.vertical.menu .active.dropdown.item {\n  border-top-right-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.vertical.menu .dropdown.active.item {\n  box-shadow: none;\n}\n\n/* Evenly Divided */\n.ui.item.menu .dropdown .menu .item {\n  width: 100%;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n.ui.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-left: 1em;\n  padding: 0.3em 0.78571429em;\n}\n.ui.vertical.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-top: -0.15em;\n  margin-bottom: -0.15em;\n  padding: 0.3em 0.78571429em;\n}\n.ui.menu .item > .floating.label {\n  padding: 0.3em 0.78571429em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.menu .item > img:not(.ui) {\n  display: inline-block;\n  vertical-align: middle;\n  margin: -0.3em 0em;\n  width: 2.5em;\n}\n.ui.vertical.menu .item > img:not(.ui):only-child {\n  display: block;\n  max-width: 100%;\n  width: auto;\n}\n\n\n/*******************************\n          Coupling\n*******************************/\n\n\n/*--------------\n     Sidebar\n---------------*/\n\n\n/* Show vertical dividers below last */\n.ui.vertical.sidebar.menu > .item:first-child:before {\n  display: block !important;\n}\n.ui.vertical.sidebar.menu > .item::before {\n  top: auto;\n  bottom: 0px;\n}\n\n/*--------------\n    Container\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.menu > .ui.container {\n    width: 100% !important;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\n    border-left: 1px solid rgba(34, 36, 38, 0.1);\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.link.menu .item:hover,\n.ui.menu .dropdown.item:hover,\n.ui.menu .link.item:hover,\n.ui.menu a.item:hover {\n  cursor: pointer;\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Pressed\n---------------*/\n\n.ui.link.menu .item:active,\n.ui.menu .link.item:active,\n.ui.menu a.item:active {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  font-weight: normal;\n  box-shadow: none;\n}\n.ui.menu .active.item > i.icon {\n  opacity: 1;\n}\n\n/*--------------\n  Active Hover\n---------------*/\n\n.ui.menu .active.item:hover,\n.ui.vertical.menu .active.item:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.menu .item.disabled,\n.ui.menu .item.disabled:hover {\n  cursor: default;\n  background-color: transparent !important;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*------------------\nFloated Menu / Item\n-------------------*/\n\n\n/* Left Floated */\n.ui.menu:not(.vertical) .left.item,\n.ui.menu:not(.vertical) .left.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-right: auto !important;\n}\n\n/* Right Floated */\n.ui.menu:not(.vertical) .right.item,\n.ui.menu:not(.vertical) .right.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: auto !important;\n}\n\n/* Swapped Borders */\n.ui.menu .right.item::before,\n.ui.menu .right.menu > .item::before {\n  right: auto;\n  left: 0;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.menu {\n  display: block;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  background: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n/*--- Item ---*/\n\n.ui.vertical.menu .item {\n  display: block;\n  background: none;\n  border-top: none;\n  border-right: none;\n}\n.ui.vertical.menu > .item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px;\n}\n.ui.vertical.menu > .item:last-child {\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem;\n}\n\n/*--- Label ---*/\n\n.ui.vertical.menu .item > .label {\n  float: right;\n  text-align: center;\n}\n\n/*--- Icon ---*/\n\n.ui.vertical.menu .item > i.icon {\n  width: 1.18em;\n  float: right;\n  margin: 0em 0em 0em 0.5em;\n}\n.ui.vertical.menu .item > .label + i.icon {\n  float: none;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*--- Border ---*/\n\n.ui.vertical.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0px;\n  width: 100%;\n  height: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n.ui.vertical.menu .item:first-child:before {\n  display: none !important;\n}\n\n/*--- Sub Menu ---*/\n\n.ui.vertical.menu .item > .menu {\n  margin: 0.5em -1.14285714em 0em;\n}\n.ui.vertical.menu .menu .item {\n  background: none;\n  padding: 0.5em 1.33333333em;\n  font-size: 0.85714286em;\n  color: rgba(0, 0, 0, 0.5);\n}\n.ui.vertical.menu .item .menu a.item:hover,\n.ui.vertical.menu .item .menu .link.item:hover {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.vertical.menu .menu .item:before {\n  display: none;\n}\n\n/* Vertical Active */\n.ui.vertical.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  border-radius: 0em;\n  box-shadow: none;\n}\n.ui.vertical.menu > .active.item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.vertical.menu > .active.item:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.menu > .active.item:only-child {\n  border-radius: 0.28571429rem;\n}\n.ui.vertical.menu .active.item .menu .active.item {\n  border-left: none;\n}\n.ui.vertical.menu .item .menu .active.item {\n  background-color: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Tabular\n---------------*/\n\n.ui.tabular.menu {\n  border-radius: 0em;\n  box-shadow: none !important;\n  border: none;\n  background: none transparent;\n  border-bottom: 1px solid #D4D4D5;\n}\n.ui.tabular.fluid.menu {\n  width: calc(100% +  2px ) !important;\n}\n.ui.tabular.menu .item {\n  background: transparent;\n  border-bottom: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  padding: 0.92857143em 1.42857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.tabular.menu .item:before {\n  display: none;\n}\n\n/* Hover */\n.ui.tabular.menu .item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active */\n.ui.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-top-width: 1px;\n  border-color: #D4D4D5;\n  font-weight: bold;\n  margin-bottom: -1px;\n  box-shadow: none;\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px !important;\n}\n\n/* Coupling with segment for attachment */\n.ui.tabular.menu + .attached:not(.top).segment,\n.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {\n  border-top: none;\n  margin-left: 0px;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 100%;\n}\n.top.attached.segment + .ui.bottom.tabular.menu {\n  position: relative;\n  width: calc(100% +  2px );\n  left: -1px;\n}\n\n/* Bottom Vertical Tabular */\n.ui.bottom.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-top: 1px solid #D4D4D5;\n}\n.ui.bottom.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: none;\n}\n.ui.bottom.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: -1px 0px 0px 0px;\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem !important;\n}\n\n/* Vertical Tabular (Left) */\n.ui.vertical.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: 1px solid #D4D4D5;\n}\n.ui.vertical.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-right: none;\n}\n.ui.vertical.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px -1px 0px 0px;\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem !important;\n}\n\n/* Vertical Right Tabular */\n.ui.vertical.right.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: none;\n  border-left: 1px solid #D4D4D5;\n}\n.ui.vertical.right.tabular.menu .item {\n  background: none;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-left: none;\n}\n.ui.vertical.right.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px 0px 0px -1px;\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px !important;\n}\n\n/* Dropdown */\n.ui.tabular.menu .active.dropdown.item {\n  margin-bottom: 0px;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  border-bottom: none;\n}\n\n/*--------------\n   Pagination\n---------------*/\n\n.ui.pagination.menu {\n  margin: 0em;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.ui.pagination.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.pagination.menu .item:last-child:before {\n  display: none;\n}\n.ui.pagination.menu .item {\n  min-width: 3em;\n  text-align: center;\n}\n.ui.pagination.menu .icon.item i.icon {\n  vertical-align: top;\n}\n\n/* Active */\n.ui.pagination.menu .active.item {\n  border-top: none;\n  padding-top: 0.92857143em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: none;\n}\n\n/*--------------\n   Secondary\n---------------*/\n\n.ui.secondary.menu {\n  background: none;\n  margin-left: -0.35714286em;\n  margin-right: -0.35714286em;\n  border-radius: 0em;\n  border: none;\n  box-shadow: none;\n}\n\n/* Item */\n.ui.secondary.menu .item {\n  -ms-flex-item-align: center;\n      -ms-grid-row-align: center;\n      align-self: center;\n  box-shadow: none;\n  border: none;\n  padding: 0.78571429em 0.92857143em;\n  margin: 0em 0.35714286em;\n  background: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-radius: 0.28571429rem;\n}\n\n/* No Divider */\n.ui.secondary.menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.secondary.menu .header.item {\n  border-radius: 0em;\n  border-right: none;\n  background: none transparent;\n}\n\n/* Image */\n.ui.secondary.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/* Hover */\n.ui.secondary.menu .dropdown.item:hover,\n.ui.secondary.menu .link.item:hover,\n.ui.secondary.menu a.item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n.ui.secondary.menu .active.item {\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  border-radius: 0.28571429rem;\n}\n\n/* Active Hover */\n.ui.secondary.menu .active.item:hover {\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.secondary.inverted.menu .link.item,\n.ui.secondary.inverted.menu a.item {\n  color: rgba(255, 255, 255, 0.7) !important;\n}\n.ui.secondary.inverted.menu .dropdown.item:hover,\n.ui.secondary.inverted.menu .link.item:hover,\n.ui.secondary.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff !important;\n}\n.ui.secondary.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n/* Fix item margins */\n.ui.secondary.item.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n.ui.secondary.item.menu .item:last-child {\n  margin-right: 0em;\n}\n.ui.secondary.attached.menu {\n  box-shadow: none;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {\n  margin: 0em -0.92857143em;\n}\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 1.33333333em;\n}\n\n/*---------------------\n   Secondary Vertical\n-----------------------*/\n\n.ui.secondary.vertical.menu > .item {\n  border: none;\n  margin: 0em 0em 0.35714286em;\n  border-radius: 0.28571429rem !important;\n}\n.ui.secondary.vertical.menu > .header.item {\n  border-radius: 0em;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item > .menu .item {\n  background-color: transparent;\n}\n\n/* Inverted */\n.ui.secondary.inverted.menu {\n  background-color: transparent;\n}\n\n/*---------------------\n   Secondary Pointing\n-----------------------*/\n\n.ui.secondary.pointing.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n  border-bottom: 2px solid rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.pointing.menu .item {\n  border-bottom-color: transparent;\n  border-bottom-style: solid;\n  border-radius: 0em;\n  -ms-flex-item-align: end;\n      align-self: flex-end;\n  margin: 0em 0em -2px;\n  padding: 0.85714286em 1.14285714em;\n  border-bottom-width: 2px;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Item Types */\n.ui.secondary.pointing.menu .header.item {\n  color: rgba(0, 0, 0, 0.85) !important;\n}\n.ui.secondary.pointing.menu .text.item {\n  box-shadow: none !important;\n}\n.ui.secondary.pointing.menu .item:after {\n  display: none;\n}\n\n/* Hover */\n.ui.secondary.pointing.menu .dropdown.item:hover,\n.ui.secondary.pointing.menu .link.item:hover,\n.ui.secondary.pointing.menu a.item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Pressed */\n.ui.secondary.pointing.menu .dropdown.item:active,\n.ui.secondary.pointing.menu .link.item:active,\n.ui.secondary.pointing.menu a.item:active {\n  background-color: transparent;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Active */\n.ui.secondary.pointing.menu .active.item {\n  background-color: transparent;\n  box-shadow: none;\n  border-color: #1B1C1D;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Hover */\n.ui.secondary.pointing.menu .active.item:hover {\n  border-color: #1B1C1D;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Dropdown */\n.ui.secondary.pointing.menu .active.dropdown.item {\n  border-color: transparent;\n}\n\n/* Vertical Pointing */\n.ui.secondary.vertical.pointing.menu {\n  border-bottom-width: 0px;\n  border-right-width: 2px;\n  border-right-style: solid;\n  border-right-color: rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.vertical.pointing.menu .item {\n  border-bottom: none;\n  border-right-style: solid;\n  border-right-color: transparent;\n  border-radius: 0em !important;\n  margin: 0em -2px 0em 0em;\n  border-right-width: 2px;\n}\n\n/* Vertical Active */\n.ui.secondary.vertical.pointing.menu .active.item {\n  border-color: #1B1C1D;\n}\n\n/* Inverted */\n.ui.secondary.inverted.pointing.menu {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n.ui.secondary.inverted.pointing.menu {\n  border-width: 2px;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.inverted.pointing.menu .item {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.secondary.inverted.pointing.menu .header.item {\n  color: #FFFFFF !important;\n}\n\n/* Hover */\n.ui.secondary.inverted.pointing.menu .link.item:hover,\n.ui.secondary.inverted.pointing.menu a.item:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n.ui.secondary.inverted.pointing.menu .active.item {\n  border-color: #FFFFFF;\n  color: #ffffff;\n}\n\n/*--------------\n    Text Menu\n---------------*/\n\n.ui.text.menu {\n  background: none transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n  margin: 1em -0.5em;\n}\n.ui.text.menu .item {\n  border-radius: 0px;\n  box-shadow: none;\n  -ms-flex-item-align: center;\n      -ms-grid-row-align: center;\n      align-self: center;\n  margin: 0em 0em;\n  padding: 0.35714286em 0.5em;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.6);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Border */\n.ui.text.menu .item:before,\n.ui.text.menu .menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.text.menu .header.item {\n  background-color: transparent;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.92857143em;\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n/* Image */\n.ui.text.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/*--- fluid text ---*/\n\n.ui.text.item.menu .item {\n  margin: 0em;\n}\n\n/*--- vertical text ---*/\n\n.ui.vertical.text.menu {\n  margin: 1em 0em;\n}\n.ui.vertical.text.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.vertical.text.menu:last-child {\n  margin-bottom: 0rem;\n}\n.ui.vertical.text.menu .item {\n  margin: 0.57142857em 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.vertical.text.menu .item > i.icon {\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n.ui.vertical.text.menu .header.item {\n  margin: 0.57142857em 0em 0.71428571em;\n}\n\n/* Vertical Sub Menu */\n.ui.vertical.text.menu .item:not(.dropdown) > .menu {\n  margin: 0em;\n}\n.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 0em;\n}\n\n/*--- hover ---*/\n\n.ui.text.menu .item:hover {\n  opacity: 1;\n  background-color: transparent;\n}\n\n/*--- active ---*/\n\n.ui.text.menu .active.item {\n  background-color: transparent;\n  border: none;\n  box-shadow: none;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--- active hover ---*/\n\n.ui.text.menu .active.item:hover {\n  background-color: transparent;\n}\n\n/* Disable Bariations */\n.ui.text.pointing.menu .active.item:after {\n  box-shadow: none;\n}\n.ui.text.attached.menu {\n  box-shadow: none;\n}\n\n/* Inverted */\n.ui.inverted.text.menu,\n.ui.inverted.text.menu .item,\n.ui.inverted.text.menu .item:hover,\n.ui.inverted.text.menu .active.item {\n  background-color: transparent !important;\n}\n\n/* Fluid */\n.ui.fluid.text.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n\n/* Vertical Menu */\n.ui.vertical.icon.menu {\n  display: inline-block;\n  width: auto;\n}\n\n/* Item */\n.ui.icon.menu .item {\n  height: auto;\n  text-align: center;\n  color: #1B1C1D;\n}\n\n/* Icon */\n.ui.icon.menu .item > .icon:not(.dropdown) {\n  margin: 0;\n  opacity: 1;\n}\n\n/* Icon Gylph */\n.ui.icon.menu .icon:before {\n  opacity: 1;\n}\n\n/* (x) Item Icon */\n.ui.menu .icon.item > .icon {\n  width: auto;\n  margin: 0em auto;\n}\n\n/* Vertical Icon */\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\n  display: block;\n  opacity: 1;\n  margin: 0em auto;\n  float: none;\n}\n\n/* Inverted */\n.ui.inverted.icon.menu .item {\n  color: #FFFFFF;\n}\n\n/*--------------\n   Labeled Icon\n---------------*/\n\n\n/* Menu */\n.ui.labeled.icon.menu {\n  text-align: center;\n}\n\n/* Item */\n.ui.labeled.icon.menu .item {\n  min-width: 6em;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n\n/* Icon */\n.ui.labeled.icon.menu .item > .icon:not(.dropdown) {\n  height: 1em;\n  display: block;\n  font-size: 1.71428571em !important;\n  margin: 0em auto 0.5rem !important;\n}\n\n/* Fluid */\n.ui.fluid.labeled.icon.menu > .item {\n  min-width: 0em;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.stackable.menu .item {\n    width: 100% !important;\n  }\n  .ui.stackable.menu .item:before {\n    position: absolute;\n    content: '';\n    top: auto;\n    bottom: 0px;\n    left: 0px;\n    width: 100%;\n    height: 1px;\n    background: rgba(34, 36, 38, 0.1);\n  }\n  .ui.stackable.menu .left.menu,\n  .ui.stackable.menu .left.item {\n    margin-right: 0 !important;\n  }\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .right.item {\n    margin-left: 0 !important;\n  }\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/*--- Standard Colors  ---*/\n\n.ui.menu .red.active.item,\n.ui.red.menu .active.item {\n  border-color: #DB2828 !important;\n  color: #DB2828 !important;\n}\n.ui.menu .orange.active.item,\n.ui.orange.menu .active.item {\n  border-color: #F2711C !important;\n  color: #F2711C !important;\n}\n.ui.menu .yellow.active.item,\n.ui.yellow.menu .active.item {\n  border-color: #FBBD08 !important;\n  color: #FBBD08 !important;\n}\n.ui.menu .olive.active.item,\n.ui.olive.menu .active.item {\n  border-color: #B5CC18 !important;\n  color: #B5CC18 !important;\n}\n.ui.menu .green.active.item,\n.ui.green.menu .active.item {\n  border-color: #21BA45 !important;\n  color: #21BA45 !important;\n}\n.ui.menu .teal.active.item,\n.ui.teal.menu .active.item {\n  border-color: #00B5AD !important;\n  color: #00B5AD !important;\n}\n.ui.menu .blue.active.item,\n.ui.blue.menu .active.item {\n  border-color: #2185D0 !important;\n  color: #2185D0 !important;\n}\n.ui.menu .violet.active.item,\n.ui.violet.menu .active.item {\n  border-color: #6435C9 !important;\n  color: #6435C9 !important;\n}\n.ui.menu .purple.active.item,\n.ui.purple.menu .active.item {\n  border-color: #A333C8 !important;\n  color: #A333C8 !important;\n}\n.ui.menu .pink.active.item,\n.ui.pink.menu .active.item {\n  border-color: #E03997 !important;\n  color: #E03997 !important;\n}\n.ui.menu .brown.active.item,\n.ui.brown.menu .active.item {\n  border-color: #A5673F !important;\n  color: #A5673F !important;\n}\n.ui.menu .grey.active.item,\n.ui.grey.menu .active.item {\n  border-color: #767676 !important;\n  color: #767676 !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.menu {\n  border: 0px solid transparent;\n  background: #1B1C1D;\n  box-shadow: none;\n}\n\n/* Menu Item */\n.ui.inverted.menu .item,\n.ui.inverted.menu .item > a:not(.ui) {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.menu .item.menu {\n  background: transparent;\n}\n\n/*--- Border ---*/\n\n.ui.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n.ui.vertical.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n/* Sub Menu */\n.ui.vertical.inverted.menu .menu .item,\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/* Header */\n.ui.inverted.menu .header.item {\n  margin: 0em;\n  background: transparent;\n  box-shadow: none;\n}\n\n/* Disabled */\n.ui.inverted.menu .item.disabled,\n.ui.inverted.menu .item.disabled:hover {\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/*--- Hover ---*/\n\n.ui.link.inverted.menu .item:hover,\n.ui.inverted.menu .dropdown.item:hover,\n.ui.inverted.menu .link.item:hover,\n.ui.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n.ui.vertical.inverted.menu .item .menu a.item:hover,\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\n  background: transparent;\n  color: #ffffff;\n}\n\n/*--- Pressed ---*/\n\n.ui.inverted.menu a.item:active,\n.ui.inverted.menu .link.item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/*--- Active ---*/\n\n.ui.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n.ui.inverted.vertical.menu .item .menu .active.item {\n  background: transparent;\n  color: #FFFFFF;\n}\n.ui.inverted.pointing.menu .active.item:after {\n  background: #3D3E3F !important;\n  margin: 0em !important;\n  box-shadow: none !important;\n  border: none !important;\n}\n\n/*--- Active Hover ---*/\n\n.ui.inverted.menu .active.item:hover {\n  background: rgba(255, 255, 255, 0.15);\n  color: #FFFFFF !important;\n}\n.ui.inverted.pointing.menu .active.item:hover:after {\n  background: #3D3E3F !important;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.floated.menu {\n  float: left;\n  margin: 0rem 0.5rem 0rem 0rem;\n}\n.ui.floated.menu .item:last-child:before {\n  display: none;\n}\n.ui.right.floated.menu {\n  float: right;\n  margin: 0rem 0rem 0rem 0.5rem;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Red */\n.ui.inverted.menu .red.active.item,\n.ui.inverted.red.menu {\n  background-color: #DB2828;\n}\n.ui.inverted.red.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.red.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Orange */\n.ui.inverted.menu .orange.active.item,\n.ui.inverted.orange.menu {\n  background-color: #F2711C;\n}\n.ui.inverted.orange.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.orange.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Yellow */\n.ui.inverted.menu .yellow.active.item,\n.ui.inverted.yellow.menu {\n  background-color: #FBBD08;\n}\n.ui.inverted.yellow.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.yellow.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Olive */\n.ui.inverted.menu .olive.active.item,\n.ui.inverted.olive.menu {\n  background-color: #B5CC18;\n}\n.ui.inverted.olive.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.olive.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Green */\n.ui.inverted.menu .green.active.item,\n.ui.inverted.green.menu {\n  background-color: #21BA45;\n}\n.ui.inverted.green.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.green.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Teal */\n.ui.inverted.menu .teal.active.item,\n.ui.inverted.teal.menu {\n  background-color: #00B5AD;\n}\n.ui.inverted.teal.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.teal.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Blue */\n.ui.inverted.menu .blue.active.item,\n.ui.inverted.blue.menu {\n  background-color: #2185D0;\n}\n.ui.inverted.blue.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.blue.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Violet */\n.ui.inverted.menu .violet.active.item,\n.ui.inverted.violet.menu {\n  background-color: #6435C9;\n}\n.ui.inverted.violet.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.violet.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Purple */\n.ui.inverted.menu .purple.active.item,\n.ui.inverted.purple.menu {\n  background-color: #A333C8;\n}\n.ui.inverted.purple.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.purple.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Pink */\n.ui.inverted.menu .pink.active.item,\n.ui.inverted.pink.menu {\n  background-color: #E03997;\n}\n.ui.inverted.pink.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.pink.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Brown */\n.ui.inverted.menu .brown.active.item,\n.ui.inverted.brown.menu {\n  background-color: #A5673F;\n}\n.ui.inverted.brown.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.brown.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Grey */\n.ui.inverted.menu .grey.active.item,\n.ui.inverted.grey.menu {\n  background-color: #767676;\n}\n.ui.inverted.grey.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.grey.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.menu .item,\n.ui.fitted.menu .item .menu .item,\n.ui.menu .fitted.item {\n  padding: 0em;\n}\n.ui.horizontally.fitted.menu .item,\n.ui.horizontally.fitted.menu .item .menu .item,\n.ui.menu .horizontally.fitted.item {\n  padding-top: 0.92857143em;\n  padding-bottom: 0.92857143em;\n}\n.ui.vertically.fitted.menu .item,\n.ui.vertically.fitted.menu .item .menu .item,\n.ui.menu .vertically.fitted.item {\n  padding-left: 1.14285714em;\n  padding-right: 1.14285714em;\n}\n\n/*--------------\n   Borderless\n---------------*/\n\n.ui.borderless.menu .item:before,\n.ui.borderless.menu .item .menu .item:before,\n.ui.menu .borderless.item:before {\n  background: none !important;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.menu {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin: 0em;\n  vertical-align: middle;\n}\n.ui.compact.vertical.menu {\n  display: inline-block;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.compact.menu .item:last-child:before {\n  display: none;\n}\n.ui.compact.vertical.menu {\n  width: auto !important;\n}\n.ui.compact.vertical.menu .item:last-child::before {\n  display: block;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.menu.fluid,\n.ui.vertical.menu.fluid {\n  width: 100% !important;\n}\n\n/*-------------------\n      Evenly Sized\n--------------------*/\n\n.ui.item.menu,\n.ui.item.menu .item {\n  width: 100%;\n  padding-left: 0em !important;\n  padding-right: 0em !important;\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n  text-align: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.item.menu .item:last-child:before {\n  display: none;\n}\n.ui.menu.two.item .item {\n  width: 50%;\n}\n.ui.menu.three.item .item {\n  width: 33.333%;\n}\n.ui.menu.four.item .item {\n  width: 25%;\n}\n.ui.menu.five.item .item {\n  width: 20%;\n}\n.ui.menu.six.item .item {\n  width: 16.666%;\n}\n.ui.menu.seven.item .item {\n  width: 14.285%;\n}\n.ui.menu.eight.item .item {\n  width: 12.500%;\n}\n.ui.menu.nine.item .item {\n  width: 11.11%;\n}\n.ui.menu.ten.item .item {\n  width: 10.0%;\n}\n.ui.menu.eleven.item .item {\n  width: 9.09%;\n}\n.ui.menu.twelve.item .item {\n  width: 8.333%;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.menu.fixed {\n  position: fixed;\n  z-index: 101;\n  margin: 0em;\n  width: 100%;\n}\n.ui.menu.fixed,\n.ui.menu.fixed .item:first-child,\n.ui.menu.fixed .item:last-child {\n  border-radius: 0px !important;\n}\n.ui.fixed.menu,\n.ui[class*=\"top fixed\"].menu {\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n}\n.ui[class*=\"top fixed\"].menu {\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n.ui[class*=\"right fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-right: none;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n.ui[class*=\"bottom fixed\"].menu {\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  bottom: 0px;\n  left: 0px;\n  top: auto;\n  right: auto;\n}\n.ui[class*=\"left fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-left: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n/* Coupling with Grid */\n.ui.fixed.menu + .ui.grid {\n  padding-top: 2.75rem;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.menu .item:after {\n  visibility: hidden;\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  background: none;\n  margin: 0.5px 0em 0em;\n  width: 0.57142857em;\n  height: 0.57142857em;\n  border: none;\n  border-bottom: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n  z-index: 2;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.vertical.pointing.menu .item:after {\n  position: absolute;\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n          transform: translateX(50%) translateY(-50%) rotate(45deg);\n  margin: 0em -0.5px 0em 0em;\n  border: none;\n  border-top: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n}\n\n/* Active */\n.ui.pointing.menu .active.item:after {\n  visibility: visible;\n}\n.ui.pointing.menu .active.dropdown.item:after {\n  visibility: hidden;\n}\n\n/* Don't double up pointers */\n.ui.pointing.menu .dropdown.active.item:after,\n.ui.pointing.menu .active.item .menu .active.item:after {\n  display: none;\n}\n\n/* Colors */\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .menu .active.item:after {\n  background-color: #FFFFFF;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* Middle */\n.ui.attached.menu {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  box-shadow: none;\n}\n.ui.attached + .ui.attached.menu:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].menu {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.menu[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].menu {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].menu:last-child {\n  margin-bottom: 0em;\n}\n\n/* Attached Menu Item */\n.ui.top.attached.menu > .item:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.bottom.attached.menu > .item:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/* Tabular Attached */\n.ui.attached.menu:not(.tabular) {\n  border: 1px solid #D4D4D5;\n}\n.ui.attached.inverted.menu {\n  border: none;\n}\n.ui.attached.tabular.menu {\n  margin-left: 0;\n  margin-right: 0;\n  width: 100%;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n\n/* Mini */\n.ui.mini.menu {\n  font-size: 0.78571429rem;\n}\n.ui.mini.vertical.menu {\n  width: 9rem;\n}\n\n/* Tiny */\n.ui.tiny.menu {\n  font-size: 0.85714286rem;\n}\n.ui.tiny.vertical.menu {\n  width: 11rem;\n}\n\n/* Small */\n.ui.small.menu {\n  font-size: 0.92857143rem;\n}\n.ui.small.vertical.menu {\n  width: 13rem;\n}\n\n/* Medium */\n.ui.menu {\n  font-size: 1rem;\n}\n.ui.vertical.menu {\n  width: 15rem;\n}\n\n/* Large */\n.ui.large.menu {\n  font-size: 1.07142857rem;\n}\n.ui.large.vertical.menu {\n  width: 18rem;\n}\n\n/* Huge */\n.ui.huge.menu {\n  font-size: 1.14285714rem;\n}\n.ui.huge.vertical.menu {\n  width: 20rem;\n}\n\n/* Big */\n.ui.big.menu {\n  font-size: 1.21428571rem;\n}\n.ui.big.vertical.menu {\n  width: 22rem;\n}\n\n/* Massive */\n.ui.massive.menu {\n  font-size: 1.28571429rem;\n}\n.ui.massive.vertical.menu {\n  width: 25rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/message.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Message\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Message\n*******************************/\n\n.ui.message {\n  position: relative;\n  min-height: 1em;\n  margin: 1em 0em;\n  background: #F8F8F9;\n  padding: 1em 1.5em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.message:first-child {\n  margin-top: 0em;\n}\n.ui.message:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n\n/* Header */\n.ui.message .header {\n  display: block;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  margin: -0.14285em 0em 0rem 0em;\n}\n\n/* Default font size */\n.ui.message .header:not(.ui) {\n  font-size: 1.14285714em;\n}\n\n/* Paragraph */\n.ui.message p {\n  opacity: 0.85;\n  margin: 0.75em 0em;\n}\n.ui.message p:first-child {\n  margin-top: 0em;\n}\n.ui.message p:last-child {\n  margin-bottom: 0em;\n}\n.ui.message .header + p {\n  margin-top: 0.25em;\n}\n\n/* List */\n.ui.message .list:not(.ui) {\n  text-align: left;\n  padding: 0em;\n  opacity: 0.85;\n  list-style-position: inside;\n  margin: 0.5em 0em 0em;\n}\n.ui.message .list:not(.ui):first-child {\n  margin-top: 0em;\n}\n.ui.message .list:not(.ui):last-child {\n  margin-bottom: 0em;\n}\n.ui.message .list:not(.ui) li {\n  position: relative;\n  list-style-type: none;\n  margin: 0em 0em 0.3em 1em;\n  padding: 0em;\n}\n.ui.message .list:not(.ui) li:before {\n  position: absolute;\n  content: '•';\n  left: -1em;\n  height: 100%;\n  vertical-align: baseline;\n}\n.ui.message .list:not(.ui) li:last-child {\n  margin-bottom: 0em;\n}\n\n/* Icon */\n.ui.message > .icon {\n  margin-right: 0.6em;\n}\n\n/* Close Icon */\n.ui.message > .close.icon {\n  cursor: pointer;\n  position: absolute;\n  margin: 0em;\n  top: 0.78575em;\n  right: 0.5em;\n  opacity: 0.7;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.message > .close.icon:hover {\n  opacity: 1;\n}\n\n/* First / Last Element */\n.ui.message > :first-child {\n  margin-top: 0em;\n}\n.ui.message > :last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.dropdown .menu > .message {\n  margin: 0px -1px;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n    Visible\n---------------*/\n\n.ui.visible.visible.visible.visible.message {\n  display: block;\n}\n.ui.icon.visible.visible.visible.visible.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n.ui.hidden.hidden.hidden.hidden.message {\n  display: none;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n    Compact\n---------------*/\n\n.ui.compact.message {\n  display: inline-block;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.message {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\n  margin-top: -1px;\n  border-radius: 0em;\n}\n.ui.bottom.attached.message {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n.ui.bottom.attached.message:not(:last-child) {\n  margin-bottom: 1em;\n}\n.ui.attached.icon.message {\n  width: auto;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.icon.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.icon.message > .icon:not(.close) {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: auto;\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 3em;\n  opacity: 0.8;\n}\n.ui.icon.message > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  vertical-align: middle;\n}\n.ui.icon.message .icon:not(.close) + .content {\n  padding-left: 0rem;\n}\n.ui.icon.message .circular.icon {\n  width: 1em;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.message {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*--------------\n     Types\n---------------*/\n\n\n/* Positive */\n.ui.positive.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n.ui.positive.message,\n.ui.attached.positive.message {\n  box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.positive.message .header {\n  color: #1A531B;\n}\n\n/* Negative */\n.ui.negative.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.negative.message,\n.ui.attached.negative.message {\n  box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.negative.message .header {\n  color: #912D2B;\n}\n\n/* Info */\n.ui.info.message {\n  background-color: #F8FFFF;\n  color: #276F86;\n}\n.ui.info.message,\n.ui.attached.info.message {\n  box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.info.message .header {\n  color: #0E566C;\n}\n\n/* Warning */\n.ui.warning.message {\n  background-color: #FFFAF3;\n  color: #573A08;\n}\n.ui.warning.message,\n.ui.attached.warning.message {\n  box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.warning.message .header {\n  color: #794B02;\n}\n\n/* Error */\n.ui.error.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.error.message,\n.ui.attached.error.message {\n  box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.error.message .header {\n  color: #912D2B;\n}\n\n/* Success */\n.ui.success.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n.ui.success.message,\n.ui.attached.success.message {\n  box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.success.message .header {\n  color: #1A531B;\n}\n\n/* Colors */\n.ui.inverted.message,\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.red.message {\n  background-color: #FFE8E6;\n  color: #DB2828;\n  box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.red.message .header {\n  color: #c82121;\n}\n.ui.orange.message {\n  background-color: #FFEDDE;\n  color: #F2711C;\n  box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.orange.message .header {\n  color: #e7640d;\n}\n.ui.yellow.message {\n  background-color: #FFF8DB;\n  color: #B58105;\n  box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.yellow.message .header {\n  color: #9c6f04;\n}\n.ui.olive.message {\n  background-color: #FBFDEF;\n  color: #8ABC1E;\n  box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.olive.message .header {\n  color: #7aa61a;\n}\n.ui.green.message {\n  background-color: #E5F9E7;\n  color: #1EBC30;\n  box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.green.message .header {\n  color: #1aa62a;\n}\n.ui.teal.message {\n  background-color: #E1F7F7;\n  color: #10A3A3;\n  box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.teal.message .header {\n  color: #0e8c8c;\n}\n.ui.blue.message {\n  background-color: #DFF0FF;\n  color: #2185D0;\n  box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.blue.message .header {\n  color: #1e77ba;\n}\n.ui.violet.message {\n  background-color: #EAE7FF;\n  color: #6435C9;\n  box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.violet.message .header {\n  color: #5a30b5;\n}\n.ui.purple.message {\n  background-color: #F6E7FF;\n  color: #A333C8;\n  box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.purple.message .header {\n  color: #922eb4;\n}\n.ui.pink.message {\n  background-color: #FFE3FB;\n  color: #E03997;\n  box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.pink.message .header {\n  color: #dd238b;\n}\n.ui.brown.message {\n  background-color: #F1E2D3;\n  color: #A5673F;\n  box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.brown.message .header {\n  color: #935b38;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.message {\n  font-size: 0.78571429em;\n}\n.ui.tiny.message {\n  font-size: 0.85714286em;\n}\n.ui.small.message {\n  font-size: 0.92857143em;\n}\n.ui.message {\n  font-size: 1em;\n}\n.ui.large.message {\n  font-size: 1.14285714em;\n}\n.ui.big.message {\n  font-size: 1.28571429em;\n}\n.ui.huge.message {\n  font-size: 1.42857143em;\n}\n.ui.massive.message {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/modal.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Modal\n*******************************/\n\n.ui.modal {\n  display: none;\n  position: fixed;\n  z-index: 1001;\n  top: 50%;\n  left: 50%;\n  text-align: left;\n  background: #FFFFFF;\n  border: none;\n  box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n  -webkit-transform-origin: 50% 25%;\n          transform-origin: 50% 25%;\n  border-radius: 0.28571429rem;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n  will-change: top, left, margin, transform, opacity;\n}\n.ui.modal > :first-child:not(.icon),\n.ui.modal > .icon:first-child + * {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n.ui.modal > :last-child {\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n     Close\n---------------*/\n\n.ui.modal > .close {\n  cursor: pointer;\n  position: absolute;\n  top: -2.5rem;\n  right: -2.5rem;\n  z-index: 1;\n  opacity: 0.8;\n  font-size: 1.25em;\n  color: #FFFFFF;\n  width: 2.25rem;\n  height: 2.25rem;\n  padding: 0.625rem 0rem 0rem 0rem;\n}\n.ui.modal > .close:hover {\n  opacity: 1;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.modal > .header {\n  display: block;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  margin: 0em;\n  padding: 1.25rem 1.5rem;\n  box-shadow: none;\n  color: rgba(0, 0, 0, 0.85);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.modal > .header:not(.ui) {\n  font-size: 1.42857143rem;\n  line-height: 1.2857em;\n  font-weight: bold;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.modal > .content {\n  display: block;\n  width: 100%;\n  font-size: 1em;\n  line-height: 1.4;\n  padding: 1.5rem;\n  background: #FFFFFF;\n}\n.ui.modal > .image.content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n}\n\n/* Image */\n.ui.modal > .content > .image {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  width: '';\n  -ms-flex-item-align: top;\n      -ms-grid-row-align: top;\n      align-self: top;\n}\n.ui.modal > [class*=\"top aligned\"] {\n  -ms-flex-item-align: top;\n      -ms-grid-row-align: top;\n      align-self: top;\n}\n.ui.modal > [class*=\"middle aligned\"] {\n  -ms-flex-item-align: middle;\n      -ms-grid-row-align: middle;\n      align-self: middle;\n}\n.ui.modal > [class*=\"stretched\"] {\n  -ms-flex-item-align: stretch;\n      -ms-grid-row-align: stretch;\n      align-self: stretch;\n}\n\n/* Description */\n.ui.modal > .content > .description {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  min-width: 0px;\n  -ms-flex-item-align: top;\n      -ms-grid-row-align: top;\n      align-self: top;\n}\n.ui.modal > .content > .icon + .description,\n.ui.modal > .content > .image + .description {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  min-width: '';\n  width: auto;\n  padding-left: 2em;\n}\n/*rtl:ignore*/\n.ui.modal > .content > .image > i.icon {\n  margin: 0em;\n  opacity: 1;\n  width: auto;\n  line-height: 1;\n  font-size: 8rem;\n}\n\n/*--------------\n     Actions\n---------------*/\n\n.ui.modal > .actions {\n  background: #F9FAFB;\n  padding: 1rem 1rem;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  text-align: right;\n}\n.ui.modal .actions > .button {\n  margin-left: 0.75em;\n}\n\n/*-------------------\n       Responsive\n--------------------*/\n\n\n/* Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.modal {\n    width: 850px;\n    margin: 0em 0em 0em -425px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.modal {\n    width: 900px;\n    margin: 0em 0em 0em -450px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.modal {\n    width: 950px;\n    margin: 0em 0em 0em -475px;\n  }\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width: 991px) {\n  .ui.modal > .header {\n    padding-right: 2.25rem;\n  }\n  .ui.modal > .close {\n    top: 1.0535rem;\n    right: 1rem;\n    color: rgba(0, 0, 0, 0.87);\n  }\n}\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui.modal > .header {\n    padding: 0.75rem 1rem !important;\n    padding-right: 2.25rem !important;\n  }\n  .ui.modal > .content {\n    display: block;\n    padding: 1rem !important;\n  }\n  .ui.modal > .close {\n    top: 0.5rem !important;\n    right: 0.5rem !important;\n  }\n  /*rtl:ignore*/\n  .ui.modal .image.content {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.modal .content > .image {\n    display: block;\n    max-width: 100%;\n    margin: 0em auto !important;\n    text-align: center;\n    padding: 0rem 0rem 1rem !important;\n  }\n  .ui.modal > .content > .image > i.icon {\n    font-size: 5rem;\n    text-align: center;\n  }\n  /*rtl:ignore*/\n  .ui.modal .content > .description {\n    display: block;\n    width: 100% !important;\n    margin: 0em !important;\n    padding: 1rem 0rem !important;\n    box-shadow: none;\n  }\n  \n/* Let Buttons Stack */\n  .ui.modal > .actions {\n    padding: 1rem 1rem 0rem !important;\n  }\n  .ui.modal .actions > .buttons,\n  .ui.modal .actions > .button {\n    margin-bottom: 1rem;\n  }\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.inverted.dimmer > .ui.modal {\n  box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.basic.modal {\n  background-color: transparent;\n  border: none;\n  border-radius: 0em;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.basic.modal > .header,\n.ui.basic.modal > .content,\n.ui.basic.modal > .actions {\n  background-color: transparent;\n}\n.ui.basic.modal > .header {\n  color: #FFFFFF;\n}\n.ui.basic.modal > .close {\n  top: 1rem;\n  right: 1.5rem;\n}\n.ui.inverted.dimmer > .basic.modal {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.dimmer > .ui.basic.modal > .header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width: 991px) {\n  .ui.basic.modal > .close {\n    color: #FFFFFF;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n.ui.active.modal {\n  display: block;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Scrolling\n---------------*/\n\n\n/* A modal that cannot fit on the page */\n.scrolling.dimmable.dimmed {\n  overflow: hidden;\n}\n.scrolling.dimmable.dimmed > .dimmer {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.dimmable > .dimmer {\n  position: fixed;\n}\n.modals.dimmer .ui.scrolling.modal {\n  position: static !important;\n  margin: 3.5rem auto !important;\n}\n\n/* undetached scrolling */\n.scrolling.undetached.dimmable.dimmed {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.undetached.dimmable.dimmed > .dimmer {\n  overflow: hidden;\n}\n.scrolling.undetached.dimmable .ui.scrolling.modal {\n  position: absolute;\n  left: 50%;\n  margin-top: 3.5rem !important;\n}\n\n/* Coupling with Sidebar */\n.undetached.dimmable.dimmed > .pusher {\n  z-index: auto;\n}\n@media only screen and (max-width: 991px) {\n  .modals.dimmer .ui.scrolling.modal {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n}\n\n/*--------------\n   Full Screen\n---------------*/\n\n.ui.fullscreen.modal {\n  width: 95% !important;\n  left: 2.5% !important;\n  margin: 1em auto;\n}\n.ui.fullscreen.scrolling.modal {\n  left: 0em !important;\n}\n.ui.fullscreen.modal > .header {\n  padding-right: 2.25rem;\n}\n.ui.fullscreen.modal > .close {\n  top: 1.0535rem;\n  right: 1rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.modal {\n  font-size: 1rem;\n}\n\n/* Small */\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Small Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.small.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.small.modal {\n    width: 70.4%;\n    margin: 0em 0em 0em -35.2%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.small.modal {\n    width: 680px;\n    margin: 0em 0em 0em -340px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.small.modal {\n    width: 720px;\n    margin: 0em 0em 0em -360px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.small.modal {\n    width: 760px;\n    margin: 0em 0em 0em -380px;\n  }\n}\n\n/* Large Modal Width */\n.ui.large.modal > .header {\n  font-size: 1.6em;\n}\n@media only screen and (max-width: 767px) {\n  .ui.large.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.large.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.large.modal {\n    width: 1020px;\n    margin: 0em 0em 0em -510px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.large.modal {\n    width: 1080px;\n    margin: 0em 0em 0em -540px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.large.modal {\n    width: 1140px;\n    margin: 0em 0em 0em -570px;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/modal.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementEventNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n            }\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer with settings', dimmerSettings);\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementEventNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementEventNamespace);\n          $dimmer.off(elementEventNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementEventNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          deny: function() {\n            if(settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      if(settings.keyboardShortcuts) {\n                        module.add.keyboardShortcuts();\n                      }\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    if(settings.keyboardShortcuts) {\n                      module.remove.keyboardShortcuts();\n                    }\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementEventNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find('[tabindex], :input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementEventNamespace, module.event.click)\n              ;\n            }\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n  // whether to use keyboard shortcuts\n  keyboardShortcuts: true,\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/nag.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Nag\n*******************************/\n\n.ui.nag {\n  display: none;\n  opacity: 0.95;\n  position: relative;\n  top: 0em;\n  left: 0px;\n  z-index: 999;\n  min-height: 0em;\n  width: 100%;\n  margin: 0em;\n  padding: 0.75em 1em;\n  background: #555555;\n  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n  font-size: 1rem;\n  text-align: center;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-transition: 0.2s background ease;\n  transition: 0.2s background ease;\n}\na.ui.nag {\n  cursor: pointer;\n}\n.ui.nag > .title {\n  display: inline-block;\n  margin: 0em 0.5em;\n  color: #FFFFFF;\n}\n.ui.nag > .close.icon {\n  cursor: pointer;\n  opacity: 0.4;\n  position: absolute;\n  top: 50%;\n  right: 1em;\n  font-size: 1em;\n  margin: -0.5em 0em 0em;\n  color: #FFFFFF;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/* Hover */\n.ui.nag:hover {\n  background: #555555;\n  opacity: 1;\n}\n.ui.nag .close:hover {\n  opacity: 1;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Static\n---------------*/\n\n.ui.overlay.nag {\n  position: absolute;\n  display: block;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.nag {\n  position: fixed;\n}\n\n/*--------------\n     Bottom\n---------------*/\n\n.ui.bottom.nags,\n.ui.bottom.nag {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  top: auto;\n  bottom: 0em;\n}\n\n/*--------------\n     White\n---------------*/\n\n.ui.inverted.nags .nag,\n.ui.inverted.nag {\n  background-color: #F3F4F5;\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.inverted.nags .nag .close,\n.ui.inverted.nags .nag .title,\n.ui.inverted.nag .close,\n.ui.inverted.nag .title {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n\n/*******************************\n           Groups\n*******************************/\n\n.ui.nags .nag {\n  border-radius: 0em !important;\n}\n.ui.nags .nag:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.bottom.nags .nag:last-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/nag.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overridden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/popup.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Popup\n*******************************/\n\n.ui.popup {\n  display: none;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  \n/* Fixes content being squished when inline (moz only) */\n  min-width: -webkit-min-content;\n  min-width: -moz-min-content;\n  min-width: min-content;\n  z-index: 1900;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: 250px;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.popup > .header {\n  padding: 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  line-height: 1.2;\n  font-weight: bold;\n}\n.ui.popup > .header + .content {\n  padding-top: 0.5em;\n}\n.ui.popup:before {\n  position: absolute;\n  content: '';\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  z-index: 2;\n  box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n    Tooltip\n---------------*/\n\n\n/* Content */\n[data-tooltip] {\n  position: relative;\n}\n\n/* Arrow */\n[data-tooltip]:before {\n  pointer-events: none;\n  position: absolute;\n  content: '';\n  font-size: 1rem;\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  z-index: 2;\n  box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/* Popup */\n[data-tooltip]:after {\n  pointer-events: none;\n  content: attr(data-tooltip);\n  position: absolute;\n  text-transform: none;\n  text-align: left;\n  white-space: nowrap;\n  font-size: 1rem;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: none;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  z-index: 1;\n}\n\n/* Default Position (Top Center) */\n[data-tooltip]:not([data-position]):before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n[data-tooltip]:not([data-position]):after {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n/* Animation */\n[data-tooltip]:before,\n[data-tooltip]:after {\n  pointer-events: none;\n  visibility: hidden;\n}\n[data-tooltip]:before {\n  opacity: 0;\n  -webkit-transform: rotate(45deg) scale(0) !important;\n          transform: rotate(45deg) scale(0) !important;\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n[data-tooltip]:after {\n  opacity: 1;\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n[data-tooltip]:hover:before,\n[data-tooltip]:hover:after {\n  visibility: visible;\n  pointer-events: auto;\n}\n[data-tooltip]:hover:before {\n  -webkit-transform: rotate(45deg) scale(1) !important;\n          transform: rotate(45deg) scale(1) !important;\n  opacity: 1;\n}\n\n/* Animation Position */\n[data-tooltip]:after,\n[data-tooltip][data-position=\"top center\"]:after,\n[data-tooltip][data-position=\"bottom center\"]:after {\n  -webkit-transform: translateX(-50%) scale(0) !important;\n          transform: translateX(-50%) scale(0) !important;\n}\n[data-tooltip]:hover:after,\n[data-tooltip][data-position=\"bottom center\"]:hover:after {\n  -webkit-transform: translateX(-50%) scale(1) !important;\n          transform: translateX(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"left center\"]:after,\n[data-tooltip][data-position=\"right center\"]:after {\n  -webkit-transform: translateY(-50%) scale(0) !important;\n          transform: translateY(-50%) scale(0) !important;\n}\n[data-tooltip][data-position=\"left center\"]:hover:after,\n[data-tooltip][data-position=\"right center\"]:hover:after {\n  -webkit-transform: translateY(-50%) scale(1) !important;\n          transform: translateY(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"top left\"]:after,\n[data-tooltip][data-position=\"top right\"]:after,\n[data-tooltip][data-position=\"bottom left\"]:after,\n[data-tooltip][data-position=\"bottom right\"]:after {\n  -webkit-transform: scale(0) !important;\n          transform: scale(0) !important;\n}\n[data-tooltip][data-position=\"top left\"]:hover:after,\n[data-tooltip][data-position=\"top right\"]:hover:after,\n[data-tooltip][data-position=\"bottom left\"]:hover:after,\n[data-tooltip][data-position=\"bottom right\"]:hover:after {\n  -webkit-transform: scale(1) !important;\n          transform: scale(1) !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Arrow */\n[data-tooltip][data-inverted]:before {\n  box-shadow: none !important;\n}\n\n/* Arrow Position */\n[data-tooltip][data-inverted]:before {\n  background: #1B1C1D;\n}\n\n/* Popup  */\n[data-tooltip][data-inverted]:after {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  box-shadow: none;\n}\n[data-tooltip][data-inverted]:after .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n\n/*--------------\n    Position\n---------------*/\n\n\n/* Top Center */\n[data-position=\"top center\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 50%;\n  bottom: 100%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  margin-bottom: 0.5em;\n}\n[data-position=\"top center\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Left */\n[data-position=\"top left\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n[data-position=\"top left\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Right */\n[data-position=\"top right\"][data-tooltip]:after {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n[data-position=\"top right\"][data-tooltip]:before {\n  top: auto;\n  left: auto;\n  bottom: 100%;\n  right: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Bottom Center */\n[data-position=\"bottom center\"][data-tooltip]:after {\n  bottom: auto;\n  right: auto;\n  left: 50%;\n  top: 100%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  margin-top: 0.5em;\n}\n[data-position=\"bottom center\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 50%;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Left */\n[data-position=\"bottom left\"][data-tooltip]:after {\n  left: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n[data-position=\"bottom left\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Right */\n[data-position=\"bottom right\"][data-tooltip]:after {\n  right: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n[data-position=\"bottom right\"][data-tooltip]:before {\n  bottom: auto;\n  left: auto;\n  top: 100%;\n  right: 1em;\n  margin-left: -0.14285714rem;\n  margin-top: 0.07142857rem;\n}\n\n/* Left Center */\n[data-position=\"left center\"][data-tooltip]:after {\n  right: 100%;\n  top: 50%;\n  margin-right: 0.5em;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  right: 100%;\n  top: 50%;\n  margin-top: -0.14285714rem;\n  margin-right: -0.07142857rem;\n}\n\n/* Right Center */\n[data-position=\"right center\"][data-tooltip]:after {\n  left: 100%;\n  top: 50%;\n  margin-left: 0.5em;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  left: 100%;\n  top: 50%;\n  margin-top: -0.07142857rem;\n  margin-left: 0.14285714rem;\n}\n\n/* Arrow */\n[data-position~=\"bottom\"][data-tooltip]:before {\n  background: #FFFFFF;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n[data-position~=\"top\"][data-tooltip]:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n[data-inverted][data-position~=\"bottom\"][data-tooltip]:before {\n  background: #1B1C1D;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n[data-inverted][data-position=\"left center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n[data-inverted][data-position=\"right center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n[data-inverted][data-position~=\"top\"][data-tooltip]:before {\n  background: #1B1C1D;\n}\n[data-position~=\"bottom\"][data-tooltip]:before {\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n}\n[data-position~=\"bottom\"][data-tooltip]:after {\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n[data-position=\"left center\"][data-tooltip]:after {\n  -webkit-transform-origin: right center;\n          transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  -webkit-transform-origin: right center;\n          transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:after {\n  -webkit-transform-origin: left center;\n          transform-origin: left center;\n}\n\n/*--------------\n     Spacing\n---------------*/\n\n.ui.popup {\n  margin: 0em;\n}\n\n/* Extending from Top */\n.ui.top.popup {\n  margin: 0em 0em 0.71428571em;\n}\n.ui.top.left.popup {\n  -webkit-transform-origin: left bottom;\n          transform-origin: left bottom;\n}\n.ui.top.center.popup {\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n}\n.ui.top.right.popup {\n  -webkit-transform-origin: right bottom;\n          transform-origin: right bottom;\n}\n\n/* Extending from Vertical Center */\n.ui.left.center.popup {\n  margin: 0em 0.71428571em 0em 0em;\n  -webkit-transform-origin: right 50%;\n          transform-origin: right 50%;\n}\n.ui.right.center.popup {\n  margin: 0em 0em 0em 0.71428571em;\n  -webkit-transform-origin: left 50%;\n          transform-origin: left 50%;\n}\n\n/* Extending from Bottom */\n.ui.bottom.popup {\n  margin: 0.71428571em 0em 0em;\n}\n.ui.bottom.left.popup {\n  -webkit-transform-origin: left top;\n          transform-origin: left top;\n}\n.ui.bottom.center.popup {\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n}\n.ui.bottom.right.popup {\n  -webkit-transform-origin: right top;\n          transform-origin: right top;\n}\n\n/*--------------\n     Pointer\n---------------*/\n\n\n/*--- Below ---*/\n\n.ui.bottom.center.popup:before {\n  margin-left: -0.30714286em;\n  top: -0.30714286em;\n  left: 50%;\n  right: auto;\n  bottom: auto;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n.ui.bottom.left.popup {\n  margin-left: 0em;\n}\n/*rtl:rename*/\n.ui.bottom.left.popup:before {\n  top: -0.30714286em;\n  left: 1em;\n  right: auto;\n  bottom: auto;\n  margin-left: 0em;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n.ui.bottom.right.popup {\n  margin-right: 0em;\n}\n/*rtl:rename*/\n.ui.bottom.right.popup:before {\n  top: -0.30714286em;\n  right: 1em;\n  bottom: auto;\n  left: auto;\n  margin-left: 0em;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n/*--- Above ---*/\n\n.ui.top.center.popup:before {\n  top: auto;\n  right: auto;\n  bottom: -0.30714286em;\n  left: 50%;\n  margin-left: -0.30714286em;\n}\n.ui.top.left.popup {\n  margin-left: 0em;\n}\n/*rtl:rename*/\n.ui.top.left.popup:before {\n  bottom: -0.30714286em;\n  left: 1em;\n  top: auto;\n  right: auto;\n  margin-left: 0em;\n}\n.ui.top.right.popup {\n  margin-right: 0em;\n}\n/*rtl:rename*/\n.ui.top.right.popup:before {\n  bottom: -0.30714286em;\n  right: 1em;\n  top: auto;\n  left: auto;\n  margin-left: 0em;\n}\n\n/*--- Left Center ---*/\n\n/*rtl:rename*/\n.ui.left.center.popup:before {\n  top: 50%;\n  right: -0.30714286em;\n  bottom: auto;\n  left: auto;\n  margin-top: -0.30714286em;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n/*--- Right Center  ---*/\n\n/*rtl:rename*/\n.ui.right.center.popup:before {\n  top: 50%;\n  left: -0.30714286em;\n  bottom: auto;\n  right: auto;\n  margin-top: -0.30714286em;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n/* Arrow Color By Location */\n.ui.bottom.popup:before {\n  background: #FFFFFF;\n}\n.ui.right.center.popup:before,\n.ui.left.center.popup:before {\n  background: #FFFFFF;\n}\n.ui.top.popup:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n.ui.inverted.bottom.popup:before {\n  background: #1B1C1D;\n}\n.ui.inverted.right.center.popup:before,\n.ui.inverted.left.center.popup:before {\n  background: #1B1C1D;\n}\n.ui.inverted.top.popup:before {\n  background: #1B1C1D;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/* Immediate Nested Grid */\n.ui.popup > .ui.grid:not(.padded) {\n  width: calc(100% + 1.75rem);\n  margin: -0.7rem -0.875rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.loading.popup {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n.ui.animating.popup,\n.ui.visible.popup {\n  display: block;\n}\n.ui.visible.popup {\n  -webkit-transform: translateZ(0px);\n          transform: translateZ(0px);\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n     Basic\n---------------*/\n\n.ui.basic.popup:before {\n  display: none;\n}\n\n/*--------------\n     Wide\n---------------*/\n\n.ui.wide.popup {\n  max-width: 350px;\n}\n.ui[class*=\"very wide\"].popup {\n  max-width: 550px;\n}\n@media only screen and (max-width: 767px) {\n  .ui.wide.popup,\n  .ui[class*=\"very wide\"].popup {\n    max-width: 250px;\n  }\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.popup {\n  width: 100%;\n  max-width: none;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/* Inverted colors  */\n.ui.inverted.popup {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  box-shadow: none;\n}\n.ui.inverted.popup .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n.ui.inverted.popup:before {\n  background-color: #1B1C1D;\n  box-shadow: none !important;\n}\n\n/*--------------\n     Flowing\n---------------*/\n\n.ui.flowing.popup {\n  max-width: none;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.popup {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.popup {\n  font-size: 0.85714286rem;\n}\n.ui.small.popup {\n  font-size: 0.92857143rem;\n}\n.ui.popup {\n  font-size: 1rem;\n}\n.ui.large.popup {\n  font-size: 1.14285714rem;\n}\n.ui.huge.popup {\n  font-size: 1.42857143rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/popup.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $scrollContext     = $(settings.scrollContext),\n        $boundary          = $(settings.boundary),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        documentObserver,\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if(!module.exists() && settings.preserve) {\n            module.create();\n          }\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', documentObserver);\n          }\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent();\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as activating element');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($popup)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          module.unbind.close();\n          module.unbind.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          hideGracefully: function(event) {\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target),\n              inPopup = ($target.closest(selector.popup).length > 0)\n            ;\n            // don't close on clicks inside popup\n            if(event && !inPopup && isInDOM) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popup  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2, 8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.visible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                  .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        supports: {\n          svg: function() {\n            return (typeof SVGGraphicsElement === undefined);\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement    = $target[0],\n              isWindow         = ($boundary[0] == window),\n              targetPosition   = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              screenPosition = (isWindow)\n                ? { top: 0, left: 0 }\n                : $boundary.offset(),\n              calculations   = {},\n              scroll = (isWindow)\n                ? { top: $window.scrollTop(), left: $window.scrollLeft() }\n                : { top: 0, left: 0},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                top  : screenPosition.top,\n                left : screenPosition.left,\n                scroll: {\n                  top  : scroll.top,\n                  left : scroll.left\n                },\n                width  : $boundary.width(),\n                height : $boundary.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.top + screen.scroll.top,\n              bottom : screen.top + screen.scroll.top + screen.height,\n              left   : screen.left + screen.scroll.left,\n              right  : screen.left + screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              $scrollContext\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('touchstart' + elementNamespace, function(event) {\n                  module.verbose('Touched away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('click' + elementNamespace, function(event) {\n                  module.verbose('Clicked away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $window\n              .off(elementNamespace)\n            ;\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          close: function() {\n            $document\n              .off(elementNamespace)\n            ;\n            $scrollContext\n              .off(elementNamespace)\n            ;\n          },\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          svg: function(element) {\n            return module.supports.svg() && (element instanceof SVGGraphicsElement);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.visible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name           : 'Popup',\n\n  // module settings\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n  namespace      : 'popup',\n\n  // whether it should use dom mutation observers\n  observeChanges : true,\n\n  // callback only when element added to dom\n  onCreate       : function(){},\n\n  // callback before element removed from dom\n  onRemove       : function(){},\n\n  // callback before show animation\n  onShow         : function(){},\n\n  // callback after show animation\n  onVisible      : function(){},\n\n  // callback before hide animation\n  onHide         : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable  : function(){},\n\n  // callback after hide animation\n  onHidden       : function(){},\n\n  // when to show popup\n  on             : 'hover',\n\n  // element to use to determine if popup is out of boundary\n  boundary       : window,\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position       : 'top left',\n\n  // name of variation to use\n  variation      : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content        : false,\n\n  // explicitly set html\n  html           : false,\n\n  // explicitly set title\n  title          : false,\n\n  // whether automatically close on clickaway when on click\n  closable       : true,\n\n  // automatically hide on scroll\n  hideOnScroll   : 'auto',\n\n  // hide other popups on show\n  exclusive      : false,\n\n  // context to attach popups\n  context        : 'body',\n\n  // context for binding scroll events\n  scrollContext  : window,\n\n  // position to prefer when calculating new position\n  prefer         : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort     : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating',\n    dropdown  : 'dropdown',\n    fluid     : 'fluid',\n    loading   : 'loading',\n    popup     : 'ui popup',\n    position  : 'top left center bottom right',\n    visible   : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/progress.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Progress Bar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Progress\n*******************************/\n\n.ui.progress {\n  position: relative;\n  display: block;\n  max-width: 100%;\n  border: none;\n  margin: 1em 0em 2.5em;\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.1);\n  padding: 0em;\n  border-radius: 0.28571429rem;\n}\n.ui.progress:first-child {\n  margin: 0em 0em 2.5em;\n}\n.ui.progress:last-child {\n  margin: 0em 0em 1.5em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Activity Bar */\n.ui.progress .bar {\n  display: block;\n  line-height: 1;\n  position: relative;\n  width: 0%;\n  min-width: 2em;\n  background: #888888;\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, background-color 0.1s ease;\n  transition: width 0.1s ease, background-color 0.1s ease;\n}\n\n/* Percent Complete */\n.ui.progress .bar > .progress {\n  white-space: nowrap;\n  position: absolute;\n  width: auto;\n  font-size: 0.92857143em;\n  top: 50%;\n  right: 0.5em;\n  left: auto;\n  bottom: auto;\n  color: rgba(255, 255, 255, 0.7);\n  text-shadow: none;\n  margin-top: -0.5em;\n  font-weight: bold;\n  text-align: left;\n}\n\n/* Label */\n.ui.progress > .label {\n  position: absolute;\n  width: 100%;\n  font-size: 1em;\n  top: 100%;\n  right: auto;\n  left: 0%;\n  bottom: auto;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-shadow: none;\n  margin-top: 0.2em;\n  text-align: center;\n  -webkit-transition: color 0.4s ease;\n  transition: color 0.4s ease;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/* Indicating */\n.ui.indicating.progress[data-percent^=\"1\"] .bar,\n.ui.indicating.progress[data-percent^=\"2\"] .bar {\n  background-color: #D95C5C;\n}\n.ui.indicating.progress[data-percent^=\"3\"] .bar {\n  background-color: #EFBC72;\n}\n.ui.indicating.progress[data-percent^=\"4\"] .bar,\n.ui.indicating.progress[data-percent^=\"5\"] .bar {\n  background-color: #E6BB48;\n}\n.ui.indicating.progress[data-percent^=\"6\"] .bar {\n  background-color: #DDC928;\n}\n.ui.indicating.progress[data-percent^=\"7\"] .bar,\n.ui.indicating.progress[data-percent^=\"8\"] .bar {\n  background-color: #B4D95C;\n}\n.ui.indicating.progress[data-percent^=\"9\"] .bar,\n.ui.indicating.progress[data-percent^=\"100\"] .bar {\n  background-color: #66DA81;\n}\n\n/* Indicating Label */\n.ui.indicating.progress[data-percent^=\"1\"] .label,\n.ui.indicating.progress[data-percent^=\"2\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"3\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"4\"] .label,\n.ui.indicating.progress[data-percent^=\"5\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"6\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"7\"] .label,\n.ui.indicating.progress[data-percent^=\"8\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"9\"] .label,\n.ui.indicating.progress[data-percent^=\"100\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Single Digits */\n.ui.indicating.progress[data-percent=\"1\"] .bar,\n.ui.indicating.progress[data-percent=\"2\"] .bar,\n.ui.indicating.progress[data-percent=\"3\"] .bar,\n.ui.indicating.progress[data-percent=\"4\"] .bar,\n.ui.indicating.progress[data-percent=\"5\"] .bar,\n.ui.indicating.progress[data-percent=\"6\"] .bar,\n.ui.indicating.progress[data-percent=\"7\"] .bar,\n.ui.indicating.progress[data-percent=\"8\"] .bar,\n.ui.indicating.progress[data-percent=\"9\"] .bar {\n  background-color: #D95C5C;\n}\n.ui.indicating.progress[data-percent=\"1\"] .label,\n.ui.indicating.progress[data-percent=\"2\"] .label,\n.ui.indicating.progress[data-percent=\"3\"] .label,\n.ui.indicating.progress[data-percent=\"4\"] .label,\n.ui.indicating.progress[data-percent=\"5\"] .label,\n.ui.indicating.progress[data-percent=\"6\"] .label,\n.ui.indicating.progress[data-percent=\"7\"] .label,\n.ui.indicating.progress[data-percent=\"8\"] .label,\n.ui.indicating.progress[data-percent=\"9\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Indicating Success */\n.ui.indicating.progress.success .label {\n  color: #1A531B;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n     Success\n---------------*/\n\n.ui.progress.success .bar {\n  background-color: #21BA45 !important;\n}\n.ui.progress.success .bar,\n.ui.progress.success .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.success > .label {\n  color: #1A531B;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.progress.warning .bar {\n  background-color: #F2C037 !important;\n}\n.ui.progress.warning .bar,\n.ui.progress.warning .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.warning > .label {\n  color: #794B02;\n}\n\n/*--------------\n     Error\n---------------*/\n\n.ui.progress.error .bar {\n  background-color: #DB2828 !important;\n}\n.ui.progress.error .bar,\n.ui.progress.error .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.error > .label {\n  color: #912D2B;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.progress .bar {\n  position: relative;\n  min-width: 2em;\n}\n.ui.active.progress .bar::after {\n  content: '';\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  right: 0px;\n  bottom: 0px;\n  background: #FFFFFF;\n  border-radius: 0.28571429rem;\n  -webkit-animation: progress-active 2s ease infinite;\n          animation: progress-active 2s ease infinite;\n}\n@-webkit-keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n@keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.progress {\n  opacity: 0.35;\n}\n.ui.disabled.progress .bar,\n.ui.disabled.progress .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.progress {\n  background: rgba(255, 255, 255, 0.08);\n  border: none;\n}\n.ui.inverted.progress .bar {\n  background: #888888;\n}\n.ui.inverted.progress .bar > .progress {\n  color: #F9FAFB;\n}\n.ui.inverted.progress > .label {\n  color: #FFFFFF;\n}\n.ui.inverted.progress.success > .label {\n  color: #21BA45;\n}\n.ui.inverted.progress.warning > .label {\n  color: #F2C037;\n}\n.ui.inverted.progress.error > .label {\n  color: #DB2828;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* bottom attached */\n.ui.progress.attached {\n  background: transparent;\n  position: relative;\n  border: none;\n  margin: 0em;\n}\n.ui.progress.attached,\n.ui.progress.attached .bar {\n  display: block;\n  height: 0.2rem;\n  padding: 0px;\n  overflow: hidden;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.progress.attached .bar {\n  border-radius: 0em;\n}\n\n/* top attached */\n.ui.progress.top.attached,\n.ui.progress.top.attached .bar {\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.progress.top.attached .bar {\n  border-radius: 0em;\n}\n\n/* Coupling */\n.ui.segment > .ui.attached.progress,\n.ui.card > .ui.attached.progress {\n  position: absolute;\n  top: auto;\n  left: 0;\n  bottom: 100%;\n  width: 100%;\n}\n.ui.segment > .ui.bottom.attached.progress,\n.ui.card > .ui.bottom.attached.progress {\n  top: 100%;\n  bottom: auto;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/* Red */\n.ui.red.progress .bar {\n  background-color: #DB2828;\n}\n.ui.red.inverted.progress .bar {\n  background-color: #FF695E;\n}\n\n/* Orange */\n.ui.orange.progress .bar {\n  background-color: #F2711C;\n}\n.ui.orange.inverted.progress .bar {\n  background-color: #FF851B;\n}\n\n/* Yellow */\n.ui.yellow.progress .bar {\n  background-color: #FBBD08;\n}\n.ui.yellow.inverted.progress .bar {\n  background-color: #FFE21F;\n}\n\n/* Olive */\n.ui.olive.progress .bar {\n  background-color: #B5CC18;\n}\n.ui.olive.inverted.progress .bar {\n  background-color: #D9E778;\n}\n\n/* Green */\n.ui.green.progress .bar {\n  background-color: #21BA45;\n}\n.ui.green.inverted.progress .bar {\n  background-color: #2ECC40;\n}\n\n/* Teal */\n.ui.teal.progress .bar {\n  background-color: #00B5AD;\n}\n.ui.teal.inverted.progress .bar {\n  background-color: #6DFFFF;\n}\n\n/* Blue */\n.ui.blue.progress .bar {\n  background-color: #2185D0;\n}\n.ui.blue.inverted.progress .bar {\n  background-color: #54C8FF;\n}\n\n/* Violet */\n.ui.violet.progress .bar {\n  background-color: #6435C9;\n}\n.ui.violet.inverted.progress .bar {\n  background-color: #A291FB;\n}\n\n/* Purple */\n.ui.purple.progress .bar {\n  background-color: #A333C8;\n}\n.ui.purple.inverted.progress .bar {\n  background-color: #DC73FF;\n}\n\n/* Pink */\n.ui.pink.progress .bar {\n  background-color: #E03997;\n}\n.ui.pink.inverted.progress .bar {\n  background-color: #FF8EDF;\n}\n\n/* Brown */\n.ui.brown.progress .bar {\n  background-color: #A5673F;\n}\n.ui.brown.inverted.progress .bar {\n  background-color: #D67C1C;\n}\n\n/* Grey */\n.ui.grey.progress .bar {\n  background-color: #767676;\n}\n.ui.grey.inverted.progress .bar {\n  background-color: #DCDDDE;\n}\n\n/* Black */\n.ui.black.progress .bar {\n  background-color: #1B1C1D;\n}\n.ui.black.inverted.progress .bar {\n  background-color: #545454;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.tiny.progress {\n  font-size: 0.85714286rem;\n}\n.ui.tiny.progress .bar {\n  height: 0.5em;\n}\n.ui.small.progress {\n  font-size: 0.92857143rem;\n}\n.ui.small.progress .bar {\n  height: 1em;\n}\n.ui.progress {\n  font-size: 1rem;\n}\n.ui.progress .bar {\n  height: 1.75em;\n}\n.ui.large.progress {\n  font-size: 1.14285714rem;\n}\n.ui.large.progress .bar {\n  height: 2.5em;\n}\n.ui.big.progress {\n  font-size: 1.28571429rem;\n}\n.ui.big.progress .bar {\n  height: 3.5em;\n}\n\n\n/*******************************\n            Progress\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/progress.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\nvar\n  global = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.remove.nextValue();\n          module.update.progress(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.remove.progressPoll();\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n            newValue       = startValue + incrementValue;\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n            module.debug('Incrementing percentage by', startValue, newValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n\n        has: {\n          progressPoll: function() {\n            return module.progressPoll;\n          },\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.verbose('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n          normalizedValue: function(value) {\n            if(value < 0) {\n              module.debug('Value cannot decrement below 0');\n              return 0;\n            }\n            if(module.has.total()) {\n              if(value > module.total) {\n                module.debug('Value cannot increment above total', module.total);\n                return module.total;\n              }\n            }\n            else if(value > 100 ) {\n              module.debug('Value cannot increment above 100 percent');\n              return 100;\n            }\n            return value;\n          },\n\n          updateInterval: function() {\n            if(settings.updateInterval == 'auto') {\n              return settings.duration;\n            }\n            return settings.updateInterval;\n          },\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.nextValue || module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        create: {\n          progressPoll: function() {\n            module.progressPoll = setTimeout(function() {\n              module.update.toNextValue();\n              module.remove.progressPoll();\n            }, module.get.updateInterval());\n          },\n        },\n\n        is: {\n          complete: function() {\n            return module.is.success() || module.is.warning() || module.is.error();\n          },\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          progressPoll: function() {\n            module.verbose('Removing progress poll timer');\n            if(module.progressPoll) {\n              clearTimeout(module.progressPoll);\n              delete module.progressPoll;\n            }\n          },\n          nextValue: function() {\n            module.verbose('Removing progress value stored for next update');\n            delete module.nextValue;\n          },\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            $bar.one(transitionEnd + eventNamespace, animationCallback);\n            animating = true;\n            module.interval = setInterval(function() {\n              var\n                isInDOM = $.contains(document.documentElement, element)\n              ;\n              if(!isInDOM) {\n                clearInterval(module.interval);\n                animating = false;\n              }\n              module.set.labels();\n            }, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.verbose('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n                module.remove.progressPoll();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.verbose('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.verbose('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            text = settings.onLabelUpdate('active', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onActive.call(element, module.value, module.total);\n            });\n          },\n          success : function(text) {\n            text = text || settings.text.success || settings.text.active;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(settings.text.success) {\n              text = settings.onLabelUpdate('success', text, module.value, module.total);\n              module.set.label(text);\n            }\n            else {\n              text = settings.onLabelUpdate('active', text, module.value, module.total);\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onSuccess.call(element, module.total);\n            });\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            text = settings.onLabelUpdate('warning', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onWarning.call(element, module.value, module.total);\n            });\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            text = settings.onLabelUpdate('error', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onError.call(element, module.value, module.total);\n            });\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            if(!module.has.progressPoll()) {\n              module.debug('First update in progress update interval, immediately updating', value);\n              module.update.progress(value);\n              module.create.progressPoll();\n            }\n            else {\n              module.debug('Updated within interval, setting next update to use new value', value);\n              module.set.nextValue(value);\n            }\n          },\n          nextValue: function(value) {\n            module.nextValue = value;\n          }\n        },\n\n        update: {\n          toNextValue: function() {\n            var\n              nextValue = module.nextValue\n            ;\n            if(nextValue) {\n              module.debug('Update interval complete using last updated value', nextValue);\n              module.update.progress(nextValue);\n              module.remove.nextValue();\n            }\n          },\n          progress: function(value) {\n            var\n              percentComplete\n            ;\n            value = module.get.numericValue(value);\n            if(value === false) {\n              module.error(error.nonNumeric, value);\n            }\n            value = module.get.normalizedValue(value);\n            if( module.has.total() ) {\n              module.set.value(value);\n              percentComplete = (value / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = value;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration       : 300,\n\n  updateInterval : 'auto',\n\n  autoSuccess    : true,\n  showActivity   : true,\n  limitValues    : true,\n\n  label          : 'percent',\n  precision      : 0,\n  framerate      : (1000 / 30), /// 30 fps\n\n  percent        : false,\n  total          : false,\n  value          : false,\n\n  onLabelUpdate : function(state, text, value, total){\n    return text;\n  },\n  onChange      : function(percent, value, total){},\n  onSuccess     : function(total){},\n  onActive      : function(value, total){},\n  onError       : function(value, total){},\n  onWarning     : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/rail.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Rail\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Rails\n*******************************/\n\n.ui.rail {\n  position: absolute;\n  top: 0%;\n  width: 300px;\n  height: 100%;\n}\n.ui.left.rail {\n  left: auto;\n  right: 100%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n.ui.right.rail {\n  left: 100%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Internal\n---------------*/\n\n.ui.left.internal.rail {\n  left: 0%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n.ui.right.internal.rail {\n  left: auto;\n  right: 0%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n/*--------------\n    Dividing\n---------------*/\n\n.ui.dividing.rail {\n  width: 302.5px;\n}\n.ui.left.dividing.rail {\n  padding: 0em 2.5rem 0em 0em;\n  margin: 0em 2.5rem 0em 0em;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.right.dividing.rail {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  padding: 0em 0em 0em 2.5rem;\n  margin: 0em 0em 0em 2.5rem;\n}\n\n/*--------------\n    Distance\n---------------*/\n\n.ui.close.rail {\n  width: calc( 300px  +  1em );\n}\n.ui.close.left.rail {\n  padding: 0em 1em 0em 0em;\n  margin: 0em 1em 0em 0em;\n}\n.ui.close.right.rail {\n  padding: 0em 0em 0em 1em;\n  margin: 0em 0em 0em 1em;\n}\n.ui.very.close.rail {\n  width: calc( 300px  +  0.5em );\n}\n.ui.very.close.left.rail {\n  padding: 0em 0.5em 0em 0em;\n  margin: 0em 0.5em 0em 0em;\n}\n.ui.very.close.right.rail {\n  padding: 0em 0em 0em 0.5em;\n  margin: 0em 0em 0em 0.5em;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.left.rail,\n.ui.attached.right.rail {\n  padding: 0em;\n  margin: 0em;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.mini.rail {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.rail {\n  font-size: 0.85714286rem;\n}\n.ui.small.rail {\n  font-size: 0.92857143rem;\n}\n.ui.rail {\n  font-size: 1rem;\n}\n.ui.large.rail {\n  font-size: 1.14285714rem;\n}\n.ui.big.rail {\n  font-size: 1.28571429rem;\n}\n.ui.huge.rail {\n  font-size: 1.42857143rem;\n}\n.ui.massive.rail {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/rating.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Rating\n*******************************/\n\n.ui.rating {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n.ui.rating:last-child {\n  margin-right: 0em;\n}\n\n/* Icon */\n.ui.rating .icon {\n  padding: 0em;\n  margin: 0em;\n  text-align: center;\n  font-weight: normal;\n  font-style: normal;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  cursor: pointer;\n  width: 1.25em;\n  height: auto;\n  -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n  transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n      Standard\n--------------------*/\n\n\n/* Inactive Icon */\n.ui.rating .icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n}\n\n/* Active Icon */\n.ui.rating .active.icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Selected Icon */\n.ui.rating .icon.selected,\n.ui.rating .icon.selected.active {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n\n/* Inactive */\n.ui.star.rating .icon {\n  width: 1.25em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none;\n}\n\n/* Active Star */\n.ui.star.rating .active.icon {\n  background: transparent !important;\n  color: #FFE623 !important;\n  text-shadow: 0px -1px 0px #DDC507, -1px 0px 0px #DDC507, 0px 1px 0px #DDC507, 1px 0px 0px #DDC507 !important;\n}\n\n/* Selected Star */\n.ui.star.rating .icon.selected,\n.ui.star.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FFCC00 !important;\n  text-shadow: 0px -1px 0px #E6A200, -1px 0px 0px #E6A200, 0px 1px 0px #E6A200, 1px 0px 0px #E6A200 !important;\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n.ui.heart.rating .icon {\n  width: 1.4em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none !important;\n}\n\n/* Active Heart */\n.ui.heart.rating .active.icon {\n  background: transparent !important;\n  color: #FF6D75 !important;\n  text-shadow: 0px -1px 0px #CD0707, -1px 0px 0px #CD0707, 0px 1px 0px #CD0707, 1px 0px 0px #CD0707 !important;\n}\n\n/* Selected Heart */\n.ui.heart.rating .icon.selected,\n.ui.heart.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FF3000 !important;\n  text-shadow: 0px -1px 0px #AA0101, -1px 0px 0px #AA0101, 0px 1px 0px #AA0101, 1px 0px 0px #AA0101 !important;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n       Disabled\n--------------------*/\n\n\n/* disabled rating */\n.ui.disabled.rating .icon {\n  cursor: default;\n}\n\n/*-------------------\n   User Interactive\n--------------------*/\n\n\n/* Selected Rating */\n.ui.rating.selected .active.icon {\n  opacity: 1;\n}\n.ui.rating.selected .icon.selected,\n.ui.rating .icon.selected {\n  opacity: 1;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.mini.rating {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.rating {\n  font-size: 0.85714286rem;\n}\n.ui.small.rating {\n  font-size: 0.92857143rem;\n}\n.ui.rating {\n  font-size: 1rem;\n}\n.ui.large.rating {\n  font-size: 1.14285714rem;\n}\n.ui.huge.rating {\n  font-size: 1.42857143rem;\n}\n.ui.massive.rating {\n  font-size: 2rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Rating';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDAwEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBhUABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhUPCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFBw4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAcwCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGmImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJWWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n.ui.rating .icon {\n  font-family: 'Rating';\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n/* Empty Star */\n.ui.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n.ui.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n\n/* Unfilled Star */\n.ui.star.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n.ui.star.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/* Partial */\n.ui.star.rating .partial.icon:before {\n  content: '\\f006';\n}\n.ui.star.rating .partial.icon {\n  content: '\\f005';\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n\n/* Empty Heart\n.ui.heart.rating .icon:before {\n  content: '\\f08a';\n}\n*/\n.ui.heart.rating .icon:before {\n  content: '\\f004';\n}\n/* Active */\n.ui.heart.rating .active.icon:before {\n  content: '\\f004';\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/rating.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        initialLoad,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.initialLoad();\n          module.set.rating( module.get.initialRating() );\n          module.remove.initialLoad();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          }\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .addBack()\n                  .addClass(className.active)\n              ;\n            }\n            if(!module.is.initialLoad()) {\n              settings.onRate.call(element, rating);\n            }\n          },\n          initialLoad: function() {\n            initialLoad = true;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  slent         : false,\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  fireOnInit    : false,\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/reset.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Reset\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Reset\n*******************************/\n\n\n/* Border-Box */\n*,\n*:before,\n*:after {\n  box-sizing: inherit;\n}\nhtml {\n  box-sizing: border-box;\n}\n\n/* iPad Input Shadows */\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  \n/* mobile firefox too! */\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\nhtml {\n  font-family: sans-serif;\n  \n/* 1 */\n  -ms-text-size-adjust: 100%;\n  \n/* 2 */\n  -webkit-text-size-adjust: 100%;\n  \n/* 2 */\n}\n/**\n * Remove default margin.\n */\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  \n/* 1 */\n  vertical-align: baseline;\n  \n/* 2 */\n}\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n/**\n * Remove the gray background color from active links in IE 10.\n */\na {\n  background: transparent;\n}\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\nb,\nstrong {\n  font-weight: bold;\n}\n/**\n * Address styling not present in Safari and Chrome.\n */\ndfn {\n  font-style: italic;\n}\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n/**\n * Address styling not present in IE 8/9.\n */\nmark {\n  background: #ff0;\n  color: #000;\n}\n/**\n * Address inconsistent and variable font size in all browsers.\n */\nsmall {\n  font-size: 80%;\n}\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\nimg {\n  border: 0;\n}\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\nfigure {\n  margin: 1em 40px;\n}\n/**\n * Address differences between Firefox and other browsers.\n */\nhr {\n  height: 0;\n}\n/**\n * Contain overflow in all browsers.\n */\npre {\n  overflow: auto;\n}\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  \n/* 1 */\n  font: inherit;\n  \n/* 2 */\n  margin: 0;\n  \n/* 3 */\n}\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\nbutton {\n  overflow: visible;\n}\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\nbutton,\nselect {\n  text-transform: none;\n}\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  \n/* 2 */\n  cursor: pointer;\n  \n/* 3 */\n}\n/**\n * Re-set default cursor for disabled elements.\n */\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n/**\n * Remove inner padding and border in Firefox 4+.\n */\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\ninput {\n  line-height: normal;\n}\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  \n/* 1 */\n  padding: 0;\n  \n/* 2 */\n}\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n *    (include `-moz` to future-proof).\n */\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  \n/* 1 */\n}\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n/**\n * Define consistent border, margin, and padding.\n */\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\nlegend {\n  border: 0;\n  \n/* 1 */\n  padding: 0;\n  \n/* 2 */\n}\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\ntextarea {\n  overflow: auto;\n}\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n/**\n * Remove most spacing between table cells.\n */\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/reveal.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Reveal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Reveal\n*******************************/\n\n.ui.reveal {\n  display: inherit;\n  position: relative !important;\n  font-size: 0em !important;\n}\n.ui.reveal > .visible.content {\n  position: absolute !important;\n  top: 0em !important;\n  left: 0em !important;\n  z-index: 3 !important;\n  -webkit-transition: all 0.5s ease 0.1s;\n  transition: all 0.5s ease 0.1s;\n}\n.ui.reveal > .hidden.content {\n  position: relative !important;\n  z-index: 2 !important;\n}\n\n/* Make sure hovered element is on top of other reveal */\n.ui.active.reveal .visible.content,\n.ui.reveal:hover .visible.content {\n  z-index: 4 !important;\n}\n\n\n/*******************************\n              Types\n*******************************/\n\n\n/*--------------\n      Slide\n---------------*/\n\n.ui.slide.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n.ui.slide.reveal > .content {\n  display: block;\n  width: 100%;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s ease 0.1s;\n  transition: -webkit-transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s, -webkit-transform 0.5s ease 0.1s;\n}\n.ui.slide.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.slide.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.slide.active.reveal > .visible.content,\n.ui.slide.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.slide.active.reveal > .hidden.content,\n.ui.slide.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.right.reveal > .visible.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.right.reveal > .hidden.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.slide.right.active.reveal > .visible.content,\n.ui.slide.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.slide.right.active.reveal > .hidden.content,\n.ui.slide.right.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.up.reveal > .hidden.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n.ui.slide.up.active.reveal > .visible.content,\n.ui.slide.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.slide.up.active.reveal > .hidden.content,\n.ui.slide.up.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n          transform: translateY(0%) !important;\n}\n.ui.slide.down.reveal > .hidden.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.slide.down.active.reveal > .visible.content,\n.ui.slide.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n.ui.slide.down.active.reveal > .hidden.content,\n.ui.slide.down.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n          transform: translateY(0%) !important;\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.ui.fade.reveal > .visible.content {\n  opacity: 1;\n}\n.ui.fade.active.reveal > .visible.content,\n.ui.fade.reveal:hover > .visible.content {\n  opacity: 0;\n}\n\n/*--------------\n      Move\n---------------*/\n\n.ui.move.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n.ui.move.reveal > .content {\n  display: block;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s, -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n}\n.ui.move.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.move.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n}\n.ui.move.active.reveal > .visible.content,\n.ui.move.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.move.right.active.reveal > .visible.content,\n.ui.move.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.move.up.active.reveal > .visible.content,\n.ui.move.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.move.down.active.reveal > .visible.content,\n.ui.move.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n\n/*--------------\n     Rotate\n---------------*/\n\n.ui.rotate.reveal > .visible.content {\n  -webkit-transition-duration: 0.5s;\n          transition-duration: 0.5s;\n  -webkit-transform: rotate(0deg);\n          transform: rotate(0deg);\n}\n.ui.rotate.reveal > .visible.content,\n.ui.rotate.right.reveal > .visible.content {\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right;\n}\n.ui.rotate.active.reveal > .visible.content,\n.ui.rotate.reveal:hover > .visible.content,\n.ui.rotate.right.active.reveal > .visible.content,\n.ui.rotate.right.reveal:hover > .visible.content {\n  -webkit-transform: rotate(110deg);\n          transform: rotate(110deg);\n}\n.ui.rotate.left.reveal > .visible.content {\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left;\n}\n.ui.rotate.left.active.reveal > .visible.content,\n.ui.rotate.left.reveal:hover > .visible.content {\n  -webkit-transform: rotate(-110deg);\n          transform: rotate(-110deg);\n}\n\n\n/*******************************\n              States\n*******************************/\n\n.ui.disabled.reveal:hover > .visible.visible.content {\n  position: static !important;\n  display: block !important;\n  opacity: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: auto !important;\n  bottom: auto !important;\n  -webkit-transform: none !important;\n          transform: none !important;\n}\n.ui.disabled.reveal:hover > .hidden.hidden.content {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.reveal {\n  overflow: visible;\n}\n\n/*--------------\n     Instant\n---------------*/\n\n.ui.instant.reveal > .content {\n  -webkit-transition-delay: 0s !important;\n          transition-delay: 0s !important;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.reveal > .content {\n  font-size: 1rem !important;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/search.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Search\n*******************************/\n\n.ui.search {\n  position: relative;\n}\n.ui.search > .prompt {\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-shadow: none;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.2142em;\n  padding: 0.67861429em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n}\n.ui.search .prompt {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.search .prompt ~ .search.icon {\n  cursor: pointer;\n}\n\n/*--------------\n    Results\n---------------*/\n\n.ui.search > .results {\n  display: none;\n  position: absolute;\n  top: 100%;\n  left: 0%;\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n  white-space: normal;\n  background: #FFFFFF;\n  margin-top: 0.5em;\n  width: 18em;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid #D4D4D5;\n  z-index: 998;\n}\n.ui.search > .results > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.search > .results > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/*--------------\n    Result\n---------------*/\n\n.ui.search > .results .result {\n  cursor: pointer;\n  display: block;\n  overflow: hidden;\n  font-size: 1em;\n  padding: 0.85714286em 1.14285714em;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.33;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.search > .results .result:last-child {\n  border-bottom: none !important;\n}\n\n/* Image */\n.ui.search > .results .result .image {\n  float: right;\n  overflow: hidden;\n  background: none;\n  width: 5em;\n  height: 3em;\n  border-radius: 0.25em;\n}\n.ui.search > .results .result .image img {\n  display: block;\n  width: auto;\n  height: 100%;\n}\n\n/*--------------\n      Info\n---------------*/\n\n.ui.search > .results .result .image + .content {\n  margin: 0em 6em 0em 0em;\n}\n.ui.search > .results .result .title {\n  margin: -0.14285em 0em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.search > .results .result .description {\n  margin-top: 0;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.search > .results .result .price {\n  float: right;\n  color: #21BA45;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.search > .results > .message {\n  padding: 1em 1em;\n}\n.ui.search > .results > .message .header {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1rem;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.search > .results > .message .description {\n  margin-top: 0.25rem;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* View All Results */\n.ui.search > .results > .action {\n  display: block;\n  border-top: none;\n  background: #F3F4F5;\n  padding: 0.92857143em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-align: center;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n       Focus\n---------------------*/\n\n.ui.search > .prompt:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.search .input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.search .input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.search > .results .result:hover,\n.ui.category.search > .results .category .result:hover {\n  background: #F9FAFB;\n}\n.ui.search .action:hover {\n  background: #E0E0E0;\n}\n\n/*--------------\n      Active\n---------------*/\n\n.ui.category.search > .results .category.active {\n  background: #F3F4F5;\n}\n.ui.category.search > .results .category.active > .name {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.search > .results .result.active,\n.ui.category.search > .results .category .result.active {\n  position: relative;\n  border-left-color: rgba(34, 36, 38, 0.1);\n  background: #F3F4F5;\n  box-shadow: none;\n}\n.ui.search > .results .result.active .title {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.search > .results .result.active .description {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n\n/*******************************\n           Types\n*******************************/\n\n\n/*--------------\n    Selection\n---------------*/\n\n.ui.search.selection .prompt {\n  border-radius: 0.28571429rem;\n}\n\n/* Remove input */\n.ui.search.selection > .icon.input > .remove.icon {\n  pointer-events: none;\n  position: absolute;\n  left: auto;\n  opacity: 0;\n  color: '';\n  top: 0em;\n  right: 0em;\n  -webkit-transition: color 0.1s ease, opacity 0.1s ease;\n  transition: color 0.1s ease, opacity 0.1s ease;\n}\n.ui.search.selection > .icon.input > .active.remove.icon {\n  cursor: pointer;\n  opacity: 0.8;\n  pointer-events: auto;\n}\n.ui.search.selection > .icon.input:not([class*=\"left icon\"]) > .icon ~ .remove.icon {\n  right: 1.85714em;\n}\n.ui.search.selection > .icon.input > .remove.icon:hover {\n  opacity: 1;\n  color: #DB2828;\n}\n\n/*--------------\n    Category\n---------------*/\n\n.ui.category.search .results {\n  width: 28em;\n}\n\n/* Category */\n.ui.category.search > .results .category {\n  background: #F3F4F5;\n  box-shadow: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n}\n\n/* Last Category */\n.ui.category.search > .results .category:last-child {\n  border-bottom: none;\n}\n\n/* First / Last */\n.ui.category.search > .results .category:first-child .name + .result {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Category Result */\n.ui.category.search > .results .category .result {\n  background: #FFFFFF;\n  margin-left: 100px;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n  padding: 0.85714286em 1.14285714em;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-bottom: none;\n}\n\n/* Category Result Name */\n.ui.category.search > .results .category > .name {\n  width: 100px;\n  background: transparent;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  float: 1em;\n  float: left;\n  padding: 0.4em 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n     Left / Right\n--------------------*/\n\n.ui[class*=\"left aligned\"].search > .results {\n  right: auto;\n  left: 0%;\n}\n.ui[class*=\"right aligned\"].search > .results {\n  right: 0%;\n  left: auto;\n}\n\n/*--------------\n    Fluid\n---------------*/\n\n.ui.fluid.search .results {\n  width: 100%;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n.ui.mini.search {\n  font-size: 0.78571429em;\n}\n.ui.small.search {\n  font-size: 0.92857143em;\n}\n.ui.search {\n  font-size: 1em;\n}\n.ui.large.search {\n  font-size: 1.14285714em;\n}\n.ui.big.search {\n  font-size: 1.28571429em;\n}\n.ui.huge.search {\n  font-size: 1.42857143em;\n}\n.ui.massive.search {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/search.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        regExp          = settings.regExp,\n        fields          = settings.fields,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $prompt         = $module.find(selector.prompt),\n        $searchButton   = $module.find(selector.searchButton),\n        $results        = $module.find(selector.results),\n        $result         = $module.find(selector.result),\n        $category       = $module.find(selector.category),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        disabledBubbled = false,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.debug('Refreshing selector cache');\n          $prompt         = $module.find(selector.prompt);\n          $searchButton   = $module.find(selector.searchButton);\n          $category       = $module.find(selector.category);\n          $results        = $module.find(selector.results);\n          $result         = $module.find(selector.result);\n        },\n\n        refreshResults: function() {\n          $results = $module.find(selector.results);\n          $result  = $module.find(selector.result);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.query, settings.searchDelay);\n          },\n          focus: function() {\n            module.set.focus();\n            if( module.has.minimumCharacters() ) {\n              module.query();\n              if( module.can.show() ) {\n                module.showResults();\n              }\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click.close' + eventNamespace, selector.results, function(event) {\n                  if(module.is.inMessage(event) || disabledBubbled) {\n                    $prompt.focus();\n                    return;\n                  }\n                  disabledBubbled = false;\n                  if( !module.is.animating() && !module.is.hidden()) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.is('a[href]')\n                  ? $result\n                  : $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  disabledBubbled = true;\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result      = $module.find(selector.result),\n            $category    = $module.find(selector.category),\n            currentIndex = $result.index( $result.filter('.' + className.active) ),\n            resultSize   = $result.length,\n\n            keyCode      = event.which,\n            keys         = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.trigger.blur();\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function(searchTerm) {\n            var\n              apiSettings = {\n                debug             : settings.debug,\n                on                : false,\n                cache             : true,\n                action            : 'search',\n                urlData           : {\n                  query : searchTerm\n                },\n                onSuccess         : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                },\n                onAbort           : function(response) {\n                },\n                onFailure         : function() {\n                  module.displayMessage(error.serverError);\n                },\n                onError           : module.error\n              },\n              searchHTML\n            ;\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.verbose('Setting up API request', apiSettings);\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          inMessage: function(event) {\n            return (event.target && $(event.target).closest(selector.message).length > 0);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        trigger: {\n          blur: function() {\n            var\n              events        = document.createEvent('HTMLEvents'),\n              promptElement = $prompt[0]\n            ;\n            if(promptElement) {\n              module.verbose('Triggering native blur event');\n              events.initEvent('blur', false, false);\n              promptElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        select: {\n          firstResult: function() {\n            module.verbose('Selecting first result');\n            $result.first().addClass(className.active);\n          }\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function() {\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm);\n              }\n              else {\n                module.error(error.source);\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm) {\n            if($module.api('is loading')) {\n              $module.api('abort');\n            }\n            module.setup.api(searchTerm);\n            $module\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          if(html) {\n            $results\n              .html(html)\n            ;\n            module.refreshResults();\n            if(settings.selectFirstResult) {\n              module.select.firstResult();\n            }\n            module.showResults();\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        showResults: function() {\n          if(!module.is.visible()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function() {\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else if(settings.showNoResults) {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name              : 'Search',\n  namespace         : 'search',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // template to use (specified in settings.templates)\n  type              : 'standard',\n\n  // minimum characters required to search\n  minCharacters     : 1,\n\n  // whether to select first result after searching automatically\n  selectFirstResult : false,\n\n  // API config\n  apiSettings       : false,\n\n  // object to search\n  source            : false,\n\n  // fields to search\n  searchFields   : [\n    'title',\n    'description'\n  ],\n\n  // field to display in standard results template\n  displayField   : '',\n\n  // whether to include fuzzy results in local search\n  searchFullText : true,\n\n  // whether to add events to prompt automatically\n  automatic      : true,\n\n  // delay before hiding menu after blur\n  hideDelay      : 0,\n\n  // delay before searching\n  searchDelay    : 200,\n\n  // maximum results returned from local\n  maxResults     : 7,\n\n  // whether to store lookups in local cache\n  cache          : true,\n\n  // whether no results errors should be shown\n  showNoResults  : true,\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    message      : '.results > .message',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/segment.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Segment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Segment\n*******************************/\n\n.ui.segment {\n  position: relative;\n  background: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  padding: 1em 1em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.segment:first-child {\n  margin-top: 0em;\n}\n.ui.segment:last-child {\n  margin-bottom: 0em;\n}\n\n/* Vertical */\n.ui.vertical.segment {\n  margin: 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n  background: none transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.vertical.segment:last-child {\n  border-bottom: none;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n\n/* Header */\n.ui.inverted.segment > .ui.header {\n  color: #FFFFFF;\n}\n\n/* Label */\n.ui[class*=\"bottom attached\"].segment > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui[class*=\"top attached\"].segment > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n/* Grid */\n.ui.page.grid.segment,\n.ui.grid > .row > .ui.segment.column,\n.ui.grid > .ui.segment.column {\n  padding-top: 2em;\n  padding-bottom: 2em;\n}\n.ui.grid.segment {\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n}\n\n/* Table */\n.ui.basic.table.segment {\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n.ui[class*=\"very basic\"].table.segment {\n  padding: 1em 1em;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n        Piled\n--------------------*/\n\n.ui.piled.segments,\n.ui.piled.segment {\n  margin: 3em 0em;\n  box-shadow: '';\n  z-index: auto;\n}\n.ui.piled.segment:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment:last-child {\n  margin-bottom: 0em;\n}\n.ui.piled.segments:after,\n.ui.piled.segments:before,\n.ui.piled.segment:after,\n.ui.piled.segment:before {\n  background-color: #FFFFFF;\n  visibility: visible;\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0px;\n  position: absolute;\n  width: 100%;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: '';\n}\n.ui.piled.segments:before,\n.ui.piled.segment:before {\n  -webkit-transform: rotate(-1.2deg);\n          transform: rotate(-1.2deg);\n  top: 0;\n  z-index: -2;\n}\n.ui.piled.segments:after,\n.ui.piled.segment:after {\n  -webkit-transform: rotate(1.2deg);\n          transform: rotate(1.2deg);\n  top: 0;\n  z-index: -1;\n}\n\n/* Piled Attached */\n.ui[class*=\"top attached\"].piled.segment {\n  margin-top: 3em;\n  margin-bottom: 0em;\n}\n.ui.piled.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 3em;\n}\n.ui.piled.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n       Stacked\n--------------------*/\n\n.ui.stacked.segment {\n  padding-bottom: 1.4em;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segments:after,\n.ui.stacked.segment:before,\n.ui.stacked.segment:after {\n  content: '';\n  position: absolute;\n  bottom: -3px;\n  left: 0%;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: rgba(0, 0, 0, 0.03);\n  width: 100%;\n  height: 6px;\n  visibility: visible;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segment:before {\n  display: none;\n}\n\n/* Add additional page */\n.ui.tall.stacked.segments:before,\n.ui.tall.stacked.segment:before {\n  display: block;\n  bottom: 0px;\n}\n\n/* Inverted */\n.ui.stacked.inverted.segments:before,\n.ui.stacked.inverted.segments:after,\n.ui.stacked.inverted.segment:before,\n.ui.stacked.inverted.segment:after {\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(34, 36, 38, 0.35);\n}\n\n/*-------------------\n       Padded\n--------------------*/\n\n.ui.padded.segment {\n  padding: 1.5em;\n}\n.ui[class*=\"very padded\"].segment {\n  padding: 3em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.segment {\n  display: table;\n}\n\n/* Compact Group */\n.ui.compact.segments {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n.ui.compact.segments .segment,\n.ui.segments .compact.segment {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.segment {\n  display: table-cell;\n  padding: 2em;\n  text-align: center;\n  vertical-align: middle;\n  border-radius: 500em;\n}\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.segments,\n.ui.raised.segment {\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\n\n/* Group */\n.ui.segments {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  position: relative;\n  margin: 1rem 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n.ui.segments:first-child {\n  margin-top: 0em;\n}\n.ui.segments:last-child {\n  margin-bottom: 0em;\n}\n\n/* Nested Segment */\n.ui.segments > .segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em;\n  width: auto;\n  box-shadow: none;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.segments:not(.horizontal) > .segment:first-child {\n  border-top: none;\n  margin-top: 0em;\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n.ui.segments:not(.horizontal) > .segment:last-child {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Only */\n.ui.segments:not(.horizontal) > .segment:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Nested Group */\n.ui.segments > .ui.segments {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 1rem 1rem;\n}\n.ui.segments > .segments:first-child {\n  border-top: none;\n}\n.ui.segments > .segment + .segments:not(.horizontal) {\n  margin-top: 0em;\n}\n\n/* Horizontal Group */\n.ui.horizontal.segments {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  background-color: transparent;\n  border-radius: 0px;\n  padding: 0em;\n  background-color: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Nested Horizontal Group */\n.ui.segments > .horizontal.segments {\n  margin: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Horizontal Segment */\n.ui.horizontal.segments > .segment {\n  -webkit-box-flex: 1;\n          flex: 1 1 auto;\n  -ms-flex: 1 1 0px;\n  \n/* Solves #2550 MS Flex */\n  margin: 0em;\n  min-width: 0px;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Border Fixes */\n.ui.segments > .horizontal.segments:first-child {\n  border-top: none;\n}\n.ui.horizontal.segments > .segment:first-child {\n  border-left: none;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.segment {\n  opacity: 0.45;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.segment {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  -webkit-transition: all 0s linear;\n  transition: all 0s linear;\n}\n.ui.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  border-radius: 0.28571429rem;\n  z-index: 100;\n}\n.ui.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: segment-spin 0.6s linear;\n          animation: segment-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n@-webkit-keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Basic\n--------------------*/\n\n.ui.basic.segment {\n  background: none transparent;\n  box-shadow: none;\n  border: none;\n  border-radius: 0px;\n}\n\n/*-------------------\n       Clearing\n--------------------*/\n\n.ui.clearing.segment:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.segment:not(.inverted) {\n  border-top: 2px solid #DB2828;\n}\n.ui.inverted.red.segment {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n.ui.orange.segment:not(.inverted) {\n  border-top: 2px solid #F2711C;\n}\n.ui.inverted.orange.segment {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n.ui.yellow.segment:not(.inverted) {\n  border-top: 2px solid #FBBD08;\n}\n.ui.inverted.yellow.segment {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n.ui.olive.segment:not(.inverted) {\n  border-top: 2px solid #B5CC18;\n}\n.ui.inverted.olive.segment {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n.ui.green.segment:not(.inverted) {\n  border-top: 2px solid #21BA45;\n}\n.ui.inverted.green.segment {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n.ui.teal.segment:not(.inverted) {\n  border-top: 2px solid #00B5AD;\n}\n.ui.inverted.teal.segment {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n.ui.blue.segment:not(.inverted) {\n  border-top: 2px solid #2185D0;\n}\n.ui.inverted.blue.segment {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n.ui.violet.segment:not(.inverted) {\n  border-top: 2px solid #6435C9;\n}\n.ui.inverted.violet.segment {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n.ui.purple.segment:not(.inverted) {\n  border-top: 2px solid #A333C8;\n}\n.ui.inverted.purple.segment {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n.ui.pink.segment:not(.inverted) {\n  border-top: 2px solid #E03997;\n}\n.ui.inverted.pink.segment {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n.ui.brown.segment:not(.inverted) {\n  border-top: 2px solid #A5673F;\n}\n.ui.inverted.brown.segment {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n.ui.grey.segment:not(.inverted) {\n  border-top: 2px solid #767676;\n}\n.ui.inverted.grey.segment {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n.ui.black.segment:not(.inverted) {\n  border-top: 2px solid #1B1C1D;\n}\n.ui.inverted.black.segment {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui[class*=\"left aligned\"].segment {\n  text-align: left;\n}\n.ui[class*=\"right aligned\"].segment {\n  text-align: right;\n}\n.ui[class*=\"center aligned\"].segment {\n  text-align: center;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.segment,\n.ui[class*=\"left floated\"].segment {\n  float: left;\n  margin-right: 1em;\n}\n.ui[class*=\"right floated\"].segment {\n  float: right;\n  margin-left: 1em;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.segment {\n  border: none;\n  box-shadow: none;\n}\n.ui.inverted.segment,\n.ui.primary.inverted.segment {\n  background: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Nested */\n.ui.inverted.segment .segment {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.segment .inverted.segment {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Attached */\n.ui.inverted.attached.segment {\n  border-color: #555555;\n}\n\n/*-------------------\n     Emphasis\n--------------------*/\n\n\n/* Secondary */\n.ui.secondary.segment {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.secondary.inverted.segment {\n  background: #4c4f52 -webkit-linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/* Tertiary */\n.ui.tertiary.segment {\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.tertiary.inverted.segment {\n  background: #717579 -webkit-linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n\n/* Middle */\n.ui.attached.segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached:not(.message) + .ui.attached.segment:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].segment {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui.segment[class*=\"bottom attached\"] {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Size\n--------------------*/\n\n.ui.mini.segments .segment,\n.ui.mini.segment {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.segments .segment,\n.ui.tiny.segment {\n  font-size: 0.85714286rem;\n}\n.ui.small.segments .segment,\n.ui.small.segment {\n  font-size: 0.92857143rem;\n}\n.ui.segments .segment,\n.ui.segment {\n  font-size: 1rem;\n}\n.ui.large.segments .segment,\n.ui.large.segment {\n  font-size: 1.14285714rem;\n}\n.ui.big.segments .segment,\n.ui.big.segment {\n  font-size: 1.28571429rem;\n}\n.ui.huge.segments .segment,\n.ui.huge.segment {\n  font-size: 1.42857143rem;\n}\n.ui.massive.segments .segment,\n.ui.massive.segment {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/shape.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n              Shape\n*******************************/\n\n.ui.shape {\n  position: relative;\n  vertical-align: top;\n  display: inline-block;\n  -webkit-perspective: 2000px;\n          perspective: 2000px;\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n.ui.shape .sides {\n  -webkit-transform-style: preserve-3d;\n          transform-style: preserve-3d;\n}\n.ui.shape .side {\n  opacity: 1;\n  width: 100%;\n  margin: 0em !important;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n.ui.shape .side {\n  display: none;\n}\n.ui.shape .side * {\n  -webkit-backface-visibility: visible !important;\n          backface-visibility: visible !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.cube.shape .side {\n  min-width: 15em;\n  height: 15em;\n  padding: 2em;\n  background-color: #E6E6E6;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n}\n.ui.cube.shape .side > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  text-align: center;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n}\n.ui.cube.shape .side > .content > div {\n  display: table-cell;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.text.shape.animating .sides {\n  position: static;\n}\n.ui.text.shape .side {\n  white-space: nowrap;\n}\n.ui.text.shape .side > * {\n  white-space: normal;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.shape {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.shape .animating.side {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  display: block;\n  z-index: 100;\n}\n.ui.shape .hidden.side {\n  opacity: 0.6;\n}\n\n/*--------------\n      CSS\n---------------*/\n\n.ui.shape.animating .sides {\n  position: absolute;\n}\n.ui.shape.animating .sides {\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n.ui.shape.animating .side {\n  -webkit-transition: opacity 0.6s ease-in-out;\n  transition: opacity 0.6s ease-in-out;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.shape .active.side {\n  display: block;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/shape.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newWidth    = (settings.width == 'next')\n                ? $nextSide.outerWidth(true)\n                : (settings.width == 'initial')\n                  ? $module.width()\n                  : settings.width,\n              newHeight    = (settings.height == 'next')\n                ? $nextSide.outerHeight(true)\n                : (settings.height == 'initial')\n                  ? $module.height()\n                  : settings.height\n            ;\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            $clone.remove();\n            if(settings.width != 'auto') {\n              $module.css('width', newWidth + settings.jitter);\n              module.verbose('Specifying width during animation', newWidth);\n            }\n            if(settings.height != 'auto') {\n              $module.css('height', newHeight + settings.jitter);\n              module.verbose('Specifying height during animation', newHeight);\n            }\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              var\n                transform = module.get.transform.up()\n              ;\n              module.set.stageSize();\n              module.stage.above();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              var\n                transform = module.get.transform.down()\n              ;\n              module.set.stageSize();\n              module.stage.below();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              var\n                transform = module.get.transform.left()\n              ;\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              var\n                transform = module.get.transform.right()\n              ;\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // hide all debug content\n  silent     : false,\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)\n  jitter     : 0,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // width during animation, can be set to 'auto', initial', 'next' or pixel amount\n  width: 'initial',\n\n  // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount\n  height: 'initial',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/sidebar.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Sidebar\n*******************************/\n\n\n/* Sidebar Menu */\n.ui.sidebar {\n  position: fixed;\n  top: 0;\n  left: 0;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-transition: none;\n  transition: none;\n  will-change: transform;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  height: 100% !important;\n  max-height: 100%;\n  border-radius: 0em !important;\n  margin: 0em !important;\n  overflow-y: auto !important;\n  z-index: 102;\n}\n\n/* GPU Layers for Child Elements */\n.ui.sidebar > * {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n/*--------------\n   Direction\n---------------*/\n\n.ui.left.sidebar {\n  right: auto;\n  left: 0px;\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.sidebar {\n  right: 0px !important;\n  left: auto !important;\n  -webkit-transform: translate3d(100%, 0%, 0);\n          transform: translate3d(100%, 0%, 0);\n}\n.ui.top.sidebar,\n.ui.bottom.sidebar {\n  width: 100% !important;\n  height: auto !important;\n}\n.ui.top.sidebar {\n  top: 0px !important;\n  bottom: auto !important;\n  -webkit-transform: translate3d(0, -100%, 0);\n          transform: translate3d(0, -100%, 0);\n}\n.ui.bottom.sidebar {\n  top: auto !important;\n  bottom: 0px !important;\n  -webkit-transform: translate3d(0, 100%, 0);\n          transform: translate3d(0, 100%, 0);\n}\n\n/*--------------\n     Pushable\n---------------*/\n\n.pushable {\n  height: 100%;\n  overflow-x: hidden;\n  padding: 0em !important;\n}\n\n/* Whole Page */\nbody.pushable {\n  background: #545454 !important;\n}\n\n/* Page Context */\n.pushable:not(body) {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n.pushable:not(body) > .ui.sidebar,\n.pushable:not(body) > .fixed,\n.pushable:not(body) > .pusher:after {\n  position: absolute;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.pushable > .fixed {\n  position: fixed;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  will-change: transform;\n  z-index: 101;\n}\n\n/*--------------\n     Page\n---------------*/\n\n.pushable > .pusher {\n  position: relative;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  overflow: hidden;\n  min-height: 100%;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 2;\n}\nbody.pushable > .pusher {\n  background: #FFFFFF;\n}\n\n/* Pusher should inherit background from context */\n.pushable > .pusher {\n  background: inherit;\n}\n\n/*--------------\n     Dimmer\n---------------*/\n\n.pushable > .pusher:after {\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  content: '';\n  background-color: rgba(0, 0, 0, 0.4);\n  overflow: hidden;\n  opacity: 0;\n  -webkit-transition: opacity 500ms;\n  transition: opacity 500ms;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.sidebar.menu .item {\n  border-radius: 0em !important;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Dimmed\n---------------*/\n\n.pushable > .pusher.dimmed:after {\n  width: 100% !important;\n  height: 100% !important;\n  opacity: 1 !important;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.animating.sidebar {\n  visibility: visible;\n}\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.sidebar {\n  visibility: visible;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n\n/* Shadow Direction */\n.ui.left.visible.sidebar,\n.ui.right.visible.sidebar {\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n.ui.top.visible.sidebar,\n.ui.bottom.visible.sidebar {\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible On Load */\n.ui.visible.left.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(260px, 0, 0);\n          transform: translate3d(260px, 0, 0);\n}\n.ui.visible.right.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-260px, 0, 0);\n          transform: translate3d(-260px, 0, 0);\n}\n.ui.visible.top.sidebar ~ .fixed,\n.ui.visible.top.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 36px, 0);\n          transform: translate3d(0, 36px, 0);\n}\n.ui.visible.bottom.sidebar ~ .fixed,\n.ui.visible.bottom.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, -36px, 0);\n          transform: translate3d(0, -36px, 0);\n}\n\n/* opposite sides visible forces content overlay */\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n\n/*--------------\n       iOS\n---------------*/\n\n/*\n  iOS incorrectly sizes document when content\n  is presented outside of view with 2Dtranslate\n*/\nhtml.ios {\n  overflow-x: hidden;\n  -webkit-overflow-scrolling: touch;\n}\nhtml.ios,\nhtml.ios body {\n  height: initial !important;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n     Width\n---------------*/\n\n\n/* Left / Right */\n.ui.thin.left.sidebar,\n.ui.thin.right.sidebar {\n  width: 150px;\n}\n.ui[class*=\"very thin\"].left.sidebar,\n.ui[class*=\"very thin\"].right.sidebar {\n  width: 60px;\n}\n.ui.left.sidebar,\n.ui.right.sidebar {\n  width: 260px;\n}\n.ui.wide.left.sidebar,\n.ui.wide.right.sidebar {\n  width: 350px;\n}\n.ui[class*=\"very wide\"].left.sidebar,\n.ui[class*=\"very wide\"].right.sidebar {\n  width: 475px;\n}\n\n/* Left Visible */\n.ui.visible.thin.left.sidebar ~ .fixed,\n.ui.visible.thin.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(150px, 0, 0);\n          transform: translate3d(150px, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(60px, 0, 0);\n          transform: translate3d(60px, 0, 0);\n}\n.ui.visible.wide.left.sidebar ~ .fixed,\n.ui.visible.wide.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(350px, 0, 0);\n          transform: translate3d(350px, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(475px, 0, 0);\n          transform: translate3d(475px, 0, 0);\n}\n\n/* Right Visible */\n.ui.visible.thin.right.sidebar ~ .fixed,\n.ui.visible.thin.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-150px, 0, 0);\n          transform: translate3d(-150px, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-60px, 0, 0);\n          transform: translate3d(-60px, 0, 0);\n}\n.ui.visible.wide.right.sidebar ~ .fixed,\n.ui.visible.wide.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-350px, 0, 0);\n          transform: translate3d(-350px, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-475px, 0, 0);\n          transform: translate3d(-475px, 0, 0);\n}\n\n\n/*******************************\n          Animations\n*******************************/\n\n\n/*--------------\n    Overlay\n---------------*/\n\n\n/* Set-up */\n.ui.overlay.sidebar {\n  z-index: 102;\n}\n\n/* Initial */\n.ui.left.overlay.sidebar {\n  -webkit-transform: translate3d(-100%, 0%, 0);\n          transform: translate3d(-100%, 0%, 0);\n}\n.ui.right.overlay.sidebar {\n  -webkit-transform: translate3d(100%, 0%, 0);\n          transform: translate3d(100%, 0%, 0);\n}\n.ui.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* Animation */\n.animating.ui.overlay.sidebar,\n.ui.visible.overlay.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End - Sidebar */\n.ui.visible.left.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.right.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n\n/* End - Pusher */\n.ui.visible.overlay.sidebar ~ .fixed,\n.ui.visible.overlay.sidebar ~ .pusher {\n  -webkit-transform: none !important;\n          transform: none !important;\n}\n\n/*--------------\n      Push\n---------------*/\n\n\n/* Initial */\n.ui.push.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial */\n.ui.left.push.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.push.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0);\n}\n.ui.top.push.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.push.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* End */\n.ui.visible.push.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n    Uncover\n---------------*/\n\n\n/* Initial */\n.ui.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  z-index: 1;\n}\n\n/* End */\n.ui.visible.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/*--------------\n   Slide Along\n---------------*/\n\n\n/* Initial */\n.ui.slide.along.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.along.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n          transform: translate3d(-50%, 0, 0);\n}\n.ui.right.slide.along.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n          transform: translate3d(50%, 0, 0);\n}\n.ui.top.slide.along.sidebar {\n  -webkit-transform: translate3d(0, -50%, 0);\n          transform: translate3d(0, -50%, 0);\n}\n.ui.bottom.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n          transform: translate3d(0%, 50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.along.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n.ui.visible.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Slide Out\n---------------*/\n\n\n/* Initial */\n.ui.slide.out.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.out.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n          transform: translate3d(50%, 0, 0);\n}\n.ui.right.slide.out.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n          transform: translate3d(-50%, 0, 0);\n}\n.ui.top.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n          transform: translate3d(0%, 50%, 0);\n}\n.ui.bottom.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, -50%, 0);\n          transform: translate3d(0%, -50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.out.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n.ui.visible.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Scale Down\n---------------*/\n\n\n/* Initial */\n.ui.scale.down.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial  */\n.ui.left.scale.down.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.scale.down.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0);\n}\n.ui.top.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* Pusher - Initial */\n.ui.scale.down.left.sidebar ~ .pusher {\n  -webkit-transform-origin: 75% 50%;\n          transform-origin: 75% 50%;\n}\n.ui.scale.down.right.sidebar ~ .pusher {\n  -webkit-transform-origin: 25% 50%;\n          transform-origin: 25% 50%;\n}\n.ui.scale.down.top.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 75%;\n          transform-origin: 50% 75%;\n}\n.ui.scale.down.bottom.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 25%;\n          transform-origin: 50% 25%;\n}\n\n/* Animation */\n.ui.animating.scale.down > .visible.ui.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n.ui.visible.scale.down.sidebar ~ .pusher,\n.ui.animating.scale.down.sidebar ~ .pusher {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  overflow: hidden !important;\n}\n\n/* End */\n.ui.visible.scale.down.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n.ui.visible.scale.down.sidebar ~ .pusher {\n  -webkit-transform: scale(0.75);\n          transform: scale(0.75);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/sidebar.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          if(module.is.ios()) {\n            module.set.ios();\n          }\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/site.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Page\n*******************************/\n\n@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic&subset=latin');\nhtml,\nbody {\n  height: 100%;\n}\nhtml {\n  font-size: 14px;\n}\nbody {\n  margin: 0px;\n  padding: 0px;\n  overflow-x: hidden;\n  min-width: 320px;\n  background: #FFFFFF;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  font-smoothing: antialiased;\n}\n\n\n/*******************************\n             Headers\n*******************************/\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  line-height: 1.2857em;\n  margin: calc(2rem -  0.14285em ) 0em 1rem;\n  font-weight: bold;\n  padding: 0em;\n}\nh1 {\n  min-height: 1rem;\n  font-size: 2rem;\n}\nh2 {\n  font-size: 1.714rem;\n}\nh3 {\n  font-size: 1.28rem;\n}\nh4 {\n  font-size: 1.071rem;\n}\nh5 {\n  font-size: 1rem;\n}\nh1:first-child,\nh2:first-child,\nh3:first-child,\nh4:first-child,\nh5:first-child {\n  margin-top: 0em;\n}\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n             Text\n*******************************/\n\np {\n  margin: 0em 0em 1em;\n  line-height: 1.4285em;\n}\np:first-child {\n  margin-top: 0em;\n}\np:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Links\n--------------------*/\n\na {\n  color: #4183C4;\n  text-decoration: none;\n}\na:hover {\n  color: #1e70bf;\n  text-decoration: none;\n}\n\n\n/*******************************\n          Highlighting\n*******************************/\n\n\n/* Site */\n::-webkit-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n::-moz-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n::selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Form */\ntextarea::-webkit-selection,\ninput::-webkit-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\ntextarea::-moz-selection,\ninput::-moz-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\ntextarea::selection,\ninput::selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n\n/*******************************\n        Global Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/site.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/state.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/statistic.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Statistic\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Statistic\n*******************************/\n\n\n/* Standalone */\n.ui.statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 1em 0em;\n  max-width: auto;\n}\n.ui.statistic + .ui.statistic {\n  margin: 0em 0em 0em 1.5em;\n}\n.ui.statistic:first-child {\n  margin-top: 0em;\n}\n.ui.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Group\n*******************************/\n\n\n/* Grouped */\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n}\n.ui.statistics > .statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 0em 1.5em 2em;\n  max-width: auto;\n}\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em -1.5em -2em;\n}\n\n/* Clearing */\n.ui.statistics:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.statistics:first-child {\n  margin-top: 0em;\n}\n.ui.statistics:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n      Value\n---------------*/\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 4rem;\n  font-weight: normal;\n  line-height: 1em;\n  color: #1B1C1D;\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/*--------------\n     Label\n---------------*/\n\n.ui.statistics .statistic > .label,\n.ui.statistic > .label {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/* Top Label */\n.ui.statistics .statistic > .label ~ .value,\n.ui.statistic > .label ~ .value {\n  margin-top: 0rem;\n}\n\n/* Bottom Label */\n.ui.statistics .statistic > .value ~ .label,\n.ui.statistic > .value ~ .label {\n  margin-top: 0rem;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n   Icon Value\n---------------*/\n\n.ui.statistics .statistic > .value .icon,\n.ui.statistic > .value .icon {\n  opacity: 1;\n  width: auto;\n  margin: 0em;\n}\n\n/*--------------\n   Text Value\n---------------*/\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  line-height: 1em;\n  min-height: 2em;\n  font-weight: bold;\n  text-align: center;\n}\n.ui.statistics .statistic > .text.value + .label,\n.ui.statistic > .text.value + .label {\n  text-align: center;\n}\n\n/*--------------\n   Image Value\n---------------*/\n\n.ui.statistics .statistic > .value img,\n.ui.statistic > .value img {\n  max-height: 3rem;\n  vertical-align: baseline;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n      Count\n---------------*/\n\n.ui.ten.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.ten.statistics .statistic {\n  min-width: 10%;\n  margin: 0em 0em 2em;\n}\n.ui.nine.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.nine.statistics .statistic {\n  min-width: 11.11111111%;\n  margin: 0em 0em 2em;\n}\n.ui.eight.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.eight.statistics .statistic {\n  min-width: 12.5%;\n  margin: 0em 0em 2em;\n}\n.ui.seven.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.seven.statistics .statistic {\n  min-width: 14.28571429%;\n  margin: 0em 0em 2em;\n}\n.ui.six.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.six.statistics .statistic {\n  min-width: 16.66666667%;\n  margin: 0em 0em 2em;\n}\n.ui.five.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.five.statistics .statistic {\n  min-width: 20%;\n  margin: 0em 0em 2em;\n}\n.ui.four.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.four.statistics .statistic {\n  min-width: 25%;\n  margin: 0em 0em 2em;\n}\n.ui.three.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.three.statistics .statistic {\n  min-width: 33.33333333%;\n  margin: 0em 0em 2em;\n}\n.ui.two.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.two.statistics .statistic {\n  min-width: 50%;\n  margin: 0em 0em 2em;\n}\n.ui.one.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.one.statistics .statistic {\n  min-width: 100%;\n  margin: 0em 0em 2em;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.horizontal.statistics {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 0em;\n  max-width: none;\n}\n.ui.horizontal.statistics .statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  max-width: none;\n  margin: 1em 0em;\n}\n.ui.horizontal.statistic > .text.value,\n.ui.horizontal.statistics > .statistic > .text.value {\n  min-height: 0em !important;\n}\n.ui.horizontal.statistics .statistic > .value .icon,\n.ui.horizontal.statistic > .value .icon {\n  width: 1.18em;\n}\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.horizontal.statistics .statistic > .label,\n.ui.horizontal.statistic > .label {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0em 0em 0em 0.75em;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.red.statistics .statistic > .value,\n.ui.statistics .red.statistic > .value,\n.ui.red.statistic > .value {\n  color: #DB2828;\n}\n.ui.orange.statistics .statistic > .value,\n.ui.statistics .orange.statistic > .value,\n.ui.orange.statistic > .value {\n  color: #F2711C;\n}\n.ui.yellow.statistics .statistic > .value,\n.ui.statistics .yellow.statistic > .value,\n.ui.yellow.statistic > .value {\n  color: #FBBD08;\n}\n.ui.olive.statistics .statistic > .value,\n.ui.statistics .olive.statistic > .value,\n.ui.olive.statistic > .value {\n  color: #B5CC18;\n}\n.ui.green.statistics .statistic > .value,\n.ui.statistics .green.statistic > .value,\n.ui.green.statistic > .value {\n  color: #21BA45;\n}\n.ui.teal.statistics .statistic > .value,\n.ui.statistics .teal.statistic > .value,\n.ui.teal.statistic > .value {\n  color: #00B5AD;\n}\n.ui.blue.statistics .statistic > .value,\n.ui.statistics .blue.statistic > .value,\n.ui.blue.statistic > .value {\n  color: #2185D0;\n}\n.ui.violet.statistics .statistic > .value,\n.ui.statistics .violet.statistic > .value,\n.ui.violet.statistic > .value {\n  color: #6435C9;\n}\n.ui.purple.statistics .statistic > .value,\n.ui.statistics .purple.statistic > .value,\n.ui.purple.statistic > .value {\n  color: #A333C8;\n}\n.ui.pink.statistics .statistic > .value,\n.ui.statistics .pink.statistic > .value,\n.ui.pink.statistic > .value {\n  color: #E03997;\n}\n.ui.brown.statistics .statistic > .value,\n.ui.statistics .brown.statistic > .value,\n.ui.brown.statistic > .value {\n  color: #A5673F;\n}\n.ui.grey.statistics .statistic > .value,\n.ui.statistics .grey.statistic > .value,\n.ui.grey.statistic > .value {\n  color: #767676;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.statistics .statistic > .value,\n.ui.inverted.statistic .value {\n  color: #FFFFFF;\n}\n.ui.inverted.statistics .statistic > .label,\n.ui.inverted.statistic .label {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.red.statistics .statistic > .value,\n.ui.statistics .inverted.red.statistic > .value,\n.ui.inverted.red.statistic > .value {\n  color: #FF695E;\n}\n.ui.inverted.orange.statistics .statistic > .value,\n.ui.statistics .inverted.orange.statistic > .value,\n.ui.inverted.orange.statistic > .value {\n  color: #FF851B;\n}\n.ui.inverted.yellow.statistics .statistic > .value,\n.ui.statistics .inverted.yellow.statistic > .value,\n.ui.inverted.yellow.statistic > .value {\n  color: #FFE21F;\n}\n.ui.inverted.olive.statistics .statistic > .value,\n.ui.statistics .inverted.olive.statistic > .value,\n.ui.inverted.olive.statistic > .value {\n  color: #D9E778;\n}\n.ui.inverted.green.statistics .statistic > .value,\n.ui.statistics .inverted.green.statistic > .value,\n.ui.inverted.green.statistic > .value {\n  color: #2ECC40;\n}\n.ui.inverted.teal.statistics .statistic > .value,\n.ui.statistics .inverted.teal.statistic > .value,\n.ui.inverted.teal.statistic > .value {\n  color: #6DFFFF;\n}\n.ui.inverted.blue.statistics .statistic > .value,\n.ui.statistics .inverted.blue.statistic > .value,\n.ui.inverted.blue.statistic > .value {\n  color: #54C8FF;\n}\n.ui.inverted.violet.statistics .statistic > .value,\n.ui.statistics .inverted.violet.statistic > .value,\n.ui.inverted.violet.statistic > .value {\n  color: #A291FB;\n}\n.ui.inverted.purple.statistics .statistic > .value,\n.ui.statistics .inverted.purple.statistic > .value,\n.ui.inverted.purple.statistic > .value {\n  color: #DC73FF;\n}\n.ui.inverted.pink.statistics .statistic > .value,\n.ui.statistics .inverted.pink.statistic > .value,\n.ui.inverted.pink.statistic > .value {\n  color: #FF8EDF;\n}\n.ui.inverted.brown.statistics .statistic > .value,\n.ui.statistics .inverted.brown.statistic > .value,\n.ui.inverted.brown.statistic > .value {\n  color: #D67C1C;\n}\n.ui.inverted.grey.statistics .statistic > .value,\n.ui.statistics .inverted.grey.statistic > .value,\n.ui.inverted.grey.statistic > .value {\n  color: #DCDDDE;\n}\n\n/*--------------\n    Floated\n---------------*/\n\n.ui[class*=\"left floated\"].statistic {\n  float: left;\n  margin: 0em 2em 1em 0em;\n}\n.ui[class*=\"right floated\"].statistic {\n  float: right;\n  margin: 0em 0em 1em 2em;\n}\n.ui.floated.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n\n/* Mini */\n.ui.mini.statistics .statistic > .value,\n.ui.mini.statistic > .value {\n  font-size: 1.5rem !important;\n}\n.ui.mini.horizontal.statistics .statistic > .value,\n.ui.mini.horizontal.statistic > .value {\n  font-size: 1.5rem !important;\n}\n.ui.mini.statistics .statistic > .text.value,\n.ui.mini.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Tiny */\n.ui.tiny.statistics .statistic > .value,\n.ui.tiny.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.tiny.horizontal.statistics .statistic > .value,\n.ui.tiny.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.tiny.statistics .statistic > .text.value,\n.ui.tiny.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Small */\n.ui.small.statistics .statistic > .value,\n.ui.small.statistic > .value {\n  font-size: 3rem !important;\n}\n.ui.small.horizontal.statistics .statistic > .value,\n.ui.small.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.small.statistics .statistic > .text.value,\n.ui.small.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Medium */\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-size: 4rem !important;\n}\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  font-size: 3rem !important;\n}\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  font-size: 2rem !important;\n}\n\n/* Large */\n.ui.large.statistics .statistic > .value,\n.ui.large.statistic > .value {\n  font-size: 5rem !important;\n}\n.ui.large.horizontal.statistics .statistic > .value,\n.ui.large.horizontal.statistic > .value {\n  font-size: 4rem !important;\n}\n.ui.large.statistics .statistic > .text.value,\n.ui.large.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n/* Huge */\n.ui.huge.statistics .statistic > .value,\n.ui.huge.statistic > .value {\n  font-size: 6rem !important;\n}\n.ui.huge.horizontal.statistics .statistic > .value,\n.ui.huge.horizontal.statistic > .value {\n  font-size: 5rem !important;\n}\n.ui.huge.statistics .statistic > .text.value,\n.ui.huge.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/step.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Step\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Plural\n*******************************/\n\n.ui.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  margin: 1em 0em;\n  background: '';\n  box-shadow: none;\n  line-height: 1.14285714em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* First Steps */\n.ui.steps:first-child {\n  margin-top: 0em;\n}\n\n/* Last Steps */\n.ui.steps:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n           Singular\n*******************************/\n\n.ui.steps .step {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  vertical-align: middle;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  margin: 0em 0em;\n  padding: 1.14285714em 2em;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  border-radius: 0em;\n  border: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n}\n\n/* Arrow */\n.ui.steps .step:after {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  content: '';\n  top: 50%;\n  right: 0%;\n  border: medium none;\n  background-color: #FFFFFF;\n  width: 1.14285714em;\n  height: 1.14285714em;\n  border-style: solid;\n  border-color: rgba(34, 36, 38, 0.15);\n  border-width: 0px 1px 1px 0px;\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n          transform: translateY(-50%) translateX(50%) rotate(-45deg);\n}\n\n/* First Step */\n.ui.steps .step:first-child {\n  padding-left: 2em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n/* Last Step */\n.ui.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.steps .step:last-child {\n  border-right: none;\n  margin-right: 0em;\n}\n\n/* Only Step */\n.ui.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Title */\n.ui.steps .step .title {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  font-weight: bold;\n}\n.ui.steps .step > .title {\n  width: 100%;\n}\n\n/* Description */\n.ui.steps .step .description {\n  font-weight: normal;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.steps .step > .description {\n  width: 100%;\n}\n.ui.steps .step .title ~ .description {\n  margin-top: 0.25em;\n}\n\n/* Icon */\n.ui.steps .step > .icon {\n  line-height: 1;\n  font-size: 2.5em;\n  margin: 0em 1rem 0em 0em;\n}\n.ui.steps .step > .icon,\n.ui.steps .step > .icon ~ .content {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  -ms-flex-item-align: middle;\n      -ms-grid-row-align: middle;\n      align-self: middle;\n}\n.ui.steps .step > .icon ~ .content {\n  -webkit-box-flex: 1 0 auto;\n      -ms-flex-positive: 1 0 auto;\n          flex-grow: 1 0 auto;\n}\n\n/* Horizontal Icon */\n.ui.steps:not(.vertical) .step > .icon {\n  width: auto;\n}\n\n/* Link */\n.ui.steps .link.step,\n.ui.steps a.step {\n  cursor: pointer;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Ordered\n---------------*/\n\n.ui.ordered.steps {\n  counter-reset: ordered;\n}\n.ui.ordered.steps .step:before {\n  display: block;\n  position: static;\n  text-align: center;\n  content: counters(ordered, \".\");\n  -ms-flex-item-align: middle;\n      -ms-grid-row-align: middle;\n      align-self: middle;\n  margin-right: 1rem;\n  font-size: 2.5em;\n  counter-increment: ordered;\n  font-family: inherit;\n  font-weight: bold;\n}\n.ui.ordered.steps .step > * {\n  display: block;\n  -ms-flex-item-align: middle;\n      -ms-grid-row-align: middle;\n      align-self: middle;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  overflow: visible;\n}\n.ui.vertical.steps .step {\n  -webkit-box-pack: start;\n      -ms-flex-pack: start;\n          justify-content: flex-start;\n  border-radius: 0em;\n  padding: 1.14285714em 2em;\n  border-right: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.vertical.steps .step:first-child {\n  padding: 1.14285714em 2em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.vertical.steps .step:last-child {\n  border-bottom: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Arrow */\n.ui.vertical.steps .step:after {\n  display: none;\n}\n.ui.vertical.steps .step:after {\n  top: 50%;\n  right: 0%;\n  border-width: 0px 1px 1px 0px;\n}\n.ui.vertical.steps .step:after {\n  display: none;\n}\n.ui.vertical.steps .active.step:after {\n  display: block;\n}\n.ui.vertical.steps .step:last-child:after {\n  display: none;\n}\n.ui.vertical.steps .active.step:last-child:after {\n  display: block;\n}\n\n/*---------------\n    Responsive\n----------------*/\n\n\n/* Mobile (Default) */\n@media only screen and (max-width: 767px) {\n  .ui.steps {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.steps .step {\n    width: 100% !important;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n  .ui.steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n  .ui.steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n  \n/* Arrow */\n  .ui.steps .step:after {\n    display: none !important;\n  }\n  \n/* Content */\n  .ui.steps .step .content {\n    text-align: center;\n  }\n  \n/* Icon */\n  .ui.steps .step > .icon,\n  .ui.ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/* Link Hover */\n.ui.steps .link.step:hover::after,\n.ui.steps .link.step:hover,\n.ui.steps a.step:hover::after,\n.ui.steps a.step:hover {\n  background: #F9FAFB;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Link Down */\n.ui.steps .link.step:active::after,\n.ui.steps .link.step:active,\n.ui.steps a.step:active::after,\n.ui.steps a.step:active {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.9);\n}\n\n/* Active */\n.ui.steps .step.active {\n  cursor: auto;\n  background: #F3F4F5;\n}\n.ui.steps .step.active:after {\n  background: #F3F4F5;\n}\n.ui.steps .step.active .title {\n  color: #4183C4;\n}\n.ui.ordered.steps .step.active:before,\n.ui.steps .active.step .icon {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Active Arrow */\n.ui.steps .step:after {\n  display: block;\n}\n.ui.steps .active.step:after {\n  display: block;\n}\n.ui.steps .step:last-child:after {\n  display: none;\n}\n.ui.steps .active.step:last-child:after {\n  display: none;\n}\n\n/* Active Hover */\n.ui.steps .link.active.step:hover::after,\n.ui.steps .link.active.step:hover,\n.ui.steps a.active.step:hover::after,\n.ui.steps a.active.step:hover {\n  cursor: pointer;\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Completed */\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  color: #21BA45;\n}\n\n/* Disabled */\n.ui.steps .disabled.step {\n  cursor: auto;\n  background: #FFFFFF;\n  pointer-events: none;\n}\n.ui.steps .disabled.step,\n.ui.steps .disabled.step .title,\n.ui.steps .disabled.step .description {\n  color: rgba(40, 40, 40, 0.3);\n}\n.ui.steps .disabled.step:after {\n  background: #FFFFFF;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n   Stackable\n---------------*/\n\n\n/* Tablet Or Below */\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].steps {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  \n/* Steps */\n  .ui[class*=\"tablet stackable\"].steps .step {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n  .ui[class*=\"tablet stackable\"].steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n  .ui[class*=\"tablet stackable\"].steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n  \n/* Arrow */\n  .ui[class*=\"tablet stackable\"].steps .step:after {\n    display: none !important;\n  }\n  \n/* Content */\n  .ui[class*=\"tablet stackable\"].steps .step .content {\n    text-align: center;\n  }\n  \n/* Icon */\n  .ui[class*=\"tablet stackable\"].steps .step > .icon,\n  .ui[class*=\"tablet stackable\"].ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n\n/* Fluid */\n.ui.fluid.steps {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* Top */\n.ui.attached.steps {\n  width: calc(100% +  2px ) !important;\n  margin: 0em -1px 0;\n  max-width: calc(100% +  2px );\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.attached.steps .step:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.attached.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n.ui.bottom.attached.steps {\n  margin: 0 -1px 0em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.bottom.attached.steps .step:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui.bottom.attached.steps .step:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/*-------------------\n    Evenly Divided\n--------------------*/\n\n.ui.one.steps,\n.ui.two.steps,\n.ui.three.steps,\n.ui.four.steps,\n.ui.five.steps,\n.ui.six.steps,\n.ui.seven.steps,\n.ui.eight.steps {\n  width: 100%;\n}\n.ui.one.steps > .step,\n.ui.two.steps > .step,\n.ui.three.steps > .step,\n.ui.four.steps > .step,\n.ui.five.steps > .step,\n.ui.six.steps > .step,\n.ui.seven.steps > .step,\n.ui.eight.steps > .step {\n  -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap;\n}\n.ui.one.steps > .step {\n  width: 100%;\n}\n.ui.two.steps > .step {\n  width: 50%;\n}\n.ui.three.steps > .step {\n  width: 33.333%;\n}\n.ui.four.steps > .step {\n  width: 25%;\n}\n.ui.five.steps > .step {\n  width: 20%;\n}\n.ui.six.steps > .step {\n  width: 16.666%;\n}\n.ui.seven.steps > .step {\n  width: 14.285%;\n}\n.ui.eight.steps > .step {\n  width: 12.500%;\n}\n\n/*-------------------\n       Sizes\n--------------------*/\n\n.ui.mini.steps .step,\n.ui.mini.step {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.steps .step,\n.ui.tiny.step {\n  font-size: 0.85714286rem;\n}\n.ui.small.steps .step,\n.ui.small.step {\n  font-size: 0.92857143rem;\n}\n.ui.steps .step,\n.ui.step {\n  font-size: 1rem;\n}\n.ui.large.steps .step,\n.ui.large.step {\n  font-size: 1.14285714rem;\n}\n.ui.big.steps .step,\n.ui.big.step {\n  font-size: 1.28571429rem;\n}\n.ui.huge.steps .step,\n.ui.huge.step {\n  font-size: 1.42857143rem;\n}\n.ui.massive.steps .step,\n.ui.massive.step {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Step';\n  src: url(data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiInASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwAFJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgEUKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA) format('woff');\n}\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  font-family: 'Step';\n  content: '\\e800';\n  \n/* '' */\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/sticky.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Sticky\n*******************************/\n\n.ui.sticky {\n  position: static;\n  -webkit-transition: none;\n  transition: none;\n  z-index: 800;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/* Bound */\n.ui.sticky.bound {\n  position: absolute;\n  left: auto;\n  right: auto;\n}\n\n/* Fixed */\n.ui.sticky.fixed {\n  position: fixed;\n  left: auto;\n  right: auto;\n}\n\n/* Bound/Fixed Position */\n.ui.sticky.bound.top,\n.ui.sticky.fixed.top {\n  top: 0px;\n  bottom: auto;\n}\n.ui.sticky.bound.bottom,\n.ui.sticky.fixed.bottom {\n  top: auto;\n  bottom: 0px;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n.ui.native.sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/sticky.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n\n        documentObserver,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            observer         = new MutationObserver(module.event.changed);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe($context[0], {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          $container = $module.offsetParent();\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu', mutations);\n              module.refresh();\n            }, 100);\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits : ( element.height < scrollContext.height ),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n            module.set.size();\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n\n          if(elementVisible) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  silent         : false,\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  jitter         : 5, // will only set container height if difference between context and container is larger than this number\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/tab.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           UI Tabs\n*******************************/\n\n.ui.tab {\n  display: none;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------------\n       Active\n---------------------*/\n\n.ui.tab.active,\n.ui.tab.open {\n  display: block;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.tab.loading {\n  position: relative;\n  overflow: hidden;\n  display: block;\n  min-height: 250px;\n}\n.ui.tab.loading * {\n  position: relative !important;\n  left: -10000px !important;\n}\n.ui.tab.loading:before,\n.ui.tab.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.tab.loading:after,\n.ui.tab.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n\n/*******************************\n         Tab Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/tab.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(evaluateScripts) {\n              module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n              $tab.html(html);\n            }\n            else {\n              module.debug('Updating HTML', tabPath, html);\n              tab.innerHTML = html;\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  if(settings.cacheType == 'response') {\n                    module.cache.add(fullTabPath, response);\n                  }\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  if(settings.cacheType != 'response') {\n                    module.cache.add(fullTabPath, $tab.html());\n                  }\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(settings.evaluateScripts == 'once') {\n                module.update.content(tabPath, cachedContent, false);\n              }\n              else {\n                module.update.content(tabPath, cachedContent);\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab          = module.get.tabElement(tabPath),\n              $deactiveTabs = (settings.deactivate == 'siblings')\n                ? $tab.siblings($tabs)\n                : $tabs.not($tab),\n              isActive      = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n              ;\n              $deactiveTabs\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation         = module.get.navElement(tabPath),\n              $deactiveNavigation = (settings.deactivate == 'siblings')\n                ? $navigation.siblings($allModules)\n                : $allModules.not($navigation),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n              ;\n              $deactiveNavigation\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,      // use browser history\n  historyType     : 'hash',     // #/ or html5 state\n  path            : false,      // base path of url\n\n  context         : false,      // specify a context that tabs must appear inside\n  childrenOnly    : false,      // use only tabs that are children of context\n  maxDepth        : 25,         // max depth a tab can be nested\n\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\n\n  alwaysRefresh   : false,      // load tab content new every tab click\n  cache           : true,       // cache the content requests to pull locally\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\n  ignoreFirstLoad : false,      // don't load remote content on first load\n\n  apiSettings     : false,      // settings for api call\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/table.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Table\n*******************************/\n\n\n/* Prototype */\n.ui.table {\n  width: 100%;\n  background: #FFFFFF;\n  margin: 1em 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n  border-radius: 0.28571429rem;\n  text-align: left;\n  color: rgba(0, 0, 0, 0.87);\n  border-collapse: separate;\n  border-spacing: 0px;\n}\n.ui.table:first-child {\n  margin-top: 0em;\n}\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n             Parts\n*******************************/\n\n\n/* Table Content */\n.ui.table th,\n.ui.table td {\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n/* Headers */\n.ui.table thead {\n  box-shadow: none;\n}\n.ui.table thead th {\n  cursor: auto;\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.92857143em 0.78571429em;\n  vertical-align: inherit;\n  font-style: none;\n  font-weight: bold;\n  text-transform: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  border-left: none;\n}\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Footer */\n.ui.table tfoot {\n  box-shadow: none;\n}\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429em 0.78571429em;\n  vertical-align: middle;\n  font-style: normal;\n  font-weight: normal;\n  text-transform: none;\n}\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Table Row */\n.ui.table tr td {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n.ui.table td {\n  padding: 0.78571429em 0.78571429em;\n  text-align: inherit;\n}\n\n/* Icons */\n.ui.table > .icon {\n  vertical-align: baseline;\n}\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n.ui.table.segment {\n  padding: 0em;\n}\n.ui.table.segment:after {\n  display: none;\n}\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n/* Responsive */\n@media only screen and (max-width: 767px) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    width: auto !important;\n    display: block !important;\n  }\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n  .ui.table:not(.unstackable) thead {\n    display: block;\n  }\n  .ui.table:not(.unstackable) tfoot {\n    display: block;\n  }\n  .ui.table:not(.unstackable) tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em !important;\n    box-shadow: none !important;\n  }\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n  \n/* Definition Table */\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/* UI Image */\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n.ui.structured.table thead th {\n  border-left: none;\n  border-right: none;\n}\n.ui.structured.sortable.table thead th {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.structured.basic.table th {\n  border-left: none;\n  border-right: none;\n}\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: -1px -1px 0px 1px #FFFFFF;\n}\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: rgba(0, 0, 0, 0.4);\n  color: normal;\n  box-shadow: 1px 1px 0px 1px #FFFFFF;\n}\n\n/* Remove Border */\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  box-shadow: 0px -1px 0px 1px #FFFFFF;\n}\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  box-shadow: 0px 1px 0px 1px #FFFFFF;\n}\n\n/* Highlight Defining Column */\n.ui.definition.table tr td:first-child:not(.ignored),\n.ui.definition.table tr td.definition {\n  background: rgba(0, 0, 0, 0.03);\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  text-transform: '';\n  box-shadow: '';\n  text-align: '';\n  font-size: 1em;\n  padding-left: '';\n  padding-right: '';\n}\n\n/* Fix 2nd Column */\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.definition.table td:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  box-shadow: 0px 0px 0px #A3C293 inset;\n}\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: #FCFFF5 !important;\n  color: #2C662D !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n.ui.table tr.error,\n.ui.table td.error {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  box-shadow: 0px 0px 0px #C9BA9B inset;\n}\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: #FFFAF3 !important;\n  color: #573A08 !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n}\n.ui.table tr.active,\n.ui.table td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    width: 100% !important;\n    display: block !important;\n  }\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: block;\n  }\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: block;\n  }\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em;\n    box-shadow: none !important;\n  }\n  \n/* Definition Table */\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.table {\n  table-layout: fixed;\n}\n.ui.fixed.table th,\n.ui.fixed.table td {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n/*--------------\n   Selectable\n---------------*/\n\n.ui.selectable.table tbody tr:hover,\n.ui.table tbody tr td.selectable:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.selectable.inverted.table tbody tr:hover,\n.ui.inverted.table tbody tr td.selectable:hover {\n  background: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n}\n\n/* Selectable Cell Link */\n.ui.table tbody tr td.selectable {\n  padding: 0em;\n}\n.ui.table tbody tr td.selectable > a:not(.ui) {\n  display: block;\n  color: inherit;\n  padding: 0.78571429em 0.78571429em;\n}\n\n/* Other States */\n.ui.selectable.table tr.error:hover,\n.ui.table tr td.selectable.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n.ui.selectable.table tr.warning:hover,\n.ui.table tr td.selectable.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: #fff4e4 !important;\n  color: #493107 !important;\n}\n.ui.selectable.table tr.active:hover,\n.ui.table tr td.selectable.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n.ui.selectable.table tr.positive:hover,\n.ui.table tr td.selectable.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: #f7ffe6 !important;\n  color: #275b28 !important;\n}\n.ui.selectable.table tr.negative:hover,\n.ui.table tr td.selectable.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n\n/* Middle */\n.ui.attached.table {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached + .ui.attached.table:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].table {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].table {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1em;\n  box-shadow: none, none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].table:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n\n/* Table Striping */\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 50, 0.02);\n}\n\n/* Stripes */\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n/* Allow striped active hover */\n.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {\n  background: #EFEFEF !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.table {\n  border-top: 0.2em solid #DB2828;\n}\n.ui.inverted.red.table {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n.ui.orange.table {\n  border-top: 0.2em solid #F2711C;\n}\n.ui.inverted.orange.table {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n.ui.yellow.table {\n  border-top: 0.2em solid #FBBD08;\n}\n.ui.inverted.yellow.table {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n.ui.olive.table {\n  border-top: 0.2em solid #B5CC18;\n}\n.ui.inverted.olive.table {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n.ui.green.table {\n  border-top: 0.2em solid #21BA45;\n}\n.ui.inverted.green.table {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n.ui.teal.table {\n  border-top: 0.2em solid #00B5AD;\n}\n.ui.inverted.teal.table {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n.ui.blue.table {\n  border-top: 0.2em solid #2185D0;\n}\n.ui.inverted.blue.table {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n.ui.violet.table {\n  border-top: 0.2em solid #6435C9;\n}\n.ui.inverted.violet.table {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n.ui.purple.table {\n  border-top: 0.2em solid #A333C8;\n}\n.ui.inverted.purple.table {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n.ui.pink.table {\n  border-top: 0.2em solid #E03997;\n}\n.ui.inverted.pink.table {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n.ui.brown.table {\n  border-top: 0.2em solid #A5673F;\n}\n.ui.inverted.brown.table {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n.ui.grey.table {\n  border-top: 0.2em solid #767676;\n}\n.ui.inverted.grey.table {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n.ui.black.table {\n  border-top: 0.2em solid #1B1C1D;\n}\n.ui.inverted.black.table {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n  Column Count\n---------------*/\n\n\n/* Grid Based */\n.ui.one.column.table td {\n  width: 100%;\n}\n.ui.two.column.table td {\n  width: 50%;\n}\n.ui.three.column.table td {\n  width: 33.33333333%;\n}\n.ui.four.column.table td {\n  width: 25%;\n}\n.ui.five.column.table td {\n  width: 20%;\n}\n.ui.six.column.table td {\n  width: 16.66666667%;\n}\n.ui.seven.column.table td {\n  width: 14.28571429%;\n}\n.ui.eight.column.table td {\n  width: 12.5%;\n}\n.ui.nine.column.table td {\n  width: 11.11111111%;\n}\n.ui.ten.column.table td {\n  width: 10%;\n}\n.ui.eleven.column.table td {\n  width: 9.09090909%;\n}\n.ui.twelve.column.table td {\n  width: 8.33333333%;\n}\n.ui.thirteen.column.table td {\n  width: 7.69230769%;\n}\n.ui.fourteen.column.table td {\n  width: 7.14285714%;\n}\n.ui.fifteen.column.table td {\n  width: 6.66666667%;\n}\n.ui.sixteen.column.table td {\n  width: 6.25%;\n}\n\n/* Column Width */\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: 6.25%;\n}\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: 12.5%;\n}\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: 18.75%;\n}\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: 25%;\n}\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: 31.25%;\n}\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: 37.5%;\n}\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: 43.75%;\n}\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: 50%;\n}\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: 56.25%;\n}\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: 62.5%;\n}\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: 68.75%;\n}\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: 75%;\n}\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: 81.25%;\n}\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: 87.5%;\n}\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: 93.75%;\n}\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: 100%;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: auto;\n  opacity: 0.8;\n  margin: 0em 0em 0em 0.5em;\n  font-family: 'Icons';\n}\n.ui.sortable.table thead th.ascending:after {\n  content: '\\f0d8';\n}\n.ui.sortable.table thead th.descending:after {\n  content: '\\f0d7';\n}\n\n/* Hover */\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: rgba(40, 40, 40, 0.3);\n}\n.ui.sortable.table thead th:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Sorted */\n.ui.sortable.table thead th.sorted {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n.ui.sortable.table thead th.sorted:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.sortable.table thead th.sorted {\n  background: rgba(255, 255, 255, 0.15) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n.ui.inverted.sortable.table thead th:hover {\n  background: rgba(255, 255, 255, 0.08) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n.ui.inverted.sortable.table thead th {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Text Color */\n.ui.inverted.table {\n  background: #333333;\n  color: rgba(255, 255, 255, 0.9);\n  border: none;\n}\n.ui.inverted.table th {\n  background-color: rgba(0, 0, 0, 0.15);\n  border-color: rgba(255, 255, 255, 0.1) !important;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.table tr td {\n  border-color: rgba(255, 255, 255, 0.1) !important;\n}\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/* Definition */\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: #FFFFFF;\n}\n.ui.inverted.definition.table tr td:first-child {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: transparent;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  box-shadow: none;\n}\n.ui.basic.table th {\n  background: transparent;\n  border-left: none;\n}\n.ui.basic.table tbody tr {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n.ui.basic.table td {\n  background: transparent;\n}\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n/* Very Basic */\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: '';\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: 1em;\n  padding-right: 1em;\n}\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: 1em 1em;\n}\n\n/* Very */\n.ui[class*=\"very padded\"].table th {\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n}\n.ui[class*=\"very padded\"].table td {\n  padding: 1.5em 1.5em;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: 0.7em;\n  padding-right: 0.7em;\n}\n.ui.compact.table td {\n  padding: 0.5em 0.7em;\n}\n\n/* Very */\n.ui[class*=\"very compact\"].table th {\n  padding-left: 0.6em;\n  padding-right: 0.6em;\n}\n.ui[class*=\"very compact\"].table td {\n  padding: 0.4em 0.6em;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n\n/* Small */\n.ui.small.table {\n  font-size: 0.9em;\n}\n\n/* Standard */\n.ui.table {\n  font-size: 1em;\n}\n\n/* Large */\n.ui.large.table {\n  font-size: 1.1em;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/transition.css",
    "content": "/*!\n * # Semantic UI 2.2.4 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n          Transitions\n*******************************/\n\n.transition {\n  -webkit-animation-iteration-count: 1;\n          animation-iteration-count: 1;\n  -webkit-animation-duration: 300ms;\n          animation-duration: 300ms;\n  -webkit-animation-timing-function: ease;\n          animation-timing-function: ease;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/* Animating */\n.animating.transition {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  visibility: visible !important;\n}\n\n/* Loading */\n.loading.transition {\n  position: absolute;\n  top: -99999px;\n  left: -99999px;\n}\n\n/* Hidden */\n.hidden.transition {\n  display: none;\n  visibility: hidden;\n}\n\n/* Visible */\n.visible.transition {\n  display: block !important;\n  visibility: visible !important;\n  \n/*  backface-visibility: @backfaceVisibility;\n  transform: @use3DAcceleration;*/\n}\n/* Disabled */\n.disabled.transition {\n  -webkit-animation-play-state: paused;\n          animation-play-state: paused;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.looping.transition {\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n}\n\n\n/*******************************\n          Transitions\n*******************************/\n\n/*\n  Some transitions adapted from Animate CSS\n  https://github.com/daneden/animate.css\n\n  Additional transitions adapted from Glide\n  by Nick Pettit - https://github.com/nickpettit/glide\n*/\n\n/*--------------\n     Browse\n---------------*/\n\n.transition.browse {\n  -webkit-animation-duration: 500ms;\n          animation-duration: 500ms;\n}\n.transition.browse.in {\n  -webkit-animation-name: browseIn;\n          animation-name: browseIn;\n}\n.transition.browse.out,\n.transition.browse.left.out {\n  -webkit-animation-name: browseOutLeft;\n          animation-name: browseOutLeft;\n}\n.transition.browse.right.out {\n  -webkit-animation-name: browseOutRight;\n          animation-name: browseOutRight;\n}\n\n/* In */\n@-webkit-keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n            transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n            transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n@keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n            transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n            transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n/* Out */\n@-webkit-keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n/*--------------\n     Drop\n---------------*/\n\n.drop.transition {\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n  -webkit-animation-duration: 400ms;\n          animation-duration: 400ms;\n  -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n          animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n}\n.drop.transition.in {\n  -webkit-animation-name: dropIn;\n          animation-name: dropIn;\n}\n.drop.transition.out {\n  -webkit-animation-name: dropOut;\n          animation-name: dropOut;\n}\n\n/* Drop */\n@-webkit-keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@-webkit-keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n}\n@keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.transition.fade.in {\n  -webkit-animation-name: fadeIn;\n          animation-name: fadeIn;\n}\n.transition[class*=\"fade up\"].in {\n  -webkit-animation-name: fadeInUp;\n          animation-name: fadeInUp;\n}\n.transition[class*=\"fade down\"].in {\n  -webkit-animation-name: fadeInDown;\n          animation-name: fadeInDown;\n}\n.transition[class*=\"fade left\"].in {\n  -webkit-animation-name: fadeInLeft;\n          animation-name: fadeInLeft;\n}\n.transition[class*=\"fade right\"].in {\n  -webkit-animation-name: fadeInRight;\n          animation-name: fadeInRight;\n}\n.transition.fade.out {\n  -webkit-animation-name: fadeOut;\n          animation-name: fadeOut;\n}\n.transition[class*=\"fade up\"].out {\n  -webkit-animation-name: fadeOutUp;\n          animation-name: fadeOutUp;\n}\n.transition[class*=\"fade down\"].out {\n  -webkit-animation-name: fadeOutDown;\n          animation-name: fadeOutDown;\n}\n.transition[class*=\"fade left\"].out {\n  -webkit-animation-name: fadeOutLeft;\n          animation-name: fadeOutLeft;\n}\n.transition[class*=\"fade right\"].out {\n  -webkit-animation-name: fadeOutRight;\n          animation-name: fadeOutRight;\n}\n\n/* In */\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n            transform: translateY(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n            transform: translateY(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n            transform: translateY(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n            transform: translateY(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n            transform: translateX(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n            transform: translateX(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n            transform: translateX(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n            transform: translateX(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n\n/* Out */\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n            transform: translateY(5%);\n  }\n}\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n            transform: translateY(5%);\n  }\n}\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n            transform: translateY(-5%);\n  }\n}\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n            transform: translateY(-5%);\n  }\n}\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n            transform: translateX(5%);\n  }\n}\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n            transform: translateX(5%);\n  }\n}\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n            transform: translateX(-5%);\n  }\n}\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n            transform: translateX(-5%);\n  }\n}\n\n/*--------------\n     Flips\n---------------*/\n\n.flip.transition.in,\n.flip.transition.out {\n  -webkit-animation-duration: 600ms;\n          animation-duration: 600ms;\n}\n.horizontal.flip.transition.in {\n  -webkit-animation-name: horizontalFlipIn;\n          animation-name: horizontalFlipIn;\n}\n.horizontal.flip.transition.out {\n  -webkit-animation-name: horizontalFlipOut;\n          animation-name: horizontalFlipOut;\n}\n.vertical.flip.transition.in {\n  -webkit-animation-name: verticalFlipIn;\n          animation-name: verticalFlipIn;\n}\n.vertical.flip.transition.out {\n  -webkit-animation-name: verticalFlipOut;\n          animation-name: verticalFlipOut;\n}\n\n/* In */\n@-webkit-keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n            transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n@keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n            transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n@-webkit-keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n@keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n/* Out */\n@-webkit-keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n            transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n@keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n            transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n@keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n/*--------------\n      Scale\n---------------*/\n\n.scale.transition.in {\n  -webkit-animation-name: scaleIn;\n          animation-name: scaleIn;\n}\n.scale.transition.out {\n  -webkit-animation-name: scaleOut;\n          animation-name: scaleOut;\n}\n@-webkit-keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n            transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n            transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n\n/* Out */\n@-webkit-keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n  }\n}\n@keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n  }\n}\n\n/*--------------\n      Fly\n---------------*/\n\n\n/* Inward */\n.transition.fly {\n  -webkit-animation-duration: 0.6s;\n          animation-duration: 0.6s;\n  -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n          transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.transition.fly.in {\n  -webkit-animation-name: flyIn;\n          animation-name: flyIn;\n}\n.transition[class*=\"fly up\"].in {\n  -webkit-animation-name: flyInUp;\n          animation-name: flyInUp;\n}\n.transition[class*=\"fly down\"].in {\n  -webkit-animation-name: flyInDown;\n          animation-name: flyInDown;\n}\n.transition[class*=\"fly left\"].in {\n  -webkit-animation-name: flyInLeft;\n          animation-name: flyInLeft;\n}\n.transition[class*=\"fly right\"].in {\n  -webkit-animation-name: flyInRight;\n          animation-name: flyInRight;\n}\n\n/* Outward */\n.transition.fly.out {\n  -webkit-animation-name: flyOut;\n          animation-name: flyOut;\n}\n.transition[class*=\"fly up\"].out {\n  -webkit-animation-name: flyOutUp;\n          animation-name: flyOutUp;\n}\n.transition[class*=\"fly down\"].out {\n  -webkit-animation-name: flyOutDown;\n          animation-name: flyOutDown;\n}\n.transition[class*=\"fly left\"].out {\n  -webkit-animation-name: flyOutLeft;\n          animation-name: flyOutLeft;\n}\n.transition[class*=\"fly right\"].out {\n  -webkit-animation-name: flyOutRight;\n          animation-name: flyOutRight;\n}\n\n/* In */\n@-webkit-keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n            transform: scale3d(1.03, 1.03, 1.03);\n  }\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n            transform: scale3d(0.97, 0.97, 0.97);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n            transform: scale3d(1.03, 1.03, 1.03);\n  }\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n            transform: scale3d(0.97, 0.97, 0.97);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@-webkit-keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n            transform: translate3d(0, 1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n            transform: translate3d(0, -5px, 0);\n  }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n@keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n            transform: translate3d(0, 1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n            transform: translate3d(0, -5px, 0);\n  }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n@-webkit-keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n            transform: translate3d(0, -1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n            transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n            transform: translate3d(0, 5px, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n            transform: translate3d(0, -1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n            transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n            transform: translate3d(0, 5px, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@-webkit-keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n            transform: translate3d(1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n            transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n            transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n            transform: translate3d(-5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n            transform: translate3d(1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n            transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n            transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n            transform: translate3d(-5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@-webkit-keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n            transform: translate3d(-1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n            transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n            transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n            transform: translate3d(5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n            transform: translate3d(-1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n            transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n            transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n            transform: translate3d(5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n\n/* Out */\n@-webkit-keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  50%,\n  55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n@keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  50%,\n  55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n@-webkit-keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n            transform: translate3d(0, 2000px, 0);\n  }\n}\n@keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n            transform: translate3d(0, 2000px, 0);\n  }\n}\n@-webkit-keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n            transform: translate3d(0, 20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n            transform: translate3d(0, -2000px, 0);\n  }\n}\n@keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n            transform: translate3d(0, 20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n            transform: translate3d(0, -2000px, 0);\n  }\n}\n@-webkit-keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n            transform: translate3d(20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n            transform: translate3d(-2000px, 0, 0);\n  }\n}\n@keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n            transform: translate3d(20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n            transform: translate3d(-2000px, 0, 0);\n  }\n}\n@-webkit-keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n            transform: translate3d(-20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n            transform: translate3d(2000px, 0, 0);\n  }\n}\n@keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n            transform: translate3d(-20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n            transform: translate3d(2000px, 0, 0);\n  }\n}\n\n/*--------------\n     Slide\n---------------*/\n\n.transition.slide.in,\n.transition[class*=\"slide down\"].in {\n  -webkit-animation-name: slideInY;\n          animation-name: slideInY;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"slide up\"].in {\n  -webkit-animation-name: slideInY;\n          animation-name: slideInY;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].in {\n  -webkit-animation-name: slideInX;\n          animation-name: slideInX;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"slide right\"].in {\n  -webkit-animation-name: slideInX;\n          animation-name: slideInX;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n.transition.slide.out,\n.transition[class*=\"slide down\"].out {\n  -webkit-animation-name: slideOutY;\n          animation-name: slideOutY;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"slide up\"].out {\n  -webkit-animation-name: slideOutY;\n          animation-name: slideOutY;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].out {\n  -webkit-animation-name: slideOutX;\n          animation-name: slideOutX;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"slide right\"].out {\n  -webkit-animation-name: slideOutX;\n          animation-name: slideOutX;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n\n/* In */\n@-webkit-keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n}\n@keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n}\n@-webkit-keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n}\n@keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n}\n\n/* Out */\n@-webkit-keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n}\n@keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n}\n@-webkit-keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n}\n@keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n}\n\n/*--------------\n     Swing\n---------------*/\n\n.transition.swing {\n  -webkit-animation-duration: 800ms;\n          animation-duration: 800ms;\n}\n.transition[class*=\"swing down\"].in {\n  -webkit-animation-name: swingInX;\n          animation-name: swingInX;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"swing up\"].in {\n  -webkit-animation-name: swingInX;\n          animation-name: swingInX;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].in {\n  -webkit-animation-name: swingInY;\n          animation-name: swingInY;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"swing right\"].in {\n  -webkit-animation-name: swingInY;\n          animation-name: swingInY;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n.transition.swing.out,\n.transition[class*=\"swing down\"].out {\n  -webkit-animation-name: swingOutX;\n          animation-name: swingOutX;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"swing up\"].out {\n  -webkit-animation-name: swingOutX;\n          animation-name: swingOutX;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].out {\n  -webkit-animation-name: swingOutY;\n          animation-name: swingOutY;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"swing right\"].out {\n  -webkit-animation-name: swingOutY;\n          animation-name: swingOutY;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n\n/* In */\n@-webkit-keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n            transform: perspective(1000px) rotateX(15deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n}\n@keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n            transform: perspective(1000px) rotateX(15deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n}\n@-webkit-keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n            transform: perspective(1000px) rotateY(-17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n}\n@keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n            transform: perspective(1000px) rotateY(-17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n/* Out */\n@-webkit-keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n            transform: perspective(1000px) rotateX(17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n@keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n            transform: perspective(1000px) rotateX(17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n            transform: perspective(1000px) rotateY(-10deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n@keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n            transform: perspective(1000px) rotateY(-10deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n\n/*******************************\n       Static Animations\n*******************************/\n\n\n/*--------------\n    Emphasis\n---------------*/\n\n.flash.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: flash;\n          animation-name: flash;\n}\n.shake.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: shake;\n          animation-name: shake;\n}\n.bounce.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: bounce;\n          animation-name: bounce;\n}\n.tada.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: tada;\n          animation-name: tada;\n}\n.pulse.transition {\n  -webkit-animation-duration: 500ms;\n          animation-duration: 500ms;\n  -webkit-animation-name: pulse;\n          animation-name: pulse;\n}\n.jiggle.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: jiggle;\n          animation-name: jiggle;\n}\n\n/* Flash */\n@-webkit-keyframes flash {\n  0%,\n  50%,\n  100% {\n    opacity: 1;\n  }\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n@keyframes flash {\n  0%,\n  50%,\n  100% {\n    opacity: 1;\n  }\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n\n/* Shake */\n@-webkit-keyframes shake {\n  0%,\n  100% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translateX(-10px);\n            transform: translateX(-10px);\n  }\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translateX(10px);\n            transform: translateX(10px);\n  }\n}\n@keyframes shake {\n  0%,\n  100% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translateX(-10px);\n            transform: translateX(-10px);\n  }\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translateX(10px);\n            transform: translateX(10px);\n  }\n}\n\n/* Bounce */\n@-webkit-keyframes bounce {\n  0%,\n  20%,\n  50%,\n  80%,\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n  }\n  40% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px);\n  }\n  60% {\n    -webkit-transform: translateY(-15px);\n            transform: translateY(-15px);\n  }\n}\n@keyframes bounce {\n  0%,\n  20%,\n  50%,\n  80%,\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n  }\n  40% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px);\n  }\n  60% {\n    -webkit-transform: translateY(-15px);\n            transform: translateY(-15px);\n  }\n}\n\n/* Tada */\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  10%,\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n            transform: scale(0.9) rotate(-3deg);\n  }\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n            transform: scale(1.1) rotate(3deg);\n  }\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n            transform: scale(1.1) rotate(-3deg);\n  }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n            transform: scale(1) rotate(0);\n  }\n}\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  10%,\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n            transform: scale(0.9) rotate(-3deg);\n  }\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n            transform: scale(1.1) rotate(3deg);\n  }\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n            transform: scale(1.1) rotate(-3deg);\n  }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n            transform: scale(1) rotate(0);\n  }\n}\n\n/* Pulse */\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n    opacity: 0.7;\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n}\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n    opacity: 0.7;\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n}\n\n/* Rubberband */\n@-webkit-keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n            transform: scale3d(1.25, 0.75, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n            transform: scale3d(0.75, 1.25, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n            transform: scale3d(1.15, 0.85, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n            transform: scale3d(0.95, 1.05, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n            transform: scale3d(1.05, 0.95, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n            transform: scale3d(1.25, 0.75, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n            transform: scale3d(0.75, 1.25, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n            transform: scale3d(1.15, 0.85, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n            transform: scale3d(0.95, 1.05, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n            transform: scale3d(1.05, 0.95, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "css/semantic-ui/components/transition.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function() {\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if($module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists,\n              displayType\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              displayType = $clone\n                .attr('class', elementClass)\n                .removeAttr('style')\n                .removeClass(className.hidden)\n                .removeClass(className.visible)\n                .show()\n                .css('display')\n              ;\n              module.verbose('Determining final display state', displayType);\n              module.save.displayType(displayType);\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // hide all output from this component regardless of other settings\n  silent        : false,\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/components/visibility.js",
    "content": "/*!\n * # Semantic UI 2.2.4 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n\n    moduleCount    = $allModules.length,\n    loadedCount    = 0\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        contextObserver,\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          if(contextObserver) {\n            contextObserver.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scroll'       + eventNamespace, module.event.scroll)\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n            module.remove.placeholder();\n          }\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            contextObserver = new MutationObserver(module.event.contextChanged);\n            observer        = new MutationObserver(module.event.changed);\n            contextObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            module.verbose('DOM tree modified, updating visibility calculations');\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu');\n              module.refresh();\n            }, 100);\n          },\n          contextChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src, function() {\n                    loadedCount++;\n                    if(loadedCount == moduleCount) {\n                      settings.onAllLoaded.call(this);\n                    }\n                    settings.onLoad.call(this);\n                  });\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : settings.zIndex\n              })\n            ;\n            settings.onFixed.call(element);\n          },\n          image: function(src, callback) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined ) {\n                $module.transition(settings.transition, settings.duration, callback);\n              }\n              else {\n                $module.fadeIn(settings.duration, callback);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        resetFixed: function () {\n          module.remove.fixed();\n          module.remove.occurred();\n        },\n\n        reset: function() {\n          module.verbose('Resetting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n            settings.onUnfixed.call(element);\n          },\n          placeholder: function() {\n            module.debug('Removing placeholder content');\n            if($placeholder) {\n              $placeholder.remove();\n            }\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topVisible       = (screen.bottom >= element.top);\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomVisible    = (screen.bottom >= element.bottom);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // z-index to use with visibility 'fixed'\n  zIndex                 : '10',\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // special callbacks for image\n  onLoad                 : function() {},\n  onAllLoaded            : function() {},\n\n  // special callbacks for fixed position\n  onFixed                : function() {},\n  onUnfixed              : function() {},\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/semantic-ui/semantic.css",
    "content": " /*\n * # Semantic UI - 2.2.4\n * https://github.com/Semantic-Org/Semantic-UI\n * http://www.semantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic&subset=latin');\n/*!\n * # Semantic UI 2.2.4 - Reset\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Reset\n*******************************/\n\n/* Border-Box */\n\n*,\n*:before,\n*:after {\n  box-sizing: inherit;\n}\n\nhtml {\n  box-sizing: border-box;\n}\n\n/* iPad Input Shadows */\n\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  /* mobile firefox too! */\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif;\n  /* 1 */\n  -ms-text-size-adjust: 100%;\n  /* 2 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  /* 1 */\n  vertical-align: baseline;\n  /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n  margin: 0;\n  /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  /* 2 */\n  cursor: pointer;\n  /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  /* 1 */\n  padding: 0;\n  /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  /* 1 */\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0;\n  /* 1 */\n  padding: 0;\n  /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Page\n*******************************/\n\nhtml,\nbody {\n  height: 100%;\n}\n\nhtml {\n  font-size: 14px;\n}\n\nbody {\n  margin: 0px;\n  padding: 0px;\n  overflow-x: hidden;\n  min-width: 320px;\n  background: #FFFFFF;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  font-smoothing: antialiased;\n}\n\n/*******************************\n             Headers\n*******************************/\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  line-height: 1.2857em;\n  margin: calc(2rem -  0.14285em ) 0em 1rem;\n  font-weight: bold;\n  padding: 0em;\n}\n\nh1 {\n  min-height: 1rem;\n  font-size: 2rem;\n}\n\nh2 {\n  font-size: 1.714rem;\n}\n\nh3 {\n  font-size: 1.28rem;\n}\n\nh4 {\n  font-size: 1.071rem;\n}\n\nh5 {\n  font-size: 1rem;\n}\n\nh1:first-child,\nh2:first-child,\nh3:first-child,\nh4:first-child,\nh5:first-child {\n  margin-top: 0em;\n}\n\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Text\n*******************************/\n\np {\n  margin: 0em 0em 1em;\n  line-height: 1.4285em;\n}\n\np:first-child {\n  margin-top: 0em;\n}\n\np:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Links\n--------------------*/\n\na {\n  color: #4183C4;\n  text-decoration: none;\n}\n\na:hover {\n  color: #1e70bf;\n  text-decoration: none;\n}\n\n/*******************************\n          Highlighting\n*******************************/\n\n/* Site */\n\n::-webkit-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n::-moz-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n::selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Form */\n\ntextarea::-webkit-selection,\ninput::-webkit-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\ntextarea::-moz-selection,\ninput::-moz-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\ntextarea::selection,\ninput::selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*******************************\n        Global Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Button\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Button\n*******************************/\n\n.ui.button {\n  cursor: pointer;\n  display: inline-block;\n  min-height: 1em;\n  outline: none;\n  border: none;\n  vertical-align: baseline;\n  background: #E0E1E2 none;\n  color: rgba(0, 0, 0, 0.6);\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em 0.25em 0em 0em;\n  padding: 0.78571429em 1.5em 0.78571429em;\n  text-transform: none;\n  text-shadow: none;\n  font-weight: bold;\n  line-height: 1em;\n  font-style: normal;\n  text-align: center;\n  text-decoration: none;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  will-change: '';\n  -webkit-tap-highlight-color: transparent;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.button:hover {\n  background-color: #CACBCD;\n  background-image: none;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.button:hover .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Focus\n---------------*/\n\n.ui.button:focus {\n  background-color: #CACBCD;\n  color: rgba(0, 0, 0, 0.8);\n  background-image: '' !important;\n  box-shadow: '' !important;\n}\n\n.ui.button:focus .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.button:active,\n.ui.active.button:active {\n  background-color: #BABBBC;\n  background-image: '';\n  color: rgba(0, 0, 0, 0.9);\n  box-shadow: 0px 0px 0px 1px transparent inset, none;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.button {\n  background-color: #C0C1C2;\n  background-image: none;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.button:hover {\n  background-color: #C0C1C2;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.button:active {\n  background-color: #C0C1C2;\n  background-image: none;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n/* Specificity hack */\n\n.ui.loading.loading.loading.loading.loading.loading.button {\n  position: relative;\n  cursor: default;\n  text-shadow: none !important;\n  color: transparent !important;\n  opacity: 1;\n  pointer-events: auto;\n  -webkit-transition: all 0s linear, opacity 0.1s ease;\n  transition: all 0s linear, opacity 0.1s ease;\n}\n\n.ui.loading.button:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.15);\n}\n\n.ui.loading.button:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #FFFFFF transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n.ui.labeled.icon.loading.button .icon {\n  background-color: transparent;\n  box-shadow: none;\n}\n\n@-webkit-keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.ui.basic.loading.button:not(.inverted):before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.ui.basic.loading.button:not(.inverted):after {\n  border-top-color: #767676;\n}\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.buttons .disabled.button,\n.ui.disabled.button,\n.ui.button:disabled,\n.ui.disabled.button:hover,\n.ui.disabled.active.button {\n  cursor: default;\n  opacity: 0.45 !important;\n  background-image: none !important;\n  box-shadow: none !important;\n  pointer-events: none !important;\n}\n\n/* Basic Group With Disabled */\n\n.ui.basic.buttons .ui.disabled.button {\n  border-color: rgba(34, 36, 38, 0.5);\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.button {\n  position: relative;\n  overflow: hidden;\n  padding-right: 0em !important;\n  vertical-align: middle;\n  z-index: 1;\n}\n\n.ui.animated.button .content {\n  will-change: transform, opacity;\n}\n\n.ui.animated.button .visible.content {\n  position: relative;\n  margin-right: 1.5em;\n}\n\n.ui.animated.button .hidden.content {\n  position: absolute;\n  width: 100%;\n}\n\n/* Horizontal */\n\n.ui.animated.button .visible.content,\n.ui.animated.button .hidden.content {\n  -webkit-transition: right 0.3s ease 0s;\n  transition: right 0.3s ease 0s;\n}\n\n.ui.animated.button .visible.content {\n  left: auto;\n  right: 0%;\n}\n\n.ui.animated.button .hidden.content {\n  top: 50%;\n  left: auto;\n  right: -100%;\n  margin-top: -0.5em;\n}\n\n.ui.animated.button:focus .visible.content,\n.ui.animated.button:hover .visible.content {\n  left: auto;\n  right: 200%;\n}\n\n.ui.animated.button:focus .hidden.content,\n.ui.animated.button:hover .hidden.content {\n  left: auto;\n  right: 0%;\n}\n\n/* Vertical */\n\n.ui.vertical.animated.button .visible.content,\n.ui.vertical.animated.button .hidden.content {\n  -webkit-transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n\n.ui.vertical.animated.button .visible.content {\n  -webkit-transform: translateY(0%);\n  transform: translateY(0%);\n  right: auto;\n}\n\n.ui.vertical.animated.button .hidden.content {\n  top: -50%;\n  left: 0%;\n  right: auto;\n}\n\n.ui.vertical.animated.button:focus .visible.content,\n.ui.vertical.animated.button:hover .visible.content {\n  -webkit-transform: translateY(200%);\n  transform: translateY(200%);\n  right: auto;\n}\n\n.ui.vertical.animated.button:focus .hidden.content,\n.ui.vertical.animated.button:hover .hidden.content {\n  top: 50%;\n  right: auto;\n}\n\n/* Fade */\n\n.ui.fade.animated.button .visible.content,\n.ui.fade.animated.button .hidden.content {\n  -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n\n.ui.fade.animated.button .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n  transform: scale(1);\n}\n\n.ui.fade.animated.button .hidden.content {\n  opacity: 0;\n  left: 0%;\n  right: auto;\n  -webkit-transform: scale(1.5);\n  transform: scale(1.5);\n}\n\n.ui.fade.animated.button:focus .visible.content,\n.ui.fade.animated.button:hover .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 0;\n  -webkit-transform: scale(0.75);\n  transform: scale(0.75);\n}\n\n.ui.fade.animated.button:focus .hidden.content,\n.ui.fade.animated.button:hover .hidden.content {\n  left: 0%;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n  transform: scale(1);\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.button {\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  background: transparent none;\n  color: #FFFFFF;\n  text-shadow: none !important;\n}\n\n/* Group */\n\n.ui.inverted.buttons .button {\n  margin: 0px 0px 0px -2px;\n}\n\n.ui.inverted.buttons .button:first-child {\n  margin-left: 0em;\n}\n\n.ui.inverted.vertical.buttons .button {\n  margin: 0px 0px -2px 0px;\n}\n\n.ui.inverted.vertical.buttons .button:first-child {\n  margin-top: 0em;\n}\n\n/* States */\n\n/* Hover */\n\n.ui.inverted.button:hover {\n  background: #FFFFFF;\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active / Focus */\n\n.ui.inverted.button:focus,\n.ui.inverted.button.active {\n  background: #FFFFFF;\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active Focus */\n\n.ui.inverted.button.active:focus {\n  background: #DCDDDE;\n  box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n    Labeled Button\n--------------------*/\n\n.ui.labeled.button:not(.icon) {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  background: none !important;\n  padding: 0px !important;\n  border: none !important;\n  box-shadow: none !important;\n}\n\n.ui.labeled.button > .button {\n  margin: 0px;\n}\n\n.ui.labeled.button > .label {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  margin: 0px 0px 0px -1px !important;\n  padding: '';\n  font-size: 1em;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Tag */\n\n.ui.labeled.button > .tag.label:before {\n  width: 1.85em;\n  height: 1.85em;\n}\n\n/* Right */\n\n.ui.labeled.button:not([class*=\"left labeled\"]) > .button {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n.ui.labeled.button:not([class*=\"left labeled\"]) > .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/* Left Side */\n\n.ui[class*=\"left labeled\"].button > .button {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n.ui[class*=\"left labeled\"].button > .label {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n/*-------------------\n       Social\n--------------------*/\n\n/* Facebook */\n\n.ui.facebook.button {\n  background-color: #3B5998;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.facebook.button:hover {\n  background-color: #304d8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.facebook.button:active {\n  background-color: #2d4373;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Twitter */\n\n.ui.twitter.button {\n  background-color: #55ACEE;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.twitter.button:hover {\n  background-color: #35a2f4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.twitter.button:active {\n  background-color: #2795e9;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Google Plus */\n\n.ui.google.plus.button {\n  background-color: #DD4B39;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.google.plus.button:hover {\n  background-color: #e0321c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.google.plus.button:active {\n  background-color: #c23321;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Linked In */\n\n.ui.linkedin.button {\n  background-color: #1F88BE;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.linkedin.button:hover {\n  background-color: #147baf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.linkedin.button:active {\n  background-color: #186992;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* YouTube */\n\n.ui.youtube.button {\n  background-color: #CC181E;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.youtube.button:hover {\n  background-color: #bd0d13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.youtube.button:active {\n  background-color: #9e1317;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Instagram */\n\n.ui.instagram.button {\n  background-color: #49769C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.instagram.button:hover {\n  background-color: #3d698e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.instagram.button:active {\n  background-color: #395c79;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Pinterest */\n\n.ui.pinterest.button {\n  background-color: #BD081C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.pinterest.button:hover {\n  background-color: #ac0013;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pinterest.button:active {\n  background-color: #8c0615;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* VK */\n\n.ui.vk.button {\n  background-color: #4D7198;\n  color: #FFFFFF;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.vk.button:hover {\n  background-color: #41648a;\n  color: #FFFFFF;\n}\n\n.ui.vk.button:active {\n  background-color: #3c5876;\n  color: #FFFFFF;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.button > .icon:not(.button) {\n  height: 0.85714286em;\n  opacity: 0.8;\n  margin: 0em 0.42857143em 0em -0.21428571em;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  vertical-align: '';\n  color: '';\n}\n\n.ui.button:not(.icon) > .icon:not(.button):not(.dropdown) {\n  margin: 0em 0.42857143em 0em -0.21428571em;\n}\n\n.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {\n  margin: 0em -0.21428571em 0em 0.42857143em;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui[class*=\"left floated\"].buttons,\n.ui[class*=\"left floated\"].button {\n  float: left;\n  margin-left: 0em;\n  margin-right: 0.25em;\n}\n\n.ui[class*=\"right floated\"].buttons,\n.ui[class*=\"right floated\"].button {\n  float: right;\n  margin-right: 0em;\n  margin-left: 0.25em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.buttons .button,\n.ui.compact.button {\n  padding: 0.58928571em 1.125em 0.58928571em;\n}\n\n.ui.compact.icon.buttons .button,\n.ui.compact.icon.button {\n  padding: 0.58928571em 0.58928571em 0.58928571em;\n}\n\n.ui.compact.labeled.icon.buttons .button,\n.ui.compact.labeled.icon.button {\n  padding: 0.58928571em 3.69642857em 0.58928571em;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.buttons .button,\n.ui.mini.buttons .or,\n.ui.mini.button {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.buttons .button,\n.ui.tiny.buttons .or,\n.ui.tiny.button {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.buttons .button,\n.ui.small.buttons .or,\n.ui.small.button {\n  font-size: 0.92857143rem;\n}\n\n.ui.buttons .button,\n.ui.buttons .or,\n.ui.button {\n  font-size: 1rem;\n}\n\n.ui.large.buttons .button,\n.ui.large.buttons .or,\n.ui.large.button {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.buttons .button,\n.ui.big.buttons .or,\n.ui.big.button {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.buttons .button,\n.ui.huge.buttons .or,\n.ui.huge.button {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.buttons .button,\n.ui.massive.buttons .or,\n.ui.massive.button {\n  font-size: 1.71428571rem;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.buttons .button,\n.ui.icon.button {\n  padding: 0.78571429em 0.78571429em 0.78571429em;\n}\n\n.ui.icon.buttons .button > .icon,\n.ui.icon.button > .icon {\n  opacity: 0.9;\n  margin: 0em;\n  vertical-align: top;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.buttons .button,\n.ui.basic.button {\n  background: transparent none !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n  font-weight: normal;\n  border-radius: 0.28571429rem;\n  text-transform: none;\n  text-shadow: none !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons {\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n\n.ui.basic.buttons .button {\n  border-radius: 0em;\n}\n\n.ui.basic.buttons .button:hover,\n.ui.basic.button:hover {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .button:focus,\n.ui.basic.button:focus {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .button:active,\n.ui.basic.button:active {\n  background: #F8F8F8 !important;\n  color: rgba(0, 0, 0, 0.9) !important;\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .active.button,\n.ui.basic.active.button {\n  background: rgba(0, 0, 0, 0.05) !important;\n  box-shadow: '' !important;\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: rgba(34, 36, 38, 0.35);\n}\n\n.ui.basic.buttons .active.button:hover,\n.ui.basic.active.button:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n/* Vertical */\n\n.ui.basic.buttons .button:hover {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n\n.ui.basic.buttons .button:active {\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n\n.ui.basic.buttons .active.button {\n  box-shadow: rgba(34, 36, 38, 0.35) inset;\n}\n\n/* Standard Basic Inverted */\n\n.ui.basic.inverted.buttons .button,\n.ui.basic.inverted.button {\n  background-color: transparent !important;\n  color: #F9FAFB !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n}\n\n.ui.basic.inverted.buttons .button:hover,\n.ui.basic.inverted.button:hover {\n  color: #FFFFFF !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n.ui.basic.inverted.buttons .button:focus,\n.ui.basic.inverted.button:focus {\n  color: #FFFFFF !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n.ui.basic.inverted.buttons .button:active,\n.ui.basic.inverted.button:active {\n  background-color: rgba(255, 255, 255, 0.08) !important;\n  color: #FFFFFF !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n}\n\n.ui.basic.inverted.buttons .active.button,\n.ui.basic.inverted.active.button {\n  background-color: rgba(255, 255, 255, 0.08);\n  color: #FFFFFF;\n  text-shadow: none;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n}\n\n.ui.basic.inverted.buttons .active.button:hover,\n.ui.basic.inverted.active.button:hover {\n  background-color: rgba(255, 255, 255, 0.15);\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n/* Basic Group */\n\n.ui.basic.buttons .button {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n\n.ui.basic.vertical.buttons .button {\n  border-left: none;\n}\n\n.ui.basic.vertical.buttons .button {\n  border-left-width: 0px;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.basic.vertical.buttons .button:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Labeled Icon\n---------------*/\n\n.ui.labeled.icon.buttons .button,\n.ui.labeled.icon.button {\n  position: relative;\n  padding-left: 4.07142857em !important;\n  padding-right: 1.5em !important;\n}\n\n/* Left Labeled */\n\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  position: absolute;\n  height: 100%;\n  line-height: 1;\n  border-radius: 0px;\n  border-top-left-radius: inherit;\n  border-bottom-left-radius: inherit;\n  text-align: center;\n  margin: 0em;\n  width: 2.57142857em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: '';\n  box-shadow: -1px 0px 0px 0px transparent inset;\n}\n\n/* Left Labeled */\n\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  top: 0em;\n  left: 0em;\n}\n\n/* Right Labeled */\n\n.ui[class*=\"right labeled\"].icon.button {\n  padding-right: 4.07142857em !important;\n  padding-left: 1.5em !important;\n}\n\n.ui[class*=\"right labeled\"].icon.button > .icon {\n  left: auto;\n  right: 0em;\n  border-radius: 0px;\n  border-top-right-radius: inherit;\n  border-bottom-right-radius: inherit;\n  box-shadow: 1px 0px 0px 0px transparent inset;\n}\n\n.ui.labeled.icon.buttons > .button > .icon:before,\n.ui.labeled.icon.button > .icon:before,\n.ui.labeled.icon.buttons > .button > .icon:after,\n.ui.labeled.icon.button > .icon:after {\n  display: block;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  text-align: center;\n  -webkit-transform: translateY(-50%);\n  transform: translateY(-50%);\n}\n\n.ui.labeled.icon.buttons .button > .icon {\n  border-radius: 0em;\n}\n\n.ui.labeled.icon.buttons .button:first-child > .icon {\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n.ui.labeled.icon.buttons .button:last-child > .icon {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\n  border-radius: 0em;\n  border-top-left-radius: 0.28571429rem;\n}\n\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\n  border-radius: 0em;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n/* Fluid Labeled */\n\n.ui.fluid[class*=\"left labeled\"].icon.button,\n.ui.fluid[class*=\"right labeled\"].icon.button {\n  padding-left: 1.5em !important;\n  padding-right: 1.5em !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n/* Toggle (Modifies active state to give affordances) */\n\n.ui.toggle.buttons .active.button,\n.ui.buttons .button.toggle.active,\n.ui.button.toggle.active {\n  background-color: #21BA45 !important;\n  box-shadow: none !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n\n.ui.button.toggle.active:hover {\n  background-color: #16ab39 !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.button {\n  border-radius: 10em;\n}\n\n.ui.circular.button > .icon {\n  width: 1em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n      Or Buttons\n--------------------*/\n\n.ui.buttons .or {\n  position: relative;\n  width: 0.3em;\n  height: 2.57142857em;\n  z-index: 3;\n}\n\n.ui.buttons .or:before {\n  position: absolute;\n  text-align: center;\n  border-radius: 500rem;\n  content: 'or';\n  top: 50%;\n  left: 50%;\n  background-color: #FFFFFF;\n  text-shadow: none;\n  margin-top: -0.89285714em;\n  margin-left: -0.89285714em;\n  width: 1.78571429em;\n  height: 1.78571429em;\n  line-height: 1.78571429em;\n  color: rgba(0, 0, 0, 0.4);\n  font-style: normal;\n  font-weight: bold;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n}\n\n.ui.buttons .or[data-text]:before {\n  content: attr(data-text);\n}\n\n/* Fluid Or */\n\n.ui.fluid.buttons .or {\n  width: 0em !important;\n}\n\n.ui.fluid.buttons .or:after {\n  display: none;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n/* Singular */\n\n.ui.attached.button {\n  position: relative;\n  display: block;\n  margin: 0em;\n  border-radius: 0em;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n}\n\n/* Top / Bottom */\n\n.ui.attached.top.button {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.attached.bottom.button {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Left / Right */\n\n.ui.left.attached.button {\n  display: inline-block;\n  border-left: none;\n  text-align: right;\n  padding-right: 0.75em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui.right.attached.button {\n  display: inline-block;\n  text-align: left;\n  padding-left: 0.75em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/* Plural */\n\n.ui.attached.buttons {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  border-radius: 0em;\n  width: auto !important;\n  z-index: 2;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n\n.ui.attached.buttons .button {\n  margin: 0em;\n}\n\n.ui.attached.buttons .button:first-child {\n  border-radius: 0em;\n}\n\n.ui.attached.buttons .button:last-child {\n  border-radius: 0em;\n}\n\n/* Top / Bottom */\n\n.ui[class*=\"top attached\"].buttons {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"top attached\"].buttons .button:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui[class*=\"top attached\"].buttons .button:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"bottom attached\"].buttons {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].buttons .button:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].buttons .button:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Left / Right */\n\n.ui[class*=\"left attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 0em;\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui[class*=\"left attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"left attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui[class*=\"right attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-left: 0em;\n  margin-right: -1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"right attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui[class*=\"right attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.buttons,\n.ui.fluid.button {\n  width: 100%;\n}\n\n.ui.fluid.button {\n  display: block;\n}\n\n.ui.two.buttons {\n  width: 100%;\n}\n\n.ui.two.buttons > .button {\n  width: 50%;\n}\n\n.ui.three.buttons {\n  width: 100%;\n}\n\n.ui.three.buttons > .button {\n  width: 33.333%;\n}\n\n.ui.four.buttons {\n  width: 100%;\n}\n\n.ui.four.buttons > .button {\n  width: 25%;\n}\n\n.ui.five.buttons {\n  width: 100%;\n}\n\n.ui.five.buttons > .button {\n  width: 20%;\n}\n\n.ui.six.buttons {\n  width: 100%;\n}\n\n.ui.six.buttons > .button {\n  width: 16.666%;\n}\n\n.ui.seven.buttons {\n  width: 100%;\n}\n\n.ui.seven.buttons > .button {\n  width: 14.285%;\n}\n\n.ui.eight.buttons {\n  width: 100%;\n}\n\n.ui.eight.buttons > .button {\n  width: 12.500%;\n}\n\n.ui.nine.buttons {\n  width: 100%;\n}\n\n.ui.nine.buttons > .button {\n  width: 11.11%;\n}\n\n.ui.ten.buttons {\n  width: 100%;\n}\n\n.ui.ten.buttons > .button {\n  width: 10%;\n}\n\n.ui.eleven.buttons {\n  width: 100%;\n}\n\n.ui.eleven.buttons > .button {\n  width: 9.09%;\n}\n\n.ui.twelve.buttons {\n  width: 100%;\n}\n\n.ui.twelve.buttons > .button {\n  width: 8.3333%;\n}\n\n/* Fluid Vertical Buttons */\n\n.ui.fluid.vertical.buttons,\n.ui.fluid.vertical.buttons > .button {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: auto;\n}\n\n.ui.two.vertical.buttons > .button {\n  height: 50%;\n}\n\n.ui.three.vertical.buttons > .button {\n  height: 33.333%;\n}\n\n.ui.four.vertical.buttons > .button {\n  height: 25%;\n}\n\n.ui.five.vertical.buttons > .button {\n  height: 20%;\n}\n\n.ui.six.vertical.buttons > .button {\n  height: 16.666%;\n}\n\n.ui.seven.vertical.buttons > .button {\n  height: 14.285%;\n}\n\n.ui.eight.vertical.buttons > .button {\n  height: 12.500%;\n}\n\n.ui.nine.vertical.buttons > .button {\n  height: 11.11%;\n}\n\n.ui.ten.vertical.buttons > .button {\n  height: 10%;\n}\n\n.ui.eleven.vertical.buttons > .button {\n  height: 9.09%;\n}\n\n.ui.twelve.vertical.buttons > .button {\n  height: 8.3333%;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Black ---*/\n\n.ui.black.buttons .button,\n.ui.black.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.black.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.black.buttons .button:hover,\n.ui.black.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.black.buttons .button:focus,\n.ui.black.button:focus {\n  background-color: #2f3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.black.buttons .button:active,\n.ui.black.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.black.buttons .active.button,\n.ui.black.buttons .active.button:active,\n.ui.black.active.button,\n.ui.black.button .active.button:active {\n  background-color: #0f0f10;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.black.buttons .button,\n.ui.basic.black.button {\n  box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n\n.ui.basic.black.buttons .button:hover,\n.ui.basic.black.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.black.buttons .button:focus,\n.ui.basic.black.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.black.buttons .active.button,\n.ui.basic.black.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n  color: #343637 !important;\n}\n\n.ui.basic.black.buttons .button:active,\n.ui.basic.black.button:active {\n  box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.black.buttons .button,\n.ui.inverted.black.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover,\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus,\n.ui.inverted.black.buttons .button.active,\n.ui.inverted.black.button.active,\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .active.button,\n.ui.inverted.black.active.button {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  background-color: #000000;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.black.basic.buttons .button,\n.ui.inverted.black.buttons .basic.button,\n.ui.inverted.black.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.black.basic.buttons .button:hover,\n.ui.inverted.black.buttons .basic.button:hover,\n.ui.inverted.black.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #545454 !important;\n}\n\n.ui.inverted.black.basic.buttons .active.button,\n.ui.inverted.black.buttons .basic.active.button,\n.ui.inverted.black.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.black.basic.buttons .button:active,\n.ui.inverted.black.buttons .basic.button:active,\n.ui.inverted.black.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.buttons .button,\n.ui.grey.button {\n  background-color: #767676;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.grey.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.grey.buttons .button:hover,\n.ui.grey.button:hover {\n  background-color: #838383;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .button:focus,\n.ui.grey.button:focus {\n  background-color: #8a8a8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .button:active,\n.ui.grey.button:active {\n  background-color: #909090;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .active.button,\n.ui.grey.buttons .active.button:active,\n.ui.grey.active.button,\n.ui.grey.button .active.button:active {\n  background-color: #696969;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.grey.buttons .button,\n.ui.basic.grey.button {\n  box-shadow: 0px 0px 0px 1px #767676 inset !important;\n  color: #767676 !important;\n}\n\n.ui.basic.grey.buttons .button:hover,\n.ui.basic.grey.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #838383 inset !important;\n  color: #838383 !important;\n}\n\n.ui.basic.grey.buttons .button:focus,\n.ui.basic.grey.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n  color: #838383 !important;\n}\n\n.ui.basic.grey.buttons .active.button,\n.ui.basic.grey.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #696969 inset !important;\n  color: #909090 !important;\n}\n\n.ui.basic.grey.buttons .button:active,\n.ui.basic.grey.button:active {\n  box-shadow: 0px 0px 0px 1px #909090 inset !important;\n  color: #909090 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.grey.buttons .button,\n.ui.inverted.grey.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover,\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus,\n.ui.inverted.grey.buttons .button.active,\n.ui.inverted.grey.button.active,\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover {\n  background-color: #cfd0d2;\n}\n\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus {\n  background-color: #c7c9cb;\n}\n\n.ui.inverted.grey.buttons .active.button,\n.ui.inverted.grey.active.button {\n  background-color: #cfd0d2;\n}\n\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  background-color: #c2c4c5;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.grey.basic.buttons .button,\n.ui.inverted.grey.buttons .basic.button,\n.ui.inverted.grey.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:hover,\n.ui.inverted.grey.buttons .basic.button:hover,\n.ui.inverted.grey.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n  color: #DCDDDE !important;\n}\n\n.ui.inverted.grey.basic.buttons .active.button,\n.ui.inverted.grey.buttons .basic.active.button,\n.ui.inverted.grey.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:active,\n.ui.inverted.grey.buttons .basic.button:active,\n.ui.inverted.grey.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.buttons .button,\n.ui.brown.button {\n  background-color: #A5673F;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.brown.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.brown.buttons .button:hover,\n.ui.brown.button:hover {\n  background-color: #975b33;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .button:focus,\n.ui.brown.button:focus {\n  background-color: #90532b;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .button:active,\n.ui.brown.button:active {\n  background-color: #805031;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .active.button,\n.ui.brown.buttons .active.button:active,\n.ui.brown.active.button,\n.ui.brown.button .active.button:active {\n  background-color: #995a31;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.brown.buttons .button,\n.ui.basic.brown.button {\n  box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n  color: #A5673F !important;\n}\n\n.ui.basic.brown.buttons .button:hover,\n.ui.basic.brown.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n  color: #975b33 !important;\n}\n\n.ui.basic.brown.buttons .button:focus,\n.ui.basic.brown.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #90532b inset !important;\n  color: #975b33 !important;\n}\n\n.ui.basic.brown.buttons .active.button,\n.ui.basic.brown.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n  color: #805031 !important;\n}\n\n.ui.basic.brown.buttons .button:active,\n.ui.basic.brown.button:active {\n  box-shadow: 0px 0px 0px 1px #805031 inset !important;\n  color: #805031 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.brown.buttons .button,\n.ui.inverted.brown.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n  color: #D67C1C;\n}\n\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover,\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus,\n.ui.inverted.brown.buttons .button.active,\n.ui.inverted.brown.button.active,\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover {\n  background-color: #c86f11;\n}\n\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus {\n  background-color: #c16808;\n}\n\n.ui.inverted.brown.buttons .active.button,\n.ui.inverted.brown.active.button {\n  background-color: #cc6f0d;\n}\n\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  background-color: #a96216;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.brown.basic.buttons .button,\n.ui.inverted.brown.buttons .basic.button,\n.ui.inverted.brown.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:hover,\n.ui.inverted.brown.buttons .basic.button:hover,\n.ui.inverted.brown.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n  color: #D67C1C !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n  color: #D67C1C !important;\n}\n\n.ui.inverted.brown.basic.buttons .active.button,\n.ui.inverted.brown.buttons .basic.active.button,\n.ui.inverted.brown.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n  color: #D67C1C !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:active,\n.ui.inverted.brown.buttons .basic.button:active,\n.ui.inverted.brown.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n  color: #D67C1C !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.buttons .button,\n.ui.blue.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.blue.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.blue.buttons .button:hover,\n.ui.blue.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .button:focus,\n.ui.blue.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .button:active,\n.ui.blue.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .active.button,\n.ui.blue.buttons .active.button:active,\n.ui.blue.active.button,\n.ui.blue.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.blue.buttons .button,\n.ui.basic.blue.button {\n  box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n\n.ui.basic.blue.buttons .button:hover,\n.ui.basic.blue.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.blue.buttons .button:focus,\n.ui.basic.blue.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.blue.buttons .active.button,\n.ui.basic.blue.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.basic.blue.buttons .button:active,\n.ui.basic.blue.button:active {\n  box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.blue.buttons .button,\n.ui.inverted.blue.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n  color: #54C8FF;\n}\n\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover,\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus,\n.ui.inverted.blue.buttons .button.active,\n.ui.inverted.blue.button.active,\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover {\n  background-color: #3ac0ff;\n}\n\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus {\n  background-color: #2bbbff;\n}\n\n.ui.inverted.blue.buttons .active.button,\n.ui.inverted.blue.active.button {\n  background-color: #3ac0ff;\n}\n\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  background-color: #21b8ff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.blue.basic.buttons .button,\n.ui.inverted.blue.buttons .basic.button,\n.ui.inverted.blue.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:hover,\n.ui.inverted.blue.buttons .basic.button:hover,\n.ui.inverted.blue.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n  color: #54C8FF !important;\n}\n\n.ui.inverted.blue.basic.buttons .active.button,\n.ui.inverted.blue.buttons .basic.active.button,\n.ui.inverted.blue.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:active,\n.ui.inverted.blue.buttons .basic.button:active,\n.ui.inverted.blue.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n  color: #54C8FF !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.buttons .button,\n.ui.green.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.green.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.green.buttons .button:hover,\n.ui.green.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.green.buttons .button:focus,\n.ui.green.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.green.buttons .button:active,\n.ui.green.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.green.buttons .active.button,\n.ui.green.buttons .active.button:active,\n.ui.green.active.button,\n.ui.green.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.green.buttons .button,\n.ui.basic.green.button {\n  box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n\n.ui.basic.green.buttons .button:hover,\n.ui.basic.green.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.green.buttons .button:focus,\n.ui.basic.green.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.green.buttons .active.button,\n.ui.basic.green.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.basic.green.buttons .button:active,\n.ui.basic.green.button:active {\n  box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.green.buttons .button,\n.ui.inverted.green.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n  color: #2ECC40;\n}\n\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover,\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus,\n.ui.inverted.green.buttons .button.active,\n.ui.inverted.green.button.active,\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover {\n  background-color: #22be34;\n}\n\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus {\n  background-color: #19b82b;\n}\n\n.ui.inverted.green.buttons .active.button,\n.ui.inverted.green.active.button {\n  background-color: #1fc231;\n}\n\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  background-color: #25a233;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.green.basic.buttons .button,\n.ui.inverted.green.buttons .basic.button,\n.ui.inverted.green.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.green.basic.buttons .button:hover,\n.ui.inverted.green.buttons .basic.button:hover,\n.ui.inverted.green.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n  color: #2ECC40 !important;\n}\n\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n  color: #2ECC40 !important;\n}\n\n.ui.inverted.green.basic.buttons .active.button,\n.ui.inverted.green.buttons .basic.active.button,\n.ui.inverted.green.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n  color: #2ECC40 !important;\n}\n\n.ui.inverted.green.basic.buttons .button:active,\n.ui.inverted.green.buttons .basic.button:active,\n.ui.inverted.green.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n  color: #2ECC40 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.buttons .button,\n.ui.orange.button {\n  background-color: #F2711C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.orange.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.orange.buttons .button:hover,\n.ui.orange.button:hover {\n  background-color: #f26202;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .button:focus,\n.ui.orange.button:focus {\n  background-color: #e55b00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .button:active,\n.ui.orange.button:active {\n  background-color: #cf590c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .active.button,\n.ui.orange.buttons .active.button:active,\n.ui.orange.active.button,\n.ui.orange.button .active.button:active {\n  background-color: #f56100;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.orange.buttons .button,\n.ui.basic.orange.button {\n  box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n  color: #F2711C !important;\n}\n\n.ui.basic.orange.buttons .button:hover,\n.ui.basic.orange.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n  color: #f26202 !important;\n}\n\n.ui.basic.orange.buttons .button:focus,\n.ui.basic.orange.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n  color: #f26202 !important;\n}\n\n.ui.basic.orange.buttons .active.button,\n.ui.basic.orange.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n  color: #cf590c !important;\n}\n\n.ui.basic.orange.buttons .button:active,\n.ui.basic.orange.button:active {\n  box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n  color: #cf590c !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.orange.buttons .button,\n.ui.inverted.orange.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n  color: #FF851B;\n}\n\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover,\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus,\n.ui.inverted.orange.buttons .button.active,\n.ui.inverted.orange.button.active,\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover {\n  background-color: #ff7701;\n}\n\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus {\n  background-color: #f17000;\n}\n\n.ui.inverted.orange.buttons .active.button,\n.ui.inverted.orange.active.button {\n  background-color: #ff7701;\n}\n\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  background-color: #e76b00;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.orange.basic.buttons .button,\n.ui.inverted.orange.buttons .basic.button,\n.ui.inverted.orange.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:hover,\n.ui.inverted.orange.buttons .basic.button:hover,\n.ui.inverted.orange.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n  color: #FF851B !important;\n}\n\n.ui.inverted.orange.basic.buttons .active.button,\n.ui.inverted.orange.buttons .basic.active.button,\n.ui.inverted.orange.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:active,\n.ui.inverted.orange.buttons .basic.button:active,\n.ui.inverted.orange.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n  color: #FF851B !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.buttons .button,\n.ui.pink.button {\n  background-color: #E03997;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.pink.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.pink.buttons .button:hover,\n.ui.pink.button:hover {\n  background-color: #e61a8d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .button:focus,\n.ui.pink.button:focus {\n  background-color: #e10f85;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .button:active,\n.ui.pink.button:active {\n  background-color: #c71f7e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .active.button,\n.ui.pink.buttons .active.button:active,\n.ui.pink.active.button,\n.ui.pink.button .active.button:active {\n  background-color: #ea158d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.pink.buttons .button,\n.ui.basic.pink.button {\n  box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n  color: #E03997 !important;\n}\n\n.ui.basic.pink.buttons .button:hover,\n.ui.basic.pink.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n  color: #e61a8d !important;\n}\n\n.ui.basic.pink.buttons .button:focus,\n.ui.basic.pink.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n  color: #e61a8d !important;\n}\n\n.ui.basic.pink.buttons .active.button,\n.ui.basic.pink.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n  color: #c71f7e !important;\n}\n\n.ui.basic.pink.buttons .button:active,\n.ui.basic.pink.button:active {\n  box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n  color: #c71f7e !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.pink.buttons .button,\n.ui.inverted.pink.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n  color: #FF8EDF;\n}\n\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover,\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus,\n.ui.inverted.pink.buttons .button.active,\n.ui.inverted.pink.button.active,\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover {\n  background-color: #ff74d8;\n}\n\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus {\n  background-color: #ff65d3;\n}\n\n.ui.inverted.pink.buttons .active.button,\n.ui.inverted.pink.active.button {\n  background-color: #ff74d8;\n}\n\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  background-color: #ff5bd1;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.pink.basic.buttons .button,\n.ui.inverted.pink.buttons .basic.button,\n.ui.inverted.pink.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:hover,\n.ui.inverted.pink.buttons .basic.button:hover,\n.ui.inverted.pink.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n  color: #FF8EDF !important;\n}\n\n.ui.inverted.pink.basic.buttons .active.button,\n.ui.inverted.pink.buttons .basic.active.button,\n.ui.inverted.pink.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:active,\n.ui.inverted.pink.buttons .basic.button:active,\n.ui.inverted.pink.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n  color: #FF8EDF !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.buttons .button,\n.ui.violet.button {\n  background-color: #6435C9;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.violet.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.violet.buttons .button:hover,\n.ui.violet.button:hover {\n  background-color: #5829bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .button:focus,\n.ui.violet.button:focus {\n  background-color: #4f20b5;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .button:active,\n.ui.violet.button:active {\n  background-color: #502aa1;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .active.button,\n.ui.violet.buttons .active.button:active,\n.ui.violet.active.button,\n.ui.violet.button .active.button:active {\n  background-color: #5626bf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.violet.buttons .button,\n.ui.basic.violet.button {\n  box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n  color: #6435C9 !important;\n}\n\n.ui.basic.violet.buttons .button:hover,\n.ui.basic.violet.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n  color: #5829bb !important;\n}\n\n.ui.basic.violet.buttons .button:focus,\n.ui.basic.violet.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n  color: #5829bb !important;\n}\n\n.ui.basic.violet.buttons .active.button,\n.ui.basic.violet.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n  color: #502aa1 !important;\n}\n\n.ui.basic.violet.buttons .button:active,\n.ui.basic.violet.button:active {\n  box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n  color: #502aa1 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.violet.buttons .button,\n.ui.inverted.violet.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n  color: #A291FB;\n}\n\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover,\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus,\n.ui.inverted.violet.buttons .button.active,\n.ui.inverted.violet.button.active,\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover {\n  background-color: #8a73ff;\n}\n\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus {\n  background-color: #7d64ff;\n}\n\n.ui.inverted.violet.buttons .active.button,\n.ui.inverted.violet.active.button {\n  background-color: #8a73ff;\n}\n\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  background-color: #7860f9;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.violet.basic.buttons .button,\n.ui.inverted.violet.buttons .basic.button,\n.ui.inverted.violet.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:hover,\n.ui.inverted.violet.buttons .basic.button:hover,\n.ui.inverted.violet.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n  color: #A291FB !important;\n}\n\n.ui.inverted.violet.basic.buttons .active.button,\n.ui.inverted.violet.buttons .basic.active.button,\n.ui.inverted.violet.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:active,\n.ui.inverted.violet.buttons .basic.button:active,\n.ui.inverted.violet.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n  color: #A291FB !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.buttons .button,\n.ui.purple.button {\n  background-color: #A333C8;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.purple.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.purple.buttons .button:hover,\n.ui.purple.button:hover {\n  background-color: #9627ba;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .button:focus,\n.ui.purple.button:focus {\n  background-color: #8f1eb4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .button:active,\n.ui.purple.button:active {\n  background-color: #82299f;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .active.button,\n.ui.purple.buttons .active.button:active,\n.ui.purple.active.button,\n.ui.purple.button .active.button:active {\n  background-color: #9724be;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.purple.buttons .button,\n.ui.basic.purple.button {\n  box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n  color: #A333C8 !important;\n}\n\n.ui.basic.purple.buttons .button:hover,\n.ui.basic.purple.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n  color: #9627ba !important;\n}\n\n.ui.basic.purple.buttons .button:focus,\n.ui.basic.purple.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n  color: #9627ba !important;\n}\n\n.ui.basic.purple.buttons .active.button,\n.ui.basic.purple.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #9724be inset !important;\n  color: #82299f !important;\n}\n\n.ui.basic.purple.buttons .button:active,\n.ui.basic.purple.button:active {\n  box-shadow: 0px 0px 0px 1px #82299f inset !important;\n  color: #82299f !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.purple.buttons .button,\n.ui.inverted.purple.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n  color: #DC73FF;\n}\n\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover,\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus,\n.ui.inverted.purple.buttons .button.active,\n.ui.inverted.purple.button.active,\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover {\n  background-color: #d65aff;\n}\n\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus {\n  background-color: #d24aff;\n}\n\n.ui.inverted.purple.buttons .active.button,\n.ui.inverted.purple.active.button {\n  background-color: #d65aff;\n}\n\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  background-color: #cf40ff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.purple.basic.buttons .button,\n.ui.inverted.purple.buttons .basic.button,\n.ui.inverted.purple.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:hover,\n.ui.inverted.purple.buttons .basic.button:hover,\n.ui.inverted.purple.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n  color: #DC73FF !important;\n}\n\n.ui.inverted.purple.basic.buttons .active.button,\n.ui.inverted.purple.buttons .basic.active.button,\n.ui.inverted.purple.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:active,\n.ui.inverted.purple.buttons .basic.button:active,\n.ui.inverted.purple.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n  color: #DC73FF !important;\n}\n\n/*--- Red ---*/\n\n.ui.red.buttons .button,\n.ui.red.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.red.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.red.buttons .button:hover,\n.ui.red.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.red.buttons .button:focus,\n.ui.red.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.red.buttons .button:active,\n.ui.red.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.red.buttons .active.button,\n.ui.red.buttons .active.button:active,\n.ui.red.active.button,\n.ui.red.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.red.buttons .button,\n.ui.basic.red.button {\n  box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n\n.ui.basic.red.buttons .button:hover,\n.ui.basic.red.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.red.buttons .button:focus,\n.ui.basic.red.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.red.buttons .active.button,\n.ui.basic.red.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.basic.red.buttons .button:active,\n.ui.basic.red.button:active {\n  box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.red.buttons .button,\n.ui.inverted.red.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n  color: #FF695E;\n}\n\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover,\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus,\n.ui.inverted.red.buttons .button.active,\n.ui.inverted.red.button.active,\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover {\n  background-color: #ff5144;\n}\n\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus {\n  background-color: #ff4335;\n}\n\n.ui.inverted.red.buttons .active.button,\n.ui.inverted.red.active.button {\n  background-color: #ff5144;\n}\n\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  background-color: #ff392b;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.red.basic.buttons .button,\n.ui.inverted.red.buttons .basic.button,\n.ui.inverted.red.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.red.basic.buttons .button:hover,\n.ui.inverted.red.buttons .basic.button:hover,\n.ui.inverted.red.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n  color: #FF695E !important;\n}\n\n.ui.inverted.red.basic.buttons .active.button,\n.ui.inverted.red.buttons .basic.active.button,\n.ui.inverted.red.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n\n.ui.inverted.red.basic.buttons .button:active,\n.ui.inverted.red.buttons .basic.button:active,\n.ui.inverted.red.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n  color: #FF695E !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.buttons .button,\n.ui.teal.button {\n  background-color: #00B5AD;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.teal.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.teal.buttons .button:hover,\n.ui.teal.button:hover {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .button:focus,\n.ui.teal.button:focus {\n  background-color: #008c86;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .button:active,\n.ui.teal.button:active {\n  background-color: #00827c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .active.button,\n.ui.teal.buttons .active.button:active,\n.ui.teal.active.button,\n.ui.teal.button .active.button:active {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.teal.buttons .button,\n.ui.basic.teal.button {\n  box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n  color: #00B5AD !important;\n}\n\n.ui.basic.teal.buttons .button:hover,\n.ui.basic.teal.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #009c95 !important;\n}\n\n.ui.basic.teal.buttons .button:focus,\n.ui.basic.teal.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n  color: #009c95 !important;\n}\n\n.ui.basic.teal.buttons .active.button,\n.ui.basic.teal.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #00827c !important;\n}\n\n.ui.basic.teal.buttons .button:active,\n.ui.basic.teal.button:active {\n  box-shadow: 0px 0px 0px 1px #00827c inset !important;\n  color: #00827c !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.teal.buttons .button,\n.ui.inverted.teal.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n  color: #6DFFFF;\n}\n\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover,\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus,\n.ui.inverted.teal.buttons .button.active,\n.ui.inverted.teal.button.active,\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover {\n  background-color: #54ffff;\n}\n\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus {\n  background-color: #44ffff;\n}\n\n.ui.inverted.teal.buttons .active.button,\n.ui.inverted.teal.active.button {\n  background-color: #54ffff;\n}\n\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  background-color: #3affff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.teal.basic.buttons .button,\n.ui.inverted.teal.buttons .basic.button,\n.ui.inverted.teal.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:hover,\n.ui.inverted.teal.buttons .basic.button:hover,\n.ui.inverted.teal.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n  color: #6DFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .active.button,\n.ui.inverted.teal.buttons .basic.active.button,\n.ui.inverted.teal.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:active,\n.ui.inverted.teal.buttons .basic.button:active,\n.ui.inverted.teal.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #3affff inset !important;\n  color: #6DFFFF !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.buttons .button,\n.ui.olive.button {\n  background-color: #B5CC18;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.olive.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.olive.buttons .button:hover,\n.ui.olive.button:hover {\n  background-color: #a7bd0d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .button:focus,\n.ui.olive.button:focus {\n  background-color: #a0b605;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .button:active,\n.ui.olive.button:active {\n  background-color: #8d9e13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .active.button,\n.ui.olive.buttons .active.button:active,\n.ui.olive.active.button,\n.ui.olive.button .active.button:active {\n  background-color: #aac109;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.olive.buttons .button,\n.ui.basic.olive.button {\n  box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n  color: #B5CC18 !important;\n}\n\n.ui.basic.olive.buttons .button:hover,\n.ui.basic.olive.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n  color: #a7bd0d !important;\n}\n\n.ui.basic.olive.buttons .button:focus,\n.ui.basic.olive.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n  color: #a7bd0d !important;\n}\n\n.ui.basic.olive.buttons .active.button,\n.ui.basic.olive.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n  color: #8d9e13 !important;\n}\n\n.ui.basic.olive.buttons .button:active,\n.ui.basic.olive.button:active {\n  box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n  color: #8d9e13 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.olive.buttons .button,\n.ui.inverted.olive.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n  color: #D9E778;\n}\n\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover,\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus,\n.ui.inverted.olive.buttons .button.active,\n.ui.inverted.olive.button.active,\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover {\n  background-color: #d8ea5c;\n}\n\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus {\n  background-color: #daef47;\n}\n\n.ui.inverted.olive.buttons .active.button,\n.ui.inverted.olive.active.button {\n  background-color: #daed59;\n}\n\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  background-color: #cddf4d;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.olive.basic.buttons .button,\n.ui.inverted.olive.buttons .basic.button,\n.ui.inverted.olive.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:hover,\n.ui.inverted.olive.buttons .basic.button:hover,\n.ui.inverted.olive.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n  color: #D9E778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n  color: #D9E778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .active.button,\n.ui.inverted.olive.buttons .basic.active.button,\n.ui.inverted.olive.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n  color: #D9E778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:active,\n.ui.inverted.olive.buttons .basic.button:active,\n.ui.inverted.olive.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n  color: #D9E778 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.buttons .button,\n.ui.yellow.button {\n  background-color: #FBBD08;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.yellow.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.yellow.buttons .button:hover,\n.ui.yellow.button:hover {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .button:focus,\n.ui.yellow.button:focus {\n  background-color: #daa300;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .button:active,\n.ui.yellow.button:active {\n  background-color: #cd9903;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .active.button,\n.ui.yellow.buttons .active.button:active,\n.ui.yellow.active.button,\n.ui.yellow.button .active.button:active {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.yellow.buttons .button,\n.ui.basic.yellow.button {\n  box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n  color: #FBBD08 !important;\n}\n\n.ui.basic.yellow.buttons .button:hover,\n.ui.basic.yellow.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #eaae00 !important;\n}\n\n.ui.basic.yellow.buttons .button:focus,\n.ui.basic.yellow.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n  color: #eaae00 !important;\n}\n\n.ui.basic.yellow.buttons .active.button,\n.ui.basic.yellow.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #cd9903 !important;\n}\n\n.ui.basic.yellow.buttons .button:active,\n.ui.basic.yellow.button:active {\n  box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n  color: #cd9903 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.yellow.buttons .button,\n.ui.inverted.yellow.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n  color: #FFE21F;\n}\n\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover,\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus,\n.ui.inverted.yellow.buttons .button.active,\n.ui.inverted.yellow.button.active,\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover {\n  background-color: #ffdf05;\n}\n\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus {\n  background-color: #f5d500;\n}\n\n.ui.inverted.yellow.buttons .active.button,\n.ui.inverted.yellow.active.button {\n  background-color: #ffdf05;\n}\n\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  background-color: #ebcd00;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.yellow.basic.buttons .button,\n.ui.inverted.yellow.buttons .basic.button,\n.ui.inverted.yellow.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:hover,\n.ui.inverted.yellow.buttons .basic.button:hover,\n.ui.inverted.yellow.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n  color: #FFE21F !important;\n}\n\n.ui.inverted.yellow.basic.buttons .active.button,\n.ui.inverted.yellow.buttons .basic.active.button,\n.ui.inverted.yellow.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:active,\n.ui.inverted.yellow.buttons .basic.button:active,\n.ui.inverted.yellow.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n  color: #FFE21F !important;\n}\n\n/*-------------------\n       Primary\n--------------------*/\n\n/*--- Standard ---*/\n\n.ui.primary.buttons .button,\n.ui.primary.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.primary.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.primary.buttons .button:hover,\n.ui.primary.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .button:focus,\n.ui.primary.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .button:active,\n.ui.primary.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .active.button,\n.ui.primary.buttons .active.button:active,\n.ui.primary.active.button,\n.ui.primary.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.primary.buttons .button,\n.ui.basic.primary.button {\n  box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n\n.ui.basic.primary.buttons .button:hover,\n.ui.basic.primary.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.primary.buttons .button:focus,\n.ui.basic.primary.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.primary.buttons .active.button,\n.ui.basic.primary.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.basic.primary.buttons .button:active,\n.ui.basic.primary.button:active {\n  box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*-------------------\n      Secondary\n--------------------*/\n\n/* Standard */\n\n.ui.secondary.buttons .button,\n.ui.secondary.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.secondary.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.secondary.buttons .button:hover,\n.ui.secondary.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .button:focus,\n.ui.secondary.button:focus {\n  background-color: #2e3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .button:active,\n.ui.secondary.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .active.button,\n.ui.secondary.buttons .active.button:active,\n.ui.secondary.active.button,\n.ui.secondary.button .active.button:active {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.secondary.buttons .button,\n.ui.basic.secondary.button {\n  box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n\n.ui.basic.secondary.buttons .button:hover,\n.ui.basic.secondary.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.secondary.buttons .button:focus,\n.ui.basic.secondary.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.secondary.buttons .active.button,\n.ui.basic.secondary.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #343637 !important;\n}\n\n.ui.basic.secondary.buttons .button:active,\n.ui.basic.secondary.button:active {\n  box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n    Positive\n----------------*/\n\n/* Standard */\n\n.ui.positive.buttons .button,\n.ui.positive.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.positive.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.positive.buttons .button:hover,\n.ui.positive.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .button:focus,\n.ui.positive.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .button:active,\n.ui.positive.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .active.button,\n.ui.positive.buttons .active.button:active,\n.ui.positive.active.button,\n.ui.positive.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.positive.buttons .button,\n.ui.basic.positive.button {\n  box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n\n.ui.basic.positive.buttons .button:hover,\n.ui.basic.positive.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.positive.buttons .button:focus,\n.ui.basic.positive.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.positive.buttons .active.button,\n.ui.basic.positive.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.basic.positive.buttons .button:active,\n.ui.basic.positive.button:active {\n  box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n     Negative\n----------------*/\n\n/* Standard */\n\n.ui.negative.buttons .button,\n.ui.negative.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.negative.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.negative.buttons .button:hover,\n.ui.negative.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .button:focus,\n.ui.negative.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .button:active,\n.ui.negative.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .active.button,\n.ui.negative.buttons .active.button:active,\n.ui.negative.active.button,\n.ui.negative.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.negative.buttons .button,\n.ui.basic.negative.button {\n  box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n\n.ui.basic.negative.buttons .button:hover,\n.ui.basic.negative.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.negative.buttons .button:focus,\n.ui.basic.negative.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.negative.buttons .active.button,\n.ui.basic.negative.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.basic.negative.buttons .button:active,\n.ui.basic.negative.button:active {\n  box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*******************************\n            Groups\n*******************************/\n\n.ui.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  font-size: 0em;\n  vertical-align: baseline;\n  margin: 0em 0.25em 0em 0em;\n}\n\n.ui.buttons:not(.basic):not(.inverted) {\n  box-shadow: none;\n}\n\n/* Clearfix */\n\n.ui.buttons:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/* Standard Group */\n\n.ui.buttons .button {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  margin: 0em;\n  border-radius: 0em;\n  margin: 0px 0px 0px 0px;\n}\n\n.ui.buttons > .ui.button:not(.basic):not(.inverted),\n.ui.buttons:not(.basic):not(.inverted) > .button {\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.buttons .button:first-child {\n  border-left: none;\n  margin-left: 0em;\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n.ui.buttons .button:last-child {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/* Vertical  Style */\n\n.ui.vertical.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.ui.vertical.buttons .button {\n  display: block;\n  float: none;\n  width: 100%;\n  margin: 0px 0px 0px 0px;\n  box-shadow: none;\n  border-radius: 0em;\n}\n\n.ui.vertical.buttons .button:first-child {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n\n.ui.vertical.buttons .button:last-child {\n  margin-bottom: 0px;\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n.ui.vertical.buttons .button:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Container\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Container\n*******************************/\n\n/* All Sizes */\n\n.ui.container {\n  display: block;\n  max-width: 100% !important;\n}\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.container {\n    width: auto !important;\n    margin-left: 1em !important;\n    margin-right: 1em !important;\n  }\n\n  .ui.grid.container {\n    width: auto !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: auto !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: auto !important;\n  }\n}\n\n/* Tablet */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.container {\n    width: 723px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 723px  +  2rem ) !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: calc( 723px  +  3rem ) !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: calc( 723px  +  5rem ) !important;\n  }\n}\n\n/* Small Monitor */\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.container {\n    width: 933px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 933px  +  2rem ) !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: calc( 933px  +  3rem ) !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: calc( 933px  +  5rem ) !important;\n  }\n}\n\n/* Large Monitor */\n\n@media only screen and (min-width: 1200px) {\n  .ui.container {\n    width: 1127px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 1127px  +  2rem ) !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: calc( 1127px  +  3rem ) !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: calc( 1127px  +  5rem ) !important;\n  }\n}\n\n/*******************************\n             Types\n*******************************/\n\n/* Text Container */\n\n.ui.text.container {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  max-width: 700px !important;\n  line-height: 1.5;\n}\n\n.ui.text.container {\n  font-size: 1.14285714rem;\n}\n\n/* Fluid */\n\n.ui.fluid.container {\n  width: 100%;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui[class*=\"left aligned\"].container {\n  text-align: left;\n}\n\n.ui[class*=\"center aligned\"].container {\n  text-align: center;\n}\n\n.ui[class*=\"right aligned\"].container {\n  text-align: right;\n}\n\n.ui.justified.container {\n  text-align: justify;\n  -webkit-hyphens: auto;\n  -ms-hyphens: auto;\n  hyphens: auto;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Divider\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Divider\n*******************************/\n\n.ui.divider {\n  margin: 1rem 0rem;\n  line-height: 1;\n  height: 0em;\n  font-weight: bold;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: rgba(0, 0, 0, 0.85);\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.divider:not(.vertical):not(.horizontal) {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n/* Allow divider between each column row */\n\n.ui.grid > .column + .divider,\n.ui.grid > .row > .column + .divider {\n  left: auto;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.divider {\n  display: table;\n  white-space: nowrap;\n  height: auto;\n  margin: '';\n  line-height: 1;\n  text-align: center;\n}\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  content: '';\n  display: table-cell;\n  position: relative;\n  top: 50%;\n  width: 50%;\n  background-repeat: no-repeat;\n}\n\n.ui.horizontal.divider:before {\n  background-position: right 1em top 50%;\n}\n\n.ui.horizontal.divider:after {\n  background-position: left 1em top 50%;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.divider {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n  margin: 0rem;\n  padding: 0em;\n  width: auto;\n  height: 50%;\n  line-height: 0em;\n  text-align: center;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n}\n\n.ui.vertical.divider:before,\n.ui.vertical.divider:after {\n  position: absolute;\n  left: 50%;\n  content: '';\n  z-index: 3;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\n  width: 0%;\n  height: calc(100% -  1rem );\n}\n\n.ui.vertical.divider:before {\n  top: -100%;\n}\n\n.ui.vertical.divider:after {\n  top: auto;\n  bottom: 0px;\n}\n\n/* Inside grid */\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider,\n  .ui.grid .stackable.row .ui.vertical.divider {\n    display: table;\n    white-space: nowrap;\n    height: auto;\n    margin: '';\n    overflow: hidden;\n    line-height: 1;\n    text-align: center;\n    position: static;\n    top: 0;\n    left: 0;\n    -webkit-transform: none;\n    transform: none;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    position: static;\n    left: 0;\n    border-left: none;\n    border-right: none;\n    content: '';\n    display: table-cell;\n    position: relative;\n    top: 50%;\n    width: 50%;\n    background-repeat: no-repeat;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before {\n    background-position: right 1em top 50%;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-position: left 1em top 50%;\n  }\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.divider > .icon {\n  margin: 0rem;\n  font-size: 1rem;\n  height: 1em;\n  vertical-align: middle;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Hidden\n---------------*/\n\n.ui.hidden.divider {\n  border-color: transparent !important;\n}\n\n.ui.hidden.divider:before,\n.ui.hidden.divider:after {\n  display: none;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.divider.inverted,\n.ui.vertical.inverted.divider,\n.ui.horizontal.inverted.divider {\n  color: #FFFFFF;\n}\n\n.ui.divider.inverted,\n.ui.divider.inverted:after,\n.ui.divider.inverted:before {\n  border-top-color: rgba(34, 36, 38, 0.15) !important;\n  border-left-color: rgba(34, 36, 38, 0.15) !important;\n  border-bottom-color: rgba(255, 255, 255, 0.15) !important;\n  border-right-color: rgba(255, 255, 255, 0.15) !important;\n}\n\n/*--------------\n    Fitted\n---------------*/\n\n.ui.fitted.divider {\n  margin: 0em;\n}\n\n/*--------------\n    Clearing\n---------------*/\n\n.ui.clearing.divider {\n  clear: both;\n}\n\n/*--------------\n    Section\n---------------*/\n\n.ui.section.divider {\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.divider {\n  font-size: 1rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n  }\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Flag\n*******************************/\n\ni.flag:not(.icon) {\n  display: inline-block;\n  width: 16px;\n  height: 11px;\n  line-height: 11px;\n  vertical-align: baseline;\n  margin: 0em 0.5em 0em 0em;\n  text-decoration: inherit;\n  speak: none;\n  font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/* Sprite */\n\ni.flag:not(.icon):before {\n  display: inline-block;\n  content: '';\n  background: url(\"./themes/default/assets/images/flags.png\") no-repeat -108px -1976px;\n  width: 16px;\n  height: 11px;\n}\n\n/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n/*******************************\n         Theme Overrides\n*******************************/\n\ni.flag.ad:before,\ni.flag.andorra:before {\n  background-position: 0px 0px;\n}\n\ni.flag.ae:before,\ni.flag.united.arab.emirates:before,\ni.flag.uae:before {\n  background-position: 0px -26px;\n}\n\ni.flag.af:before,\ni.flag.afghanistan:before {\n  background-position: 0px -52px;\n}\n\ni.flag.ag:before,\ni.flag.antigua:before {\n  background-position: 0px -78px;\n}\n\ni.flag.ai:before,\ni.flag.anguilla:before {\n  background-position: 0px -104px;\n}\n\ni.flag.al:before,\ni.flag.albania:before {\n  background-position: 0px -130px;\n}\n\ni.flag.am:before,\ni.flag.armenia:before {\n  background-position: 0px -156px;\n}\n\ni.flag.an:before,\ni.flag.netherlands.antilles:before {\n  background-position: 0px -182px;\n}\n\ni.flag.ao:before,\ni.flag.angola:before {\n  background-position: 0px -208px;\n}\n\ni.flag.ar:before,\ni.flag.argentina:before {\n  background-position: 0px -234px;\n}\n\ni.flag.as:before,\ni.flag.american.samoa:before {\n  background-position: 0px -260px;\n}\n\ni.flag.at:before,\ni.flag.austria:before {\n  background-position: 0px -286px;\n}\n\ni.flag.au:before,\ni.flag.australia:before {\n  background-position: 0px -312px;\n}\n\ni.flag.aw:before,\ni.flag.aruba:before {\n  background-position: 0px -338px;\n}\n\ni.flag.ax:before,\ni.flag.aland.islands:before {\n  background-position: 0px -364px;\n}\n\ni.flag.az:before,\ni.flag.azerbaijan:before {\n  background-position: 0px -390px;\n}\n\ni.flag.ba:before,\ni.flag.bosnia:before {\n  background-position: 0px -416px;\n}\n\ni.flag.bb:before,\ni.flag.barbados:before {\n  background-position: 0px -442px;\n}\n\ni.flag.bd:before,\ni.flag.bangladesh:before {\n  background-position: 0px -468px;\n}\n\ni.flag.be:before,\ni.flag.belgium:before {\n  background-position: 0px -494px;\n}\n\ni.flag.bf:before,\ni.flag.burkina.faso:before {\n  background-position: 0px -520px;\n}\n\ni.flag.bg:before,\ni.flag.bulgaria:before {\n  background-position: 0px -546px;\n}\n\ni.flag.bh:before,\ni.flag.bahrain:before {\n  background-position: 0px -572px;\n}\n\ni.flag.bi:before,\ni.flag.burundi:before {\n  background-position: 0px -598px;\n}\n\ni.flag.bj:before,\ni.flag.benin:before {\n  background-position: 0px -624px;\n}\n\ni.flag.bm:before,\ni.flag.bermuda:before {\n  background-position: 0px -650px;\n}\n\ni.flag.bn:before,\ni.flag.brunei:before {\n  background-position: 0px -676px;\n}\n\ni.flag.bo:before,\ni.flag.bolivia:before {\n  background-position: 0px -702px;\n}\n\ni.flag.br:before,\ni.flag.brazil:before {\n  background-position: 0px -728px;\n}\n\ni.flag.bs:before,\ni.flag.bahamas:before {\n  background-position: 0px -754px;\n}\n\ni.flag.bt:before,\ni.flag.bhutan:before {\n  background-position: 0px -780px;\n}\n\ni.flag.bv:before,\ni.flag.bouvet.island:before {\n  background-position: 0px -806px;\n}\n\ni.flag.bw:before,\ni.flag.botswana:before {\n  background-position: 0px -832px;\n}\n\ni.flag.by:before,\ni.flag.belarus:before {\n  background-position: 0px -858px;\n}\n\ni.flag.bz:before,\ni.flag.belize:before {\n  background-position: 0px -884px;\n}\n\ni.flag.ca:before,\ni.flag.canada:before {\n  background-position: 0px -910px;\n}\n\ni.flag.cc:before,\ni.flag.cocos.islands:before {\n  background-position: 0px -962px;\n}\n\ni.flag.cd:before,\ni.flag.congo:before {\n  background-position: 0px -988px;\n}\n\ni.flag.cf:before,\ni.flag.central.african.republic:before {\n  background-position: 0px -1014px;\n}\n\ni.flag.cg:before,\ni.flag.congo.brazzaville:before {\n  background-position: 0px -1040px;\n}\n\ni.flag.ch:before,\ni.flag.switzerland:before {\n  background-position: 0px -1066px;\n}\n\ni.flag.ci:before,\ni.flag.cote.divoire:before {\n  background-position: 0px -1092px;\n}\n\ni.flag.ck:before,\ni.flag.cook.islands:before {\n  background-position: 0px -1118px;\n}\n\ni.flag.cl:before,\ni.flag.chile:before {\n  background-position: 0px -1144px;\n}\n\ni.flag.cm:before,\ni.flag.cameroon:before {\n  background-position: 0px -1170px;\n}\n\ni.flag.cn:before,\ni.flag.china:before {\n  background-position: 0px -1196px;\n}\n\ni.flag.co:before,\ni.flag.colombia:before {\n  background-position: 0px -1222px;\n}\n\ni.flag.cr:before,\ni.flag.costa.rica:before {\n  background-position: 0px -1248px;\n}\n\ni.flag.cs:before,\ni.flag.serbia:before {\n  background-position: 0px -1274px;\n}\n\ni.flag.cu:before,\ni.flag.cuba:before {\n  background-position: 0px -1300px;\n}\n\ni.flag.cv:before,\ni.flag.cape.verde:before {\n  background-position: 0px -1326px;\n}\n\ni.flag.cx:before,\ni.flag.christmas.island:before {\n  background-position: 0px -1352px;\n}\n\ni.flag.cy:before,\ni.flag.cyprus:before {\n  background-position: 0px -1378px;\n}\n\ni.flag.cz:before,\ni.flag.czech.republic:before {\n  background-position: 0px -1404px;\n}\n\ni.flag.de:before,\ni.flag.germany:before {\n  background-position: 0px -1430px;\n}\n\ni.flag.dj:before,\ni.flag.djibouti:before {\n  background-position: 0px -1456px;\n}\n\ni.flag.dk:before,\ni.flag.denmark:before {\n  background-position: 0px -1482px;\n}\n\ni.flag.dm:before,\ni.flag.dominica:before {\n  background-position: 0px -1508px;\n}\n\ni.flag.do:before,\ni.flag.dominican.republic:before {\n  background-position: 0px -1534px;\n}\n\ni.flag.dz:before,\ni.flag.algeria:before {\n  background-position: 0px -1560px;\n}\n\ni.flag.ec:before,\ni.flag.ecuador:before {\n  background-position: 0px -1586px;\n}\n\ni.flag.ee:before,\ni.flag.estonia:before {\n  background-position: 0px -1612px;\n}\n\ni.flag.eg:before,\ni.flag.egypt:before {\n  background-position: 0px -1638px;\n}\n\ni.flag.eh:before,\ni.flag.western.sahara:before {\n  background-position: 0px -1664px;\n}\n\ni.flag.er:before,\ni.flag.eritrea:before {\n  background-position: 0px -1716px;\n}\n\ni.flag.es:before,\ni.flag.spain:before {\n  background-position: 0px -1742px;\n}\n\ni.flag.et:before,\ni.flag.ethiopia:before {\n  background-position: 0px -1768px;\n}\n\ni.flag.eu:before,\ni.flag.european.union:before {\n  background-position: 0px -1794px;\n}\n\ni.flag.fi:before,\ni.flag.finland:before {\n  background-position: 0px -1846px;\n}\n\ni.flag.fj:before,\ni.flag.fiji:before {\n  background-position: 0px -1872px;\n}\n\ni.flag.fk:before,\ni.flag.falkland.islands:before {\n  background-position: 0px -1898px;\n}\n\ni.flag.fm:before,\ni.flag.micronesia:before {\n  background-position: 0px -1924px;\n}\n\ni.flag.fo:before,\ni.flag.faroe.islands:before {\n  background-position: 0px -1950px;\n}\n\ni.flag.fr:before,\ni.flag.france:before {\n  background-position: 0px -1976px;\n}\n\ni.flag.ga:before,\ni.flag.gabon:before {\n  background-position: -36px 0px;\n}\n\ni.flag.gb:before,\ni.flag.united.kingdom:before {\n  background-position: -36px -26px;\n}\n\ni.flag.gd:before,\ni.flag.grenada:before {\n  background-position: -36px -52px;\n}\n\ni.flag.ge:before,\ni.flag.georgia:before {\n  background-position: -36px -78px;\n}\n\ni.flag.gf:before,\ni.flag.french.guiana:before {\n  background-position: -36px -104px;\n}\n\ni.flag.gh:before,\ni.flag.ghana:before {\n  background-position: -36px -130px;\n}\n\ni.flag.gi:before,\ni.flag.gibraltar:before {\n  background-position: -36px -156px;\n}\n\ni.flag.gl:before,\ni.flag.greenland:before {\n  background-position: -36px -182px;\n}\n\ni.flag.gm:before,\ni.flag.gambia:before {\n  background-position: -36px -208px;\n}\n\ni.flag.gn:before,\ni.flag.guinea:before {\n  background-position: -36px -234px;\n}\n\ni.flag.gp:before,\ni.flag.guadeloupe:before {\n  background-position: -36px -260px;\n}\n\ni.flag.gq:before,\ni.flag.equatorial.guinea:before {\n  background-position: -36px -286px;\n}\n\ni.flag.gr:before,\ni.flag.greece:before {\n  background-position: -36px -312px;\n}\n\ni.flag.gs:before,\ni.flag.sandwich.islands:before {\n  background-position: -36px -338px;\n}\n\ni.flag.gt:before,\ni.flag.guatemala:before {\n  background-position: -36px -364px;\n}\n\ni.flag.gu:before,\ni.flag.guam:before {\n  background-position: -36px -390px;\n}\n\ni.flag.gw:before,\ni.flag.guinea-bissau:before {\n  background-position: -36px -416px;\n}\n\ni.flag.gy:before,\ni.flag.guyana:before {\n  background-position: -36px -442px;\n}\n\ni.flag.hk:before,\ni.flag.hong.kong:before {\n  background-position: -36px -468px;\n}\n\ni.flag.hm:before,\ni.flag.heard.island:before {\n  background-position: -36px -494px;\n}\n\ni.flag.hn:before,\ni.flag.honduras:before {\n  background-position: -36px -520px;\n}\n\ni.flag.hr:before,\ni.flag.croatia:before {\n  background-position: -36px -546px;\n}\n\ni.flag.ht:before,\ni.flag.haiti:before {\n  background-position: -36px -572px;\n}\n\ni.flag.hu:before,\ni.flag.hungary:before {\n  background-position: -36px -598px;\n}\n\ni.flag.id:before,\ni.flag.indonesia:before {\n  background-position: -36px -624px;\n}\n\ni.flag.ie:before,\ni.flag.ireland:before {\n  background-position: -36px -650px;\n}\n\ni.flag.il:before,\ni.flag.israel:before {\n  background-position: -36px -676px;\n}\n\ni.flag.in:before,\ni.flag.india:before {\n  background-position: -36px -702px;\n}\n\ni.flag.io:before,\ni.flag.indian.ocean.territory:before {\n  background-position: -36px -728px;\n}\n\ni.flag.iq:before,\ni.flag.iraq:before {\n  background-position: -36px -754px;\n}\n\ni.flag.ir:before,\ni.flag.iran:before {\n  background-position: -36px -780px;\n}\n\ni.flag.is:before,\ni.flag.iceland:before {\n  background-position: -36px -806px;\n}\n\ni.flag.it:before,\ni.flag.italy:before {\n  background-position: -36px -832px;\n}\n\ni.flag.jm:before,\ni.flag.jamaica:before {\n  background-position: -36px -858px;\n}\n\ni.flag.jo:before,\ni.flag.jordan:before {\n  background-position: -36px -884px;\n}\n\ni.flag.jp:before,\ni.flag.japan:before {\n  background-position: -36px -910px;\n}\n\ni.flag.ke:before,\ni.flag.kenya:before {\n  background-position: -36px -936px;\n}\n\ni.flag.kg:before,\ni.flag.kyrgyzstan:before {\n  background-position: -36px -962px;\n}\n\ni.flag.kh:before,\ni.flag.cambodia:before {\n  background-position: -36px -988px;\n}\n\ni.flag.ki:before,\ni.flag.kiribati:before {\n  background-position: -36px -1014px;\n}\n\ni.flag.km:before,\ni.flag.comoros:before {\n  background-position: -36px -1040px;\n}\n\ni.flag.kn:before,\ni.flag.saint.kitts.and.nevis:before {\n  background-position: -36px -1066px;\n}\n\ni.flag.kp:before,\ni.flag.north.korea:before {\n  background-position: -36px -1092px;\n}\n\ni.flag.kr:before,\ni.flag.south.korea:before {\n  background-position: -36px -1118px;\n}\n\ni.flag.kw:before,\ni.flag.kuwait:before {\n  background-position: -36px -1144px;\n}\n\ni.flag.ky:before,\ni.flag.cayman.islands:before {\n  background-position: -36px -1170px;\n}\n\ni.flag.kz:before,\ni.flag.kazakhstan:before {\n  background-position: -36px -1196px;\n}\n\ni.flag.la:before,\ni.flag.laos:before {\n  background-position: -36px -1222px;\n}\n\ni.flag.lb:before,\ni.flag.lebanon:before {\n  background-position: -36px -1248px;\n}\n\ni.flag.lc:before,\ni.flag.saint.lucia:before {\n  background-position: -36px -1274px;\n}\n\ni.flag.li:before,\ni.flag.liechtenstein:before {\n  background-position: -36px -1300px;\n}\n\ni.flag.lk:before,\ni.flag.sri.lanka:before {\n  background-position: -36px -1326px;\n}\n\ni.flag.lr:before,\ni.flag.liberia:before {\n  background-position: -36px -1352px;\n}\n\ni.flag.ls:before,\ni.flag.lesotho:before {\n  background-position: -36px -1378px;\n}\n\ni.flag.lt:before,\ni.flag.lithuania:before {\n  background-position: -36px -1404px;\n}\n\ni.flag.lu:before,\ni.flag.luxembourg:before {\n  background-position: -36px -1430px;\n}\n\ni.flag.lv:before,\ni.flag.latvia:before {\n  background-position: -36px -1456px;\n}\n\ni.flag.ly:before,\ni.flag.libya:before {\n  background-position: -36px -1482px;\n}\n\ni.flag.ma:before,\ni.flag.morocco:before {\n  background-position: -36px -1508px;\n}\n\ni.flag.mc:before,\ni.flag.monaco:before {\n  background-position: -36px -1534px;\n}\n\ni.flag.md:before,\ni.flag.moldova:before {\n  background-position: -36px -1560px;\n}\n\ni.flag.me:before,\ni.flag.montenegro:before {\n  background-position: -36px -1586px;\n}\n\ni.flag.mg:before,\ni.flag.madagascar:before {\n  background-position: -36px -1613px;\n}\n\ni.flag.mh:before,\ni.flag.marshall.islands:before {\n  background-position: -36px -1639px;\n}\n\ni.flag.mk:before,\ni.flag.macedonia:before {\n  background-position: -36px -1665px;\n}\n\ni.flag.ml:before,\ni.flag.mali:before {\n  background-position: -36px -1691px;\n}\n\ni.flag.mm:before,\ni.flag.myanmar:before,\ni.flag.burma:before {\n  background-position: -36px -1717px;\n}\n\ni.flag.mn:before,\ni.flag.mongolia:before {\n  background-position: -36px -1743px;\n}\n\ni.flag.mo:before,\ni.flag.macau:before {\n  background-position: -36px -1769px;\n}\n\ni.flag.mp:before,\ni.flag.northern.mariana.islands:before {\n  background-position: -36px -1795px;\n}\n\ni.flag.mq:before,\ni.flag.martinique:before {\n  background-position: -36px -1821px;\n}\n\ni.flag.mr:before,\ni.flag.mauritania:before {\n  background-position: -36px -1847px;\n}\n\ni.flag.ms:before,\ni.flag.montserrat:before {\n  background-position: -36px -1873px;\n}\n\ni.flag.mt:before,\ni.flag.malta:before {\n  background-position: -36px -1899px;\n}\n\ni.flag.mu:before,\ni.flag.mauritius:before {\n  background-position: -36px -1925px;\n}\n\ni.flag.mv:before,\ni.flag.maldives:before {\n  background-position: -36px -1951px;\n}\n\ni.flag.mw:before,\ni.flag.malawi:before {\n  background-position: -36px -1977px;\n}\n\ni.flag.mx:before,\ni.flag.mexico:before {\n  background-position: -72px 0px;\n}\n\ni.flag.my:before,\ni.flag.malaysia:before {\n  background-position: -72px -26px;\n}\n\ni.flag.mz:before,\ni.flag.mozambique:before {\n  background-position: -72px -52px;\n}\n\ni.flag.na:before,\ni.flag.namibia:before {\n  background-position: -72px -78px;\n}\n\ni.flag.nc:before,\ni.flag.new.caledonia:before {\n  background-position: -72px -104px;\n}\n\ni.flag.ne:before,\ni.flag.niger:before {\n  background-position: -72px -130px;\n}\n\ni.flag.nf:before,\ni.flag.norfolk.island:before {\n  background-position: -72px -156px;\n}\n\ni.flag.ng:before,\ni.flag.nigeria:before {\n  background-position: -72px -182px;\n}\n\ni.flag.ni:before,\ni.flag.nicaragua:before {\n  background-position: -72px -208px;\n}\n\ni.flag.nl:before,\ni.flag.netherlands:before {\n  background-position: -72px -234px;\n}\n\ni.flag.no:before,\ni.flag.norway:before {\n  background-position: -72px -260px;\n}\n\ni.flag.np:before,\ni.flag.nepal:before {\n  background-position: -72px -286px;\n}\n\ni.flag.nr:before,\ni.flag.nauru:before {\n  background-position: -72px -312px;\n}\n\ni.flag.nu:before,\ni.flag.niue:before {\n  background-position: -72px -338px;\n}\n\ni.flag.nz:before,\ni.flag.new.zealand:before {\n  background-position: -72px -364px;\n}\n\ni.flag.om:before,\ni.flag.oman:before {\n  background-position: -72px -390px;\n}\n\ni.flag.pa:before,\ni.flag.panama:before {\n  background-position: -72px -416px;\n}\n\ni.flag.pe:before,\ni.flag.peru:before {\n  background-position: -72px -442px;\n}\n\ni.flag.pf:before,\ni.flag.french.polynesia:before {\n  background-position: -72px -468px;\n}\n\ni.flag.pg:before,\ni.flag.new.guinea:before {\n  background-position: -72px -494px;\n}\n\ni.flag.ph:before,\ni.flag.philippines:before {\n  background-position: -72px -520px;\n}\n\ni.flag.pk:before,\ni.flag.pakistan:before {\n  background-position: -72px -546px;\n}\n\ni.flag.pl:before,\ni.flag.poland:before {\n  background-position: -72px -572px;\n}\n\ni.flag.pm:before,\ni.flag.saint.pierre:before {\n  background-position: -72px -598px;\n}\n\ni.flag.pn:before,\ni.flag.pitcairn.islands:before {\n  background-position: -72px -624px;\n}\n\ni.flag.pr:before,\ni.flag.puerto.rico:before {\n  background-position: -72px -650px;\n}\n\ni.flag.ps:before,\ni.flag.palestine:before {\n  background-position: -72px -676px;\n}\n\ni.flag.pt:before,\ni.flag.portugal:before {\n  background-position: -72px -702px;\n}\n\ni.flag.pw:before,\ni.flag.palau:before {\n  background-position: -72px -728px;\n}\n\ni.flag.py:before,\ni.flag.paraguay:before {\n  background-position: -72px -754px;\n}\n\ni.flag.qa:before,\ni.flag.qatar:before {\n  background-position: -72px -780px;\n}\n\ni.flag.re:before,\ni.flag.reunion:before {\n  background-position: -72px -806px;\n}\n\ni.flag.ro:before,\ni.flag.romania:before {\n  background-position: -72px -832px;\n}\n\ni.flag.rs:before,\ni.flag.serbia:before {\n  background-position: -72px -858px;\n}\n\ni.flag.ru:before,\ni.flag.russia:before {\n  background-position: -72px -884px;\n}\n\ni.flag.rw:before,\ni.flag.rwanda:before {\n  background-position: -72px -910px;\n}\n\ni.flag.sa:before,\ni.flag.saudi.arabia:before {\n  background-position: -72px -936px;\n}\n\ni.flag.sb:before,\ni.flag.solomon.islands:before {\n  background-position: -72px -962px;\n}\n\ni.flag.sc:before,\ni.flag.seychelles:before {\n  background-position: -72px -988px;\n}\n\ni.flag.gb.sct:before,\ni.flag.scotland:before {\n  background-position: -72px -1014px;\n}\n\ni.flag.sd:before,\ni.flag.sudan:before {\n  background-position: -72px -1040px;\n}\n\ni.flag.se:before,\ni.flag.sweden:before {\n  background-position: -72px -1066px;\n}\n\ni.flag.sg:before,\ni.flag.singapore:before {\n  background-position: -72px -1092px;\n}\n\ni.flag.sh:before,\ni.flag.saint.helena:before {\n  background-position: -72px -1118px;\n}\n\ni.flag.si:before,\ni.flag.slovenia:before {\n  background-position: -72px -1144px;\n}\n\ni.flag.sj:before,\ni.flag.svalbard:before,\ni.flag.jan.mayen:before {\n  background-position: -72px -1170px;\n}\n\ni.flag.sk:before,\ni.flag.slovakia:before {\n  background-position: -72px -1196px;\n}\n\ni.flag.sl:before,\ni.flag.sierra.leone:before {\n  background-position: -72px -1222px;\n}\n\ni.flag.sm:before,\ni.flag.san.marino:before {\n  background-position: -72px -1248px;\n}\n\ni.flag.sn:before,\ni.flag.senegal:before {\n  background-position: -72px -1274px;\n}\n\ni.flag.so:before,\ni.flag.somalia:before {\n  background-position: -72px -1300px;\n}\n\ni.flag.sr:before,\ni.flag.suriname:before {\n  background-position: -72px -1326px;\n}\n\ni.flag.st:before,\ni.flag.sao.tome:before {\n  background-position: -72px -1352px;\n}\n\ni.flag.sv:before,\ni.flag.el.salvador:before {\n  background-position: -72px -1378px;\n}\n\ni.flag.sy:before,\ni.flag.syria:before {\n  background-position: -72px -1404px;\n}\n\ni.flag.sz:before,\ni.flag.swaziland:before {\n  background-position: -72px -1430px;\n}\n\ni.flag.tc:before,\ni.flag.caicos.islands:before {\n  background-position: -72px -1456px;\n}\n\ni.flag.td:before,\ni.flag.chad:before {\n  background-position: -72px -1482px;\n}\n\ni.flag.tf:before,\ni.flag.french.territories:before {\n  background-position: -72px -1508px;\n}\n\ni.flag.tg:before,\ni.flag.togo:before {\n  background-position: -72px -1534px;\n}\n\ni.flag.th:before,\ni.flag.thailand:before {\n  background-position: -72px -1560px;\n}\n\ni.flag.tj:before,\ni.flag.tajikistan:before {\n  background-position: -72px -1586px;\n}\n\ni.flag.tk:before,\ni.flag.tokelau:before {\n  background-position: -72px -1612px;\n}\n\ni.flag.tl:before,\ni.flag.timorleste:before {\n  background-position: -72px -1638px;\n}\n\ni.flag.tm:before,\ni.flag.turkmenistan:before {\n  background-position: -72px -1664px;\n}\n\ni.flag.tn:before,\ni.flag.tunisia:before {\n  background-position: -72px -1690px;\n}\n\ni.flag.to:before,\ni.flag.tonga:before {\n  background-position: -72px -1716px;\n}\n\ni.flag.tr:before,\ni.flag.turkey:before {\n  background-position: -72px -1742px;\n}\n\ni.flag.tt:before,\ni.flag.trinidad:before {\n  background-position: -72px -1768px;\n}\n\ni.flag.tv:before,\ni.flag.tuvalu:before {\n  background-position: -72px -1794px;\n}\n\ni.flag.tw:before,\ni.flag.taiwan:before {\n  background-position: -72px -1820px;\n}\n\ni.flag.tz:before,\ni.flag.tanzania:before {\n  background-position: -72px -1846px;\n}\n\ni.flag.ua:before,\ni.flag.ukraine:before {\n  background-position: -72px -1872px;\n}\n\ni.flag.ug:before,\ni.flag.uganda:before {\n  background-position: -72px -1898px;\n}\n\ni.flag.um:before,\ni.flag.us.minor.islands:before {\n  background-position: -72px -1924px;\n}\n\ni.flag.us:before,\ni.flag.america:before,\ni.flag.united.states:before {\n  background-position: -72px -1950px;\n}\n\ni.flag.uy:before,\ni.flag.uruguay:before {\n  background-position: -72px -1976px;\n}\n\ni.flag.uz:before,\ni.flag.uzbekistan:before {\n  background-position: -108px 0px;\n}\n\ni.flag.va:before,\ni.flag.vatican.city:before {\n  background-position: -108px -26px;\n}\n\ni.flag.vc:before,\ni.flag.saint.vincent:before {\n  background-position: -108px -52px;\n}\n\ni.flag.ve:before,\ni.flag.venezuela:before {\n  background-position: -108px -78px;\n}\n\ni.flag.vg:before,\ni.flag.british.virgin.islands:before {\n  background-position: -108px -104px;\n}\n\ni.flag.vi:before,\ni.flag.us.virgin.islands:before {\n  background-position: -108px -130px;\n}\n\ni.flag.vn:before,\ni.flag.vietnam:before {\n  background-position: -108px -156px;\n}\n\ni.flag.vu:before,\ni.flag.vanuatu:before {\n  background-position: -108px -182px;\n}\n\ni.flag.gb.wls:before,\ni.flag.wales:before {\n  background-position: -108px -208px;\n}\n\ni.flag.wf:before,\ni.flag.wallis.and.futuna:before {\n  background-position: -108px -234px;\n}\n\ni.flag.ws:before,\ni.flag.samoa:before {\n  background-position: -108px -260px;\n}\n\ni.flag.ye:before,\ni.flag.yemen:before {\n  background-position: -108px -286px;\n}\n\ni.flag.yt:before,\ni.flag.mayotte:before {\n  background-position: -108px -312px;\n}\n\ni.flag.za:before,\ni.flag.south.africa:before {\n  background-position: -108px -338px;\n}\n\ni.flag.zm:before,\ni.flag.zambia:before {\n  background-position: -108px -364px;\n}\n\ni.flag.zw:before,\ni.flag.zimbabwe:before {\n  background-position: -108px -390px;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Header\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Header\n*******************************/\n\n/* Standard */\n\n.ui.header {\n  border: none;\n  margin: calc(2rem -  0.14285em ) 0em 1rem;\n  padding: 0em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  line-height: 1.2857em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.header:first-child {\n  margin-top: -0.14285em;\n}\n\n.ui.header:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n   Sub Header\n---------------*/\n\n.ui.header .sub.header {\n  display: block;\n  font-weight: normal;\n  padding: 0em;\n  margin: 0em;\n  font-size: 1rem;\n  line-height: 1.2em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.header > .icon {\n  display: table-cell;\n  opacity: 1;\n  font-size: 1.5em;\n  padding-top: 0.14285em;\n  vertical-align: middle;\n}\n\n/* With Text Node */\n\n.ui.header .icon:only-child {\n  display: inline-block;\n  padding: 0em;\n  margin-right: 0.75rem;\n}\n\n/*-------------------\n        Image\n--------------------*/\n\n.ui.header > .image,\n.ui.header > img {\n  display: inline-block;\n  margin-top: 0.14285em;\n  width: 2.5em;\n  height: auto;\n  vertical-align: middle;\n}\n\n.ui.header > .image:only-child,\n.ui.header > img:only-child {\n  margin-right: 0.75rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.header .content {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* After Image */\n\n.ui.header > img + .content,\n.ui.header > .image + .content {\n  padding-left: 0.75rem;\n  vertical-align: middle;\n}\n\n/* After Icon */\n\n.ui.header > .icon + .content {\n  padding-left: 0.75rem;\n  display: table-cell;\n  vertical-align: middle;\n}\n\n/*--------------\n Loose Coupling\n---------------*/\n\n.ui.header .ui.label {\n  font-size: '';\n  margin-left: 0.5rem;\n  vertical-align: middle;\n}\n\n/* Positioning */\n\n.ui.header + p {\n  margin-top: 0em;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Page\n---------------*/\n\nh1.ui.header {\n  font-size: 2rem;\n}\n\nh2.ui.header {\n  font-size: 1.714rem;\n}\n\nh3.ui.header {\n  font-size: 1.28rem;\n}\n\nh4.ui.header {\n  font-size: 1.071rem;\n}\n\nh5.ui.header {\n  font-size: 1rem;\n}\n\n/* Sub Header */\n\nh1.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\nh2.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\nh3.ui.header .sub.header {\n  font-size: 1rem;\n}\n\nh4.ui.header .sub.header {\n  font-size: 1rem;\n}\n\nh5.ui.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n Content Heading\n---------------*/\n\n.ui.huge.header {\n  min-height: 1em;\n  font-size: 2em;\n}\n\n.ui.large.header {\n  font-size: 1.714em;\n}\n\n.ui.medium.header {\n  font-size: 1.28em;\n}\n\n.ui.small.header {\n  font-size: 1.071em;\n}\n\n.ui.tiny.header {\n  font-size: 1em;\n}\n\n/* Sub Header */\n\n.ui.huge.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.large.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.header .sub.header {\n  font-size: 1rem;\n}\n\n.ui.small.header .sub.header {\n  font-size: 1rem;\n}\n\n.ui.tiny.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n   Sub Heading\n---------------*/\n\n.ui.sub.header {\n  padding: 0em;\n  margin-bottom: 0.14285714rem;\n  font-weight: bold;\n  font-size: 0.85714286em;\n  text-transform: uppercase;\n  color: '';\n}\n\n.ui.small.sub.header {\n  font-size: 0.78571429em;\n}\n\n.ui.sub.header {\n  font-size: 0.85714286em;\n}\n\n.ui.large.sub.header {\n  font-size: 0.92857143em;\n}\n\n.ui.huge.sub.header {\n  font-size: 1em;\n}\n\n/*-------------------\n        Icon\n--------------------*/\n\n.ui.icon.header {\n  display: inline-block;\n  text-align: center;\n  margin: 2rem 0em 1rem;\n}\n\n.ui.icon.header:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.icon.header:first-child {\n  margin-top: 0em;\n}\n\n.ui.icon.header .icon {\n  float: none;\n  display: block;\n  width: auto;\n  height: auto;\n  line-height: 1;\n  padding: 0em;\n  font-size: 3em;\n  margin: 0em auto 0.5rem;\n  opacity: 1;\n}\n\n.ui.icon.header .content {\n  display: block;\n  padding: 0em;\n}\n\n.ui.icon.header .circular.icon {\n  font-size: 2em;\n}\n\n.ui.icon.header .square.icon {\n  font-size: 2em;\n}\n\n.ui.block.icon.header .icon {\n  margin-bottom: 0em;\n}\n\n.ui.icon.header.aligned {\n  margin-left: auto;\n  margin-right: auto;\n  display: block;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.disabled.header {\n  opacity: 0.45;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.header {\n  color: #FFFFFF;\n}\n\n.ui.inverted.header .sub.header {\n  color: rgba(255, 255, 255, 0.8);\n}\n\n.ui.inverted.attached.header {\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  box-shadow: none;\n  border-color: transparent;\n}\n\n.ui.inverted.block.header {\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  box-shadow: none;\n}\n\n.ui.inverted.block.header {\n  border-bottom: none;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n\n.ui.red.header {\n  color: #DB2828 !important;\n}\n\na.ui.red.header:hover {\n  color: #d01919 !important;\n}\n\n.ui.red.dividing.header {\n  border-bottom: 2px solid #DB2828;\n}\n\n/* Inverted */\n\n.ui.inverted.red.header {\n  color: #FF695E !important;\n}\n\na.ui.inverted.red.header:hover {\n  color: #ff5144 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.header {\n  color: #F2711C !important;\n}\n\na.ui.orange.header:hover {\n  color: #f26202 !important;\n}\n\n.ui.orange.dividing.header {\n  border-bottom: 2px solid #F2711C;\n}\n\n/* Inverted */\n\n.ui.inverted.orange.header {\n  color: #FF851B !important;\n}\n\na.ui.inverted.orange.header:hover {\n  color: #ff7701 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.header {\n  color: #B5CC18 !important;\n}\n\na.ui.olive.header:hover {\n  color: #a7bd0d !important;\n}\n\n.ui.olive.dividing.header {\n  border-bottom: 2px solid #B5CC18;\n}\n\n/* Inverted */\n\n.ui.inverted.olive.header {\n  color: #D9E778 !important;\n}\n\na.ui.inverted.olive.header:hover {\n  color: #d8ea5c !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.header {\n  color: #FBBD08 !important;\n}\n\na.ui.yellow.header:hover {\n  color: #eaae00 !important;\n}\n\n.ui.yellow.dividing.header {\n  border-bottom: 2px solid #FBBD08;\n}\n\n/* Inverted */\n\n.ui.inverted.yellow.header {\n  color: #FFE21F !important;\n}\n\na.ui.inverted.yellow.header:hover {\n  color: #ffdf05 !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.header {\n  color: #21BA45 !important;\n}\n\na.ui.green.header:hover {\n  color: #16ab39 !important;\n}\n\n.ui.green.dividing.header {\n  border-bottom: 2px solid #21BA45;\n}\n\n/* Inverted */\n\n.ui.inverted.green.header {\n  color: #2ECC40 !important;\n}\n\na.ui.inverted.green.header:hover {\n  color: #22be34 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.header {\n  color: #00B5AD !important;\n}\n\na.ui.teal.header:hover {\n  color: #009c95 !important;\n}\n\n.ui.teal.dividing.header {\n  border-bottom: 2px solid #00B5AD;\n}\n\n/* Inverted */\n\n.ui.inverted.teal.header {\n  color: #6DFFFF !important;\n}\n\na.ui.inverted.teal.header:hover {\n  color: #54ffff !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.header {\n  color: #2185D0 !important;\n}\n\na.ui.blue.header:hover {\n  color: #1678c2 !important;\n}\n\n.ui.blue.dividing.header {\n  border-bottom: 2px solid #2185D0;\n}\n\n/* Inverted */\n\n.ui.inverted.blue.header {\n  color: #54C8FF !important;\n}\n\na.ui.inverted.blue.header:hover {\n  color: #3ac0ff !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.header {\n  color: #6435C9 !important;\n}\n\na.ui.violet.header:hover {\n  color: #5829bb !important;\n}\n\n.ui.violet.dividing.header {\n  border-bottom: 2px solid #6435C9;\n}\n\n/* Inverted */\n\n.ui.inverted.violet.header {\n  color: #A291FB !important;\n}\n\na.ui.inverted.violet.header:hover {\n  color: #8a73ff !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.header {\n  color: #A333C8 !important;\n}\n\na.ui.purple.header:hover {\n  color: #9627ba !important;\n}\n\n.ui.purple.dividing.header {\n  border-bottom: 2px solid #A333C8;\n}\n\n/* Inverted */\n\n.ui.inverted.purple.header {\n  color: #DC73FF !important;\n}\n\na.ui.inverted.purple.header:hover {\n  color: #d65aff !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.header {\n  color: #E03997 !important;\n}\n\na.ui.pink.header:hover {\n  color: #e61a8d !important;\n}\n\n.ui.pink.dividing.header {\n  border-bottom: 2px solid #E03997;\n}\n\n/* Inverted */\n\n.ui.inverted.pink.header {\n  color: #FF8EDF !important;\n}\n\na.ui.inverted.pink.header:hover {\n  color: #ff74d8 !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.header {\n  color: #A5673F !important;\n}\n\na.ui.brown.header:hover {\n  color: #975b33 !important;\n}\n\n.ui.brown.dividing.header {\n  border-bottom: 2px solid #A5673F;\n}\n\n/* Inverted */\n\n.ui.inverted.brown.header {\n  color: #D67C1C !important;\n}\n\na.ui.inverted.brown.header:hover {\n  color: #c86f11 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.header {\n  color: #767676 !important;\n}\n\na.ui.grey.header:hover {\n  color: #838383 !important;\n}\n\n.ui.grey.dividing.header {\n  border-bottom: 2px solid #767676;\n}\n\n/* Inverted */\n\n.ui.inverted.grey.header {\n  color: #DCDDDE !important;\n}\n\na.ui.inverted.grey.header:hover {\n  color: #cfd0d2 !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.left.aligned.header {\n  text-align: left;\n}\n\n.ui.right.aligned.header {\n  text-align: right;\n}\n\n.ui.centered.header,\n.ui.center.aligned.header {\n  text-align: center;\n}\n\n.ui.justified.header {\n  text-align: justify;\n}\n\n.ui.justified.header:after {\n  display: inline-block;\n  content: '';\n  width: 100%;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.header,\n.ui[class*=\"left floated\"].header {\n  float: left;\n  margin-top: 0em;\n  margin-right: 0.5em;\n}\n\n.ui[class*=\"right floated\"].header {\n  float: right;\n  margin-top: 0em;\n  margin-left: 0.5em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.header {\n  padding: 0em;\n}\n\n/*-------------------\n      Dividing\n--------------------*/\n\n.ui.dividing.header {\n  padding-bottom: 0.21428571rem;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.dividing.header .sub.header {\n  padding-bottom: 0.21428571rem;\n}\n\n.ui.dividing.header .icon {\n  margin-bottom: 0em;\n}\n\n.ui.inverted.dividing.header {\n  border-bottom-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Block\n--------------------*/\n\n.ui.block.header {\n  background: #F3F4F5;\n  padding: 0.78571429rem 1rem;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n  border-radius: 0.28571429rem;\n}\n\n.ui.tiny.block.header {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.block.header {\n  font-size: 0.92857143rem;\n}\n\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1rem;\n}\n\n.ui.large.block.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.block.header {\n  font-size: 1.42857143rem;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n.ui.attached.header {\n  background: #FFFFFF;\n  padding: 0.78571429rem 1rem;\n  margin-left: -1px;\n  margin-right: -1px;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached.block.header {\n  background: #F3F4F5;\n}\n\n.ui.attached:not(.top):not(.bottom).header {\n  margin-top: 0em;\n  margin-bottom: 0em;\n  border-top: none;\n  border-radius: 0em;\n}\n\n.ui.top.attached.header {\n  margin-bottom: 0em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.bottom.attached.header {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Attached Sizes */\n\n.ui.tiny.attached.header {\n  font-size: 0.85714286em;\n}\n\n.ui.small.attached.header {\n  font-size: 0.92857143em;\n}\n\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1em;\n}\n\n.ui.large.attached.header {\n  font-size: 1.14285714em;\n}\n\n.ui.huge.attached.header {\n  font-size: 1.42857143em;\n}\n\n/*-------------------\n        Sizing\n--------------------*/\n\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1.28em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Icon\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Icon\n*******************************/\n\n@font-face {\n  font-family: 'Icons';\n  src: url(\"./themes/default/assets/fonts/icons.eot\");\n  src: url(\"./themes/default/assets/fonts/icons.eot?#iefix\") format('embedded-opentype'), url(\"./themes/default/assets/fonts/icons.woff2\") format('woff2'), url(\"./themes/default/assets/fonts/icons.woff\") format('woff'), url(\"./themes/default/assets/fonts/icons.ttf\") format('truetype'), url(\"./themes/default/assets/fonts/icons.svg#icons\") format('svg');\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-transform: none;\n}\n\ni.icon {\n  display: inline-block;\n  opacity: 1;\n  margin: 0em 0.25rem 0em 0em;\n  width: 1.18em;\n  height: 1em;\n  font-family: 'Icons';\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  text-align: center;\n  speak: none;\n  font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\ni.icon:before {\n  background: none !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\ni.icon.loading {\n  height: 1em;\n  line-height: 1;\n  -webkit-animation: icon-loading 2s linear infinite;\n  animation: icon-loading 2s linear infinite;\n}\n\n@-webkit-keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\ni.icon.hover {\n  opacity: 1 !important;\n}\n\ni.icon.active {\n  opacity: 1 !important;\n}\n\ni.emphasized.icon {\n  opacity: 1 !important;\n}\n\ni.disabled.icon {\n  opacity: 0.45 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n        Fitted\n--------------------*/\n\ni.fitted.icon {\n  width: auto;\n  margin: 0em;\n}\n\n/*-------------------\n         Link\n--------------------*/\n\ni.link.icon,\ni.link.icons {\n  cursor: pointer;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\ni.link.icon:hover,\ni.link.icons:hover {\n  opacity: 1 !important;\n}\n\n/*-------------------\n      Circular\n--------------------*/\n\ni.circular.icon {\n  border-radius: 500em !important;\n  line-height: 1 !important;\n  padding: 0.5em 0.5em !important;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  width: 2em !important;\n  height: 2em !important;\n}\n\ni.circular.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Flipped\n--------------------*/\n\ni.flipped.icon,\ni.horizontally.flipped.icon {\n  -webkit-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n\ni.vertically.flipped.icon {\n  -webkit-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n\n/*-------------------\n      Rotated\n--------------------*/\n\ni.rotated.icon,\ni.right.rotated.icon,\ni.clockwise.rotated.icon {\n  -webkit-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\ni.left.rotated.icon,\ni.counterclockwise.rotated.icon {\n  -webkit-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n\n/*-------------------\n      Bordered\n--------------------*/\n\ni.bordered.icon {\n  line-height: 1;\n  vertical-align: baseline;\n  width: 2em;\n  height: 2em;\n  padding: 0.5em 0.41em !important;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n}\n\ni.bordered.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n/* Inverted Shapes */\n\ni.inverted.bordered.icon,\ni.inverted.circular.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\ni.inverted.icon {\n  color: #FFFFFF;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\ni.red.icon {\n  color: #DB2828 !important;\n}\n\ni.inverted.red.icon {\n  color: #FF695E !important;\n}\n\ni.inverted.bordered.red.icon,\ni.inverted.circular.red.icon {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n\ni.orange.icon {\n  color: #F2711C !important;\n}\n\ni.inverted.orange.icon {\n  color: #FF851B !important;\n}\n\ni.inverted.bordered.orange.icon,\ni.inverted.circular.orange.icon {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n\ni.yellow.icon {\n  color: #FBBD08 !important;\n}\n\ni.inverted.yellow.icon {\n  color: #FFE21F !important;\n}\n\ni.inverted.bordered.yellow.icon,\ni.inverted.circular.yellow.icon {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n\ni.olive.icon {\n  color: #B5CC18 !important;\n}\n\ni.inverted.olive.icon {\n  color: #D9E778 !important;\n}\n\ni.inverted.bordered.olive.icon,\ni.inverted.circular.olive.icon {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n\ni.green.icon {\n  color: #21BA45 !important;\n}\n\ni.inverted.green.icon {\n  color: #2ECC40 !important;\n}\n\ni.inverted.bordered.green.icon,\ni.inverted.circular.green.icon {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n\ni.teal.icon {\n  color: #00B5AD !important;\n}\n\ni.inverted.teal.icon {\n  color: #6DFFFF !important;\n}\n\ni.inverted.bordered.teal.icon,\ni.inverted.circular.teal.icon {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n\ni.blue.icon {\n  color: #2185D0 !important;\n}\n\ni.inverted.blue.icon {\n  color: #54C8FF !important;\n}\n\ni.inverted.bordered.blue.icon,\ni.inverted.circular.blue.icon {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n\ni.violet.icon {\n  color: #6435C9 !important;\n}\n\ni.inverted.violet.icon {\n  color: #A291FB !important;\n}\n\ni.inverted.bordered.violet.icon,\ni.inverted.circular.violet.icon {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n\ni.purple.icon {\n  color: #A333C8 !important;\n}\n\ni.inverted.purple.icon {\n  color: #DC73FF !important;\n}\n\ni.inverted.bordered.purple.icon,\ni.inverted.circular.purple.icon {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n\ni.pink.icon {\n  color: #E03997 !important;\n}\n\ni.inverted.pink.icon {\n  color: #FF8EDF !important;\n}\n\ni.inverted.bordered.pink.icon,\ni.inverted.circular.pink.icon {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n\ni.brown.icon {\n  color: #A5673F !important;\n}\n\ni.inverted.brown.icon {\n  color: #D67C1C !important;\n}\n\ni.inverted.bordered.brown.icon,\ni.inverted.circular.brown.icon {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n\ni.grey.icon {\n  color: #767676 !important;\n}\n\ni.inverted.grey.icon {\n  color: #DCDDDE !important;\n}\n\ni.inverted.bordered.grey.icon,\ni.inverted.circular.grey.icon {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n\ni.black.icon {\n  color: #1B1C1D !important;\n}\n\ni.inverted.black.icon {\n  color: #545454 !important;\n}\n\ni.inverted.bordered.black.icon,\ni.inverted.circular.black.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\ni.mini.icon,\ni.mini.icons {\n  line-height: 1;\n  font-size: 0.4em;\n}\n\ni.tiny.icon,\ni.tiny.icons {\n  line-height: 1;\n  font-size: 0.5em;\n}\n\ni.small.icon,\ni.small.icons {\n  line-height: 1;\n  font-size: 0.75em;\n}\n\ni.icon,\ni.icons {\n  font-size: 1em;\n}\n\ni.large.icon,\ni.large.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 1.5em;\n}\n\ni.big.icon,\ni.big.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\ni.huge.icon,\ni.huge.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 4em;\n}\n\ni.massive.icon,\ni.massive.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 8em;\n}\n\n/*******************************\n            Groups\n*******************************/\n\ni.icons {\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\n\ni.icons .icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  margin: 0em;\n  margin: 0;\n}\n\ni.icons .icon:first-child {\n  position: static;\n  width: auto;\n  height: auto;\n  vertical-align: top;\n  -webkit-transform: none;\n  transform: none;\n  margin-right: 0.25rem;\n}\n\n/* Corner Icon */\n\ni.icons .corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n  -webkit-transform: none;\n  transform: none;\n  font-size: 0.45em;\n  text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF;\n}\n\ni.icons .inverted.corner.icon {\n  text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D;\n}\n\n/*\n * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n/*******************************\n\nSemantic-UI integration of font-awesome :\n\n///class names are separated\ni.icon.circle => i.icon.circle\ni.icon.circle-o => i.icon.circle.outline\n\n//abbreviation are replaced by full letters:\ni.icon.ellipsis-h => i.icon.ellipsis.horizontal\ni.icon.ellipsis-v => i.icon.ellipsis.vertical\n.alpha => .i.icon.alphabet\n.asc => .i.icon.ascending\n.desc => .i.icon.descending\n.alt =>.alternate\n\nASCII order is conserved for easier maintenance.\n\nIcons that only have one style 'outline', 'square' etc do not require this class\nfor instance `lemon icon` not `lemon outline icon` since there is only one lemon\n\n*******************************/\n\n/*******************************\n            Icons\n*******************************/\n\n/* Web Content */\n\ni.icon.search:before {\n  content: \"\\f002\";\n}\n\ni.icon.mail.outline:before {\n  content: \"\\f003\";\n}\n\ni.icon.signal:before {\n  content: \"\\f012\";\n}\n\ni.icon.setting:before {\n  content: \"\\f013\";\n}\n\ni.icon.home:before {\n  content: \"\\f015\";\n}\n\ni.icon.inbox:before {\n  content: \"\\f01c\";\n}\n\ni.icon.browser:before {\n  content: \"\\f022\";\n}\n\ni.icon.tag:before {\n  content: \"\\f02b\";\n}\n\ni.icon.tags:before {\n  content: \"\\f02c\";\n}\n\ni.icon.image:before {\n  content: \"\\f03e\";\n}\n\ni.icon.calendar:before {\n  content: \"\\f073\";\n}\n\ni.icon.comment:before {\n  content: \"\\f075\";\n}\n\ni.icon.shop:before {\n  content: \"\\f07a\";\n}\n\ni.icon.comments:before {\n  content: \"\\f086\";\n}\n\ni.icon.external:before {\n  content: \"\\f08e\";\n}\n\ni.icon.privacy:before {\n  content: \"\\f084\";\n}\n\ni.icon.settings:before {\n  content: \"\\f085\";\n}\n\ni.icon.comments:before {\n  content: \"\\f086\";\n}\n\ni.icon.external:before {\n  content: \"\\f08e\";\n}\n\ni.icon.trophy:before {\n  content: \"\\f091\";\n}\n\ni.icon.payment:before {\n  content: \"\\f09d\";\n}\n\ni.icon.feed:before {\n  content: \"\\f09e\";\n}\n\ni.icon.alarm.outline:before {\n  content: \"\\f0a2\";\n}\n\ni.icon.tasks:before {\n  content: \"\\f0ae\";\n}\n\ni.icon.cloud:before {\n  content: \"\\f0c2\";\n}\n\ni.icon.lab:before {\n  content: \"\\f0c3\";\n}\n\ni.icon.mail:before {\n  content: \"\\f0e0\";\n}\n\ni.icon.dashboard:before {\n  content: \"\\f0e4\";\n}\n\ni.icon.comment.outline:before {\n  content: \"\\f0e5\";\n}\n\ni.icon.comments.outline:before {\n  content: \"\\f0e6\";\n}\n\ni.icon.sitemap:before {\n  content: \"\\f0e8\";\n}\n\ni.icon.idea:before {\n  content: \"\\f0eb\";\n}\n\ni.icon.alarm:before {\n  content: \"\\f0f3\";\n}\n\ni.icon.terminal:before {\n  content: \"\\f120\";\n}\n\ni.icon.code:before {\n  content: \"\\f121\";\n}\n\ni.icon.protect:before {\n  content: \"\\f132\";\n}\n\ni.icon.calendar.outline:before {\n  content: \"\\f133\";\n}\n\ni.icon.ticket:before {\n  content: \"\\f145\";\n}\n\ni.icon.external.square:before {\n  content: \"\\f14c\";\n}\n\ni.icon.bug:before {\n  content: \"\\f188\";\n}\n\ni.icon.mail.square:before {\n  content: \"\\f199\";\n}\n\ni.icon.history:before {\n  content: \"\\f1da\";\n}\n\ni.icon.options:before {\n  content: \"\\f1de\";\n}\n\ni.icon.text.telephone:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.find:before {\n  content: \"\\f1e5\";\n}\n\ni.icon.wifi:before {\n  content: \"\\f1eb\";\n}\n\ni.icon.alarm.mute:before {\n  content: \"\\f1f6\";\n}\n\ni.icon.alarm.mute.outline:before {\n  content: \"\\f1f7\";\n}\n\ni.icon.copyright:before {\n  content: \"\\f1f9\";\n}\n\ni.icon.at:before {\n  content: \"\\f1fa\";\n}\n\ni.icon.eyedropper:before {\n  content: \"\\f1fb\";\n}\n\ni.icon.paint.brush:before {\n  content: \"\\f1fc\";\n}\n\ni.icon.heartbeat:before {\n  content: \"\\f21e\";\n}\n\ni.icon.mouse.pointer:before {\n  content: \"\\f245\";\n}\n\ni.icon.hourglass.empty:before {\n  content: \"\\f250\";\n}\n\ni.icon.hourglass.start:before {\n  content: \"\\f251\";\n}\n\ni.icon.hourglass.half:before {\n  content: \"\\f252\";\n}\n\ni.icon.hourglass.end:before {\n  content: \"\\f253\";\n}\n\ni.icon.hourglass.full:before {\n  content: \"\\f254\";\n}\n\ni.icon.hand.pointer:before {\n  content: \"\\f25a\";\n}\n\ni.icon.trademark:before {\n  content: \"\\f25c\";\n}\n\ni.icon.registered:before {\n  content: \"\\f25d\";\n}\n\ni.icon.creative.commons:before {\n  content: \"\\f25e\";\n}\n\ni.icon.add.to.calendar:before {\n  content: \"\\f271\";\n}\n\ni.icon.remove.from.calendar:before {\n  content: \"\\f272\";\n}\n\ni.icon.delete.calendar:before {\n  content: \"\\f273\";\n}\n\ni.icon.checked.calendar:before {\n  content: \"\\f274\";\n}\n\ni.icon.industry:before {\n  content: \"\\f275\";\n}\n\ni.icon.shopping.bag:before {\n  content: \"\\f290\";\n}\n\ni.icon.shopping.basket:before {\n  content: \"\\f291\";\n}\n\ni.icon.hashtag:before {\n  content: \"\\f292\";\n}\n\ni.icon.percent:before {\n  content: \"\\f295\";\n}\n\n/* User Actions */\n\ni.icon.wait:before {\n  content: \"\\f017\";\n}\n\ni.icon.download:before {\n  content: \"\\f019\";\n}\n\ni.icon.repeat:before {\n  content: \"\\f01e\";\n}\n\ni.icon.refresh:before {\n  content: \"\\f021\";\n}\n\ni.icon.lock:before {\n  content: \"\\f023\";\n}\n\ni.icon.bookmark:before {\n  content: \"\\f02e\";\n}\n\ni.icon.print:before {\n  content: \"\\f02f\";\n}\n\ni.icon.write:before {\n  content: \"\\f040\";\n}\n\ni.icon.adjust:before {\n  content: \"\\f042\";\n}\n\ni.icon.theme:before {\n  content: \"\\f043\";\n}\n\ni.icon.edit:before {\n  content: \"\\f044\";\n}\n\ni.icon.external.share:before {\n  content: \"\\f045\";\n}\n\ni.icon.ban:before {\n  content: \"\\f05e\";\n}\n\ni.icon.mail.forward:before {\n  content: \"\\f064\";\n}\n\ni.icon.share:before {\n  content: \"\\f064\";\n}\n\ni.icon.expand:before {\n  content: \"\\f065\";\n}\n\ni.icon.compress:before {\n  content: \"\\f066\";\n}\n\ni.icon.unhide:before {\n  content: \"\\f06e\";\n}\n\ni.icon.hide:before {\n  content: \"\\f070\";\n}\n\ni.icon.random:before {\n  content: \"\\f074\";\n}\n\ni.icon.retweet:before {\n  content: \"\\f079\";\n}\n\ni.icon.sign.out:before {\n  content: \"\\f08b\";\n}\n\ni.icon.pin:before {\n  content: \"\\f08d\";\n}\n\ni.icon.sign.in:before {\n  content: \"\\f090\";\n}\n\ni.icon.upload:before {\n  content: \"\\f093\";\n}\n\ni.icon.call:before {\n  content: \"\\f095\";\n}\n\ni.icon.remove.bookmark:before {\n  content: \"\\f097\";\n}\n\ni.icon.call.square:before {\n  content: \"\\f098\";\n}\n\ni.icon.unlock:before {\n  content: \"\\f09c\";\n}\n\ni.icon.configure:before {\n  content: \"\\f0ad\";\n}\n\ni.icon.filter:before {\n  content: \"\\f0b0\";\n}\n\ni.icon.wizard:before {\n  content: \"\\f0d0\";\n}\n\ni.icon.undo:before {\n  content: \"\\f0e2\";\n}\n\ni.icon.exchange:before {\n  content: \"\\f0ec\";\n}\n\ni.icon.cloud.download:before {\n  content: \"\\f0ed\";\n}\n\ni.icon.cloud.upload:before {\n  content: \"\\f0ee\";\n}\n\ni.icon.reply:before {\n  content: \"\\f112\";\n}\n\ni.icon.reply.all:before {\n  content: \"\\f122\";\n}\n\ni.icon.erase:before {\n  content: \"\\f12d\";\n}\n\ni.icon.unlock.alternate:before {\n  content: \"\\f13e\";\n}\n\ni.icon.write.square:before {\n  content: \"\\f14b\";\n}\n\ni.icon.share.square:before {\n  content: \"\\f14d\";\n}\n\ni.icon.archive:before {\n  content: \"\\f187\";\n}\n\ni.icon.translate:before {\n  content: \"\\f1ab\";\n}\n\ni.icon.recycle:before {\n  content: \"\\f1b8\";\n}\n\ni.icon.send:before {\n  content: \"\\f1d8\";\n}\n\ni.icon.send.outline:before {\n  content: \"\\f1d9\";\n}\n\ni.icon.share.alternate:before {\n  content: \"\\f1e0\";\n}\n\ni.icon.share.alternate.square:before {\n  content: \"\\f1e1\";\n}\n\ni.icon.add.to.cart:before {\n  content: \"\\f217\";\n}\n\ni.icon.in.cart:before {\n  content: \"\\f218\";\n}\n\ni.icon.add.user:before {\n  content: \"\\f234\";\n}\n\ni.icon.remove.user:before {\n  content: \"\\f235\";\n}\n\ni.icon.object.group:before {\n  content: \"\\f247\";\n}\n\ni.icon.object.ungroup:before {\n  content: \"\\f248\";\n}\n\ni.icon.clone:before {\n  content: \"\\f24d\";\n}\n\ni.icon.talk:before {\n  content: \"\\f27a\";\n}\n\ni.icon.talk.outline:before {\n  content: \"\\f27b\";\n}\n\n/* Messages */\n\ni.icon.help.circle:before {\n  content: \"\\f059\";\n}\n\ni.icon.info.circle:before {\n  content: \"\\f05a\";\n}\n\ni.icon.warning.circle:before {\n  content: \"\\f06a\";\n}\n\ni.icon.warning.sign:before {\n  content: \"\\f071\";\n}\n\ni.icon.announcement:before {\n  content: \"\\f0a1\";\n}\n\ni.icon.help:before {\n  content: \"\\f128\";\n}\n\ni.icon.info:before {\n  content: \"\\f129\";\n}\n\ni.icon.warning:before {\n  content: \"\\f12a\";\n}\n\ni.icon.birthday:before {\n  content: \"\\f1fd\";\n}\n\ni.icon.help.circle.outline:before {\n  content: \"\\f29c\";\n}\n\n/* Users */\n\ni.icon.user:before {\n  content: \"\\f007\";\n}\n\ni.icon.users:before {\n  content: \"\\f0c0\";\n}\n\ni.icon.doctor:before {\n  content: \"\\f0f0\";\n}\n\ni.icon.handicap:before {\n  content: \"\\f193\";\n}\n\ni.icon.student:before {\n  content: \"\\f19d\";\n}\n\ni.icon.child:before {\n  content: \"\\f1ae\";\n}\n\ni.icon.spy:before {\n  content: \"\\f21b\";\n}\n\n/* Gender & Sexuality */\n\ni.icon.female:before {\n  content: \"\\f182\";\n}\n\ni.icon.male:before {\n  content: \"\\f183\";\n}\n\ni.icon.woman:before {\n  content: \"\\f221\";\n}\n\ni.icon.man:before {\n  content: \"\\f222\";\n}\n\ni.icon.non.binary.transgender:before {\n  content: \"\\f223\";\n}\n\ni.icon.intergender:before {\n  content: \"\\f224\";\n}\n\ni.icon.transgender:before {\n  content: \"\\f225\";\n}\n\ni.icon.lesbian:before {\n  content: \"\\f226\";\n}\n\ni.icon.gay:before {\n  content: \"\\f227\";\n}\n\ni.icon.heterosexual:before {\n  content: \"\\f228\";\n}\n\ni.icon.other.gender:before {\n  content: \"\\f229\";\n}\n\ni.icon.other.gender.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.other.gender.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.neuter:before {\n  content: \"\\f22c\";\n}\n\ni.icon.genderless:before {\n  content: \"\\f22d\";\n}\n\n/* Accessibility */\n\ni.icon.universal.access:before {\n  content: \"\\f29a\";\n}\n\ni.icon.wheelchair:before {\n  content: \"\\f29b\";\n}\n\ni.icon.blind:before {\n  content: \"\\f29d\";\n}\n\ni.icon.audio.description:before {\n  content: \"\\f29e\";\n}\n\ni.icon.volume.control.phone:before {\n  content: \"\\f2a0\";\n}\n\ni.icon.braille:before {\n  content: \"\\f2a1\";\n}\n\ni.icon.asl:before {\n  content: \"\\f2a3\";\n}\n\ni.icon.assistive.listening.systems:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.deafness:before {\n  content: \"\\f2a4\";\n}\n\ni.icon.sign.language:before {\n  content: \"\\f2a7\";\n}\n\ni.icon.low.vision:before {\n  content: \"\\f2a8\";\n}\n\n/* View Adjustment */\n\ni.icon.block.layout:before {\n  content: \"\\f009\";\n}\n\ni.icon.grid.layout:before {\n  content: \"\\f00a\";\n}\n\ni.icon.list.layout:before {\n  content: \"\\f00b\";\n}\n\ni.icon.zoom:before {\n  content: \"\\f00e\";\n}\n\ni.icon.zoom.out:before {\n  content: \"\\f010\";\n}\n\ni.icon.resize.vertical:before {\n  content: \"\\f07d\";\n}\n\ni.icon.resize.horizontal:before {\n  content: \"\\f07e\";\n}\n\ni.icon.maximize:before {\n  content: \"\\f0b2\";\n}\n\ni.icon.crop:before {\n  content: \"\\f125\";\n}\n\n/* Literal Objects */\n\ni.icon.cocktail:before {\n  content: \"\\f000\";\n}\n\ni.icon.road:before {\n  content: \"\\f018\";\n}\n\ni.icon.flag:before {\n  content: \"\\f024\";\n}\n\ni.icon.book:before {\n  content: \"\\f02d\";\n}\n\ni.icon.gift:before {\n  content: \"\\f06b\";\n}\n\ni.icon.leaf:before {\n  content: \"\\f06c\";\n}\n\ni.icon.fire:before {\n  content: \"\\f06d\";\n}\n\ni.icon.plane:before {\n  content: \"\\f072\";\n}\n\ni.icon.magnet:before {\n  content: \"\\f076\";\n}\n\ni.icon.lemon:before {\n  content: \"\\f094\";\n}\n\ni.icon.world:before {\n  content: \"\\f0ac\";\n}\n\ni.icon.travel:before {\n  content: \"\\f0b1\";\n}\n\ni.icon.shipping:before {\n  content: \"\\f0d1\";\n}\n\ni.icon.money:before {\n  content: \"\\f0d6\";\n}\n\ni.icon.legal:before {\n  content: \"\\f0e3\";\n}\n\ni.icon.lightning:before {\n  content: \"\\f0e7\";\n}\n\ni.icon.umbrella:before {\n  content: \"\\f0e9\";\n}\n\ni.icon.treatment:before {\n  content: \"\\f0f1\";\n}\n\ni.icon.suitcase:before {\n  content: \"\\f0f2\";\n}\n\ni.icon.bar:before {\n  content: \"\\f0fc\";\n}\n\ni.icon.flag.outline:before {\n  content: \"\\f11d\";\n}\n\ni.icon.flag.checkered:before {\n  content: \"\\f11e\";\n}\n\ni.icon.puzzle:before {\n  content: \"\\f12e\";\n}\n\ni.icon.fire.extinguisher:before {\n  content: \"\\f134\";\n}\n\ni.icon.rocket:before {\n  content: \"\\f135\";\n}\n\ni.icon.anchor:before {\n  content: \"\\f13d\";\n}\n\ni.icon.bullseye:before {\n  content: \"\\f140\";\n}\n\ni.icon.sun:before {\n  content: \"\\f185\";\n}\n\ni.icon.moon:before {\n  content: \"\\f186\";\n}\n\ni.icon.fax:before {\n  content: \"\\f1ac\";\n}\n\ni.icon.life.ring:before {\n  content: \"\\f1cd\";\n}\n\ni.icon.bomb:before {\n  content: \"\\f1e2\";\n}\n\ni.icon.soccer:before {\n  content: \"\\f1e3\";\n}\n\ni.icon.calculator:before {\n  content: \"\\f1ec\";\n}\n\ni.icon.diamond:before {\n  content: \"\\f219\";\n}\n\ni.icon.sticky.note:before {\n  content: \"\\f249\";\n}\n\ni.icon.sticky.note.outline:before {\n  content: \"\\f24a\";\n}\n\ni.icon.law:before {\n  content: \"\\f24e\";\n}\n\ni.icon.hand.peace:before {\n  content: \"\\f25b\";\n}\n\ni.icon.hand.rock:before {\n  content: \"\\f255\";\n}\n\ni.icon.hand.paper:before {\n  content: \"\\f256\";\n}\n\ni.icon.hand.scissors:before {\n  content: \"\\f257\";\n}\n\ni.icon.hand.lizard:before {\n  content: \"\\f258\";\n}\n\ni.icon.hand.spock:before {\n  content: \"\\f259\";\n}\n\ni.icon.tv:before {\n  content: \"\\f26c\";\n}\n\n/* Shapes */\n\ni.icon.crosshairs:before {\n  content: \"\\f05b\";\n}\n\ni.icon.asterisk:before {\n  content: \"\\f069\";\n}\n\ni.icon.square.outline:before {\n  content: \"\\f096\";\n}\n\ni.icon.certificate:before {\n  content: \"\\f0a3\";\n}\n\ni.icon.square:before {\n  content: \"\\f0c8\";\n}\n\ni.icon.quote.left:before {\n  content: \"\\f10d\";\n}\n\ni.icon.quote.right:before {\n  content: \"\\f10e\";\n}\n\ni.icon.spinner:before {\n  content: \"\\f110\";\n}\n\ni.icon.circle:before {\n  content: \"\\f111\";\n}\n\ni.icon.ellipsis.horizontal:before {\n  content: \"\\f141\";\n}\n\ni.icon.ellipsis.vertical:before {\n  content: \"\\f142\";\n}\n\ni.icon.cube:before {\n  content: \"\\f1b2\";\n}\n\ni.icon.cubes:before {\n  content: \"\\f1b3\";\n}\n\ni.icon.circle.notched:before {\n  content: \"\\f1ce\";\n}\n\ni.icon.circle.thin:before {\n  content: \"\\f1db\";\n}\n\n/* Item Selection */\n\ni.icon.checkmark:before {\n  content: \"\\f00c\";\n}\n\ni.icon.remove:before {\n  content: \"\\f00d\";\n}\n\ni.icon.checkmark.box:before {\n  content: \"\\f046\";\n}\n\ni.icon.move:before {\n  content: \"\\f047\";\n}\n\ni.icon.add.circle:before {\n  content: \"\\f055\";\n}\n\ni.icon.minus.circle:before {\n  content: \"\\f056\";\n}\n\ni.icon.remove.circle:before {\n  content: \"\\f057\";\n}\n\ni.icon.check.circle:before {\n  content: \"\\f058\";\n}\n\ni.icon.remove.circle.outline:before {\n  content: \"\\f05c\";\n}\n\ni.icon.check.circle.outline:before {\n  content: \"\\f05d\";\n}\n\ni.icon.plus:before {\n  content: \"\\f067\";\n}\n\ni.icon.minus:before {\n  content: \"\\f068\";\n}\n\ni.icon.add.square:before {\n  content: \"\\f0fe\";\n}\n\ni.icon.radio:before {\n  content: \"\\f10c\";\n}\n\ni.icon.minus.square:before {\n  content: \"\\f146\";\n}\n\ni.icon.minus.square.outline:before {\n  content: \"\\f147\";\n}\n\ni.icon.check.square:before {\n  content: \"\\f14a\";\n}\n\ni.icon.selected.radio:before {\n  content: \"\\f192\";\n}\n\ni.icon.plus.square.outline:before {\n  content: \"\\f196\";\n}\n\ni.icon.toggle.off:before {\n  content: \"\\f204\";\n}\n\ni.icon.toggle.on:before {\n  content: \"\\f205\";\n}\n\n/* Media */\n\ni.icon.film:before {\n  content: \"\\f008\";\n}\n\ni.icon.sound:before {\n  content: \"\\f025\";\n}\n\ni.icon.photo:before {\n  content: \"\\f030\";\n}\n\ni.icon.bar.chart:before {\n  content: \"\\f080\";\n}\n\ni.icon.camera.retro:before {\n  content: \"\\f083\";\n}\n\ni.icon.newspaper:before {\n  content: \"\\f1ea\";\n}\n\ni.icon.area.chart:before {\n  content: \"\\f1fe\";\n}\n\ni.icon.pie.chart:before {\n  content: \"\\f200\";\n}\n\ni.icon.line.chart:before {\n  content: \"\\f201\";\n}\n\n/* Pointers */\n\ni.icon.arrow.circle.outline.down:before {\n  content: \"\\f01a\";\n}\n\ni.icon.arrow.circle.outline.up:before {\n  content: \"\\f01b\";\n}\n\ni.icon.chevron.left:before {\n  content: \"\\f053\";\n}\n\ni.icon.chevron.right:before {\n  content: \"\\f054\";\n}\n\ni.icon.arrow.left:before {\n  content: \"\\f060\";\n}\n\ni.icon.arrow.right:before {\n  content: \"\\f061\";\n}\n\ni.icon.arrow.up:before {\n  content: \"\\f062\";\n}\n\ni.icon.arrow.down:before {\n  content: \"\\f063\";\n}\n\ni.icon.chevron.up:before {\n  content: \"\\f077\";\n}\n\ni.icon.chevron.down:before {\n  content: \"\\f078\";\n}\n\ni.icon.pointing.right:before {\n  content: \"\\f0a4\";\n}\n\ni.icon.pointing.left:before {\n  content: \"\\f0a5\";\n}\n\ni.icon.pointing.up:before {\n  content: \"\\f0a6\";\n}\n\ni.icon.pointing.down:before {\n  content: \"\\f0a7\";\n}\n\ni.icon.arrow.circle.left:before {\n  content: \"\\f0a8\";\n}\n\ni.icon.arrow.circle.right:before {\n  content: \"\\f0a9\";\n}\n\ni.icon.arrow.circle.up:before {\n  content: \"\\f0aa\";\n}\n\ni.icon.arrow.circle.down:before {\n  content: \"\\f0ab\";\n}\n\ni.icon.caret.down:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.caret.up:before {\n  content: \"\\f0d8\";\n}\n\ni.icon.caret.left:before {\n  content: \"\\f0d9\";\n}\n\ni.icon.caret.right:before {\n  content: \"\\f0da\";\n}\n\ni.icon.angle.double.left:before {\n  content: \"\\f100\";\n}\n\ni.icon.angle.double.right:before {\n  content: \"\\f101\";\n}\n\ni.icon.angle.double.up:before {\n  content: \"\\f102\";\n}\n\ni.icon.angle.double.down:before {\n  content: \"\\f103\";\n}\n\ni.icon.angle.left:before {\n  content: \"\\f104\";\n}\n\ni.icon.angle.right:before {\n  content: \"\\f105\";\n}\n\ni.icon.angle.up:before {\n  content: \"\\f106\";\n}\n\ni.icon.angle.down:before {\n  content: \"\\f107\";\n}\n\ni.icon.chevron.circle.left:before {\n  content: \"\\f137\";\n}\n\ni.icon.chevron.circle.right:before {\n  content: \"\\f138\";\n}\n\ni.icon.chevron.circle.up:before {\n  content: \"\\f139\";\n}\n\ni.icon.chevron.circle.down:before {\n  content: \"\\f13a\";\n}\n\ni.icon.toggle.down:before {\n  content: \"\\f150\";\n}\n\ni.icon.toggle.up:before {\n  content: \"\\f151\";\n}\n\ni.icon.toggle.right:before {\n  content: \"\\f152\";\n}\n\ni.icon.long.arrow.down:before {\n  content: \"\\f175\";\n}\n\ni.icon.long.arrow.up:before {\n  content: \"\\f176\";\n}\n\ni.icon.long.arrow.left:before {\n  content: \"\\f177\";\n}\n\ni.icon.long.arrow.right:before {\n  content: \"\\f178\";\n}\n\ni.icon.arrow.circle.outline.right:before {\n  content: \"\\f18e\";\n}\n\ni.icon.arrow.circle.outline.left:before {\n  content: \"\\f190\";\n}\n\ni.icon.toggle.left:before {\n  content: \"\\f191\";\n}\n\n/* Mobile */\n\ni.icon.tablet:before {\n  content: \"\\f10a\";\n}\n\ni.icon.mobile:before {\n  content: \"\\f10b\";\n}\n\ni.icon.battery.full:before {\n  content: \"\\f240\";\n}\n\ni.icon.battery.high:before {\n  content: \"\\f241\";\n}\n\ni.icon.battery.medium:before {\n  content: \"\\f242\";\n}\n\ni.icon.battery.low:before {\n  content: \"\\f243\";\n}\n\ni.icon.battery.empty:before {\n  content: \"\\f244\";\n}\n\n/* Computer */\n\ni.icon.power:before {\n  content: \"\\f011\";\n}\n\ni.icon.trash.outline:before {\n  content: \"\\f014\";\n}\n\ni.icon.disk.outline:before {\n  content: \"\\f0a0\";\n}\n\ni.icon.desktop:before {\n  content: \"\\f108\";\n}\n\ni.icon.laptop:before {\n  content: \"\\f109\";\n}\n\ni.icon.game:before {\n  content: \"\\f11b\";\n}\n\ni.icon.keyboard:before {\n  content: \"\\f11c\";\n}\n\ni.icon.plug:before {\n  content: \"\\f1e6\";\n}\n\n/* File System */\n\ni.icon.trash:before {\n  content: \"\\f1f8\";\n}\n\ni.icon.file.outline:before {\n  content: \"\\f016\";\n}\n\ni.icon.folder:before {\n  content: \"\\f07b\";\n}\n\ni.icon.folder.open:before {\n  content: \"\\f07c\";\n}\n\ni.icon.file.text.outline:before {\n  content: \"\\f0f6\";\n}\n\ni.icon.folder.outline:before {\n  content: \"\\f114\";\n}\n\ni.icon.folder.open.outline:before {\n  content: \"\\f115\";\n}\n\ni.icon.level.up:before {\n  content: \"\\f148\";\n}\n\ni.icon.level.down:before {\n  content: \"\\f149\";\n}\n\ni.icon.file:before {\n  content: \"\\f15b\";\n}\n\ni.icon.file.text:before {\n  content: \"\\f15c\";\n}\n\ni.icon.file.pdf.outline:before {\n  content: \"\\f1c1\";\n}\n\ni.icon.file.word.outline:before {\n  content: \"\\f1c2\";\n}\n\ni.icon.file.excel.outline:before {\n  content: \"\\f1c3\";\n}\n\ni.icon.file.powerpoint.outline:before {\n  content: \"\\f1c4\";\n}\n\ni.icon.file.image.outline:before {\n  content: \"\\f1c5\";\n}\n\ni.icon.file.archive.outline:before {\n  content: \"\\f1c6\";\n}\n\ni.icon.file.audio.outline:before {\n  content: \"\\f1c7\";\n}\n\ni.icon.file.video.outline:before {\n  content: \"\\f1c8\";\n}\n\ni.icon.file.code.outline:before {\n  content: \"\\f1c9\";\n}\n\n/* Technologies */\n\ni.icon.qrcode:before {\n  content: \"\\f029\";\n}\n\ni.icon.barcode:before {\n  content: \"\\f02a\";\n}\n\ni.icon.rss:before {\n  content: \"\\f09e\";\n}\n\ni.icon.fork:before {\n  content: \"\\f126\";\n}\n\ni.icon.html5:before {\n  content: \"\\f13b\";\n}\n\ni.icon.css3:before {\n  content: \"\\f13c\";\n}\n\ni.icon.rss.square:before {\n  content: \"\\f143\";\n}\n\ni.icon.openid:before {\n  content: \"\\f19b\";\n}\n\ni.icon.database:before {\n  content: \"\\f1c0\";\n}\n\ni.icon.server:before {\n  content: \"\\f233\";\n}\n\ni.icon.usb:before {\n  content: \"\\f287\";\n}\n\ni.icon.bluetooth:before {\n  content: \"\\f293\";\n}\n\ni.icon.bluetooth.alternative:before {\n  content: \"\\f294\";\n}\n\n/* Rating */\n\ni.icon.heart:before {\n  content: \"\\f004\";\n}\n\ni.icon.star:before {\n  content: \"\\f005\";\n}\n\ni.icon.empty.star:before {\n  content: \"\\f006\";\n}\n\ni.icon.thumbs.outline.up:before {\n  content: \"\\f087\";\n}\n\ni.icon.thumbs.outline.down:before {\n  content: \"\\f088\";\n}\n\ni.icon.star.half:before {\n  content: \"\\f089\";\n}\n\ni.icon.empty.heart:before {\n  content: \"\\f08a\";\n}\n\ni.icon.smile:before {\n  content: \"\\f118\";\n}\n\ni.icon.frown:before {\n  content: \"\\f119\";\n}\n\ni.icon.meh:before {\n  content: \"\\f11a\";\n}\n\ni.icon.star.half.empty:before {\n  content: \"\\f123\";\n}\n\ni.icon.thumbs.up:before {\n  content: \"\\f164\";\n}\n\ni.icon.thumbs.down:before {\n  content: \"\\f165\";\n}\n\n/* Audio */\n\ni.icon.music:before {\n  content: \"\\f001\";\n}\n\ni.icon.video.play.outline:before {\n  content: \"\\f01d\";\n}\n\ni.icon.volume.off:before {\n  content: \"\\f026\";\n}\n\ni.icon.volume.down:before {\n  content: \"\\f027\";\n}\n\ni.icon.volume.up:before {\n  content: \"\\f028\";\n}\n\ni.icon.record:before {\n  content: \"\\f03d\";\n}\n\ni.icon.step.backward:before {\n  content: \"\\f048\";\n}\n\ni.icon.fast.backward:before {\n  content: \"\\f049\";\n}\n\ni.icon.backward:before {\n  content: \"\\f04a\";\n}\n\ni.icon.play:before {\n  content: \"\\f04b\";\n}\n\ni.icon.pause:before {\n  content: \"\\f04c\";\n}\n\ni.icon.stop:before {\n  content: \"\\f04d\";\n}\n\ni.icon.forward:before {\n  content: \"\\f04e\";\n}\n\ni.icon.fast.forward:before {\n  content: \"\\f050\";\n}\n\ni.icon.step.forward:before {\n  content: \"\\f051\";\n}\n\ni.icon.eject:before {\n  content: \"\\f052\";\n}\n\ni.icon.unmute:before {\n  content: \"\\f130\";\n}\n\ni.icon.mute:before {\n  content: \"\\f131\";\n}\n\ni.icon.video.play:before {\n  content: \"\\f144\";\n}\n\ni.icon.closed.captioning:before {\n  content: \"\\f20a\";\n}\n\ni.icon.pause.circle:before {\n  content: \"\\f28b\";\n}\n\ni.icon.pause.circle.outline:before {\n  content: \"\\f28c\";\n}\n\ni.icon.stop.circle:before {\n  content: \"\\f28d\";\n}\n\ni.icon.stop.circle.outline:before {\n  content: \"\\f28e\";\n}\n\n/* Map, Locations, & Transportation */\n\ni.icon.marker:before {\n  content: \"\\f041\";\n}\n\ni.icon.coffee:before {\n  content: \"\\f0f4\";\n}\n\ni.icon.food:before {\n  content: \"\\f0f5\";\n}\n\ni.icon.building.outline:before {\n  content: \"\\f0f7\";\n}\n\ni.icon.hospital:before {\n  content: \"\\f0f8\";\n}\n\ni.icon.emergency:before {\n  content: \"\\f0f9\";\n}\n\ni.icon.first.aid:before {\n  content: \"\\f0fa\";\n}\n\ni.icon.military:before {\n  content: \"\\f0fb\";\n}\n\ni.icon.h:before {\n  content: \"\\f0fd\";\n}\n\ni.icon.location.arrow:before {\n  content: \"\\f124\";\n}\n\ni.icon.compass:before {\n  content: \"\\f14e\";\n}\n\ni.icon.space.shuttle:before {\n  content: \"\\f197\";\n}\n\ni.icon.university:before {\n  content: \"\\f19c\";\n}\n\ni.icon.building:before {\n  content: \"\\f1ad\";\n}\n\ni.icon.paw:before {\n  content: \"\\f1b0\";\n}\n\ni.icon.spoon:before {\n  content: \"\\f1b1\";\n}\n\ni.icon.car:before {\n  content: \"\\f1b9\";\n}\n\ni.icon.taxi:before {\n  content: \"\\f1ba\";\n}\n\ni.icon.tree:before {\n  content: \"\\f1bb\";\n}\n\ni.icon.bicycle:before {\n  content: \"\\f206\";\n}\n\ni.icon.bus:before {\n  content: \"\\f207\";\n}\n\ni.icon.ship:before {\n  content: \"\\f21a\";\n}\n\ni.icon.motorcycle:before {\n  content: \"\\f21c\";\n}\n\ni.icon.street.view:before {\n  content: \"\\f21d\";\n}\n\ni.icon.hotel:before {\n  content: \"\\f236\";\n}\n\ni.icon.train:before {\n  content: \"\\f238\";\n}\n\ni.icon.subway:before {\n  content: \"\\f239\";\n}\n\ni.icon.map.pin:before {\n  content: \"\\f276\";\n}\n\ni.icon.map.signs:before {\n  content: \"\\f277\";\n}\n\ni.icon.map.outline:before {\n  content: \"\\f278\";\n}\n\ni.icon.map:before {\n  content: \"\\f279\";\n}\n\n/* Tables */\n\ni.icon.table:before {\n  content: \"\\f0ce\";\n}\n\ni.icon.columns:before {\n  content: \"\\f0db\";\n}\n\ni.icon.sort:before {\n  content: \"\\f0dc\";\n}\n\ni.icon.sort.descending:before {\n  content: \"\\f0dd\";\n}\n\ni.icon.sort.ascending:before {\n  content: \"\\f0de\";\n}\n\ni.icon.sort.alphabet.ascending:before {\n  content: \"\\f15d\";\n}\n\ni.icon.sort.alphabet.descending:before {\n  content: \"\\f15e\";\n}\n\ni.icon.sort.content.ascending:before {\n  content: \"\\f160\";\n}\n\ni.icon.sort.content.descending:before {\n  content: \"\\f161\";\n}\n\ni.icon.sort.numeric.ascending:before {\n  content: \"\\f162\";\n}\n\ni.icon.sort.numeric.descending:before {\n  content: \"\\f163\";\n}\n\n/* Text Editor */\n\ni.icon.font:before {\n  content: \"\\f031\";\n}\n\ni.icon.bold:before {\n  content: \"\\f032\";\n}\n\ni.icon.italic:before {\n  content: \"\\f033\";\n}\n\ni.icon.text.height:before {\n  content: \"\\f034\";\n}\n\ni.icon.text.width:before {\n  content: \"\\f035\";\n}\n\ni.icon.align.left:before {\n  content: \"\\f036\";\n}\n\ni.icon.align.center:before {\n  content: \"\\f037\";\n}\n\ni.icon.align.right:before {\n  content: \"\\f038\";\n}\n\ni.icon.align.justify:before {\n  content: \"\\f039\";\n}\n\ni.icon.list:before {\n  content: \"\\f03a\";\n}\n\ni.icon.outdent:before {\n  content: \"\\f03b\";\n}\n\ni.icon.indent:before {\n  content: \"\\f03c\";\n}\n\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\n\ni.icon.cut:before {\n  content: \"\\f0c4\";\n}\n\ni.icon.copy:before {\n  content: \"\\f0c5\";\n}\n\ni.icon.attach:before {\n  content: \"\\f0c6\";\n}\n\ni.icon.save:before {\n  content: \"\\f0c7\";\n}\n\ni.icon.content:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.unordered.list:before {\n  content: \"\\f0ca\";\n}\n\ni.icon.ordered.list:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.strikethrough:before {\n  content: \"\\f0cc\";\n}\n\ni.icon.underline:before {\n  content: \"\\f0cd\";\n}\n\ni.icon.paste:before {\n  content: \"\\f0ea\";\n}\n\ni.icon.unlinkify:before {\n  content: \"\\f127\";\n}\n\ni.icon.superscript:before {\n  content: \"\\f12b\";\n}\n\ni.icon.subscript:before {\n  content: \"\\f12c\";\n}\n\ni.icon.header:before {\n  content: \"\\f1dc\";\n}\n\ni.icon.paragraph:before {\n  content: \"\\f1dd\";\n}\n\ni.icon.text.cursor:before {\n  content: \"\\f246\";\n}\n\n/* Currency */\n\ni.icon.euro:before {\n  content: \"\\f153\";\n}\n\ni.icon.pound:before {\n  content: \"\\f154\";\n}\n\ni.icon.dollar:before {\n  content: \"\\f155\";\n}\n\ni.icon.rupee:before {\n  content: \"\\f156\";\n}\n\ni.icon.yen:before {\n  content: \"\\f157\";\n}\n\ni.icon.ruble:before {\n  content: \"\\f158\";\n}\n\ni.icon.won:before {\n  content: \"\\f159\";\n}\n\ni.icon.bitcoin:before {\n  content: \"\\f15a\";\n}\n\ni.icon.lira:before {\n  content: \"\\f195\";\n}\n\ni.icon.shekel:before {\n  content: \"\\f20b\";\n}\n\n/* Payment Options */\n\ni.icon.paypal:before {\n  content: \"\\f1ed\";\n}\n\ni.icon.google.wallet:before {\n  content: \"\\f1ee\";\n}\n\ni.icon.visa:before {\n  content: \"\\f1f0\";\n}\n\ni.icon.mastercard:before {\n  content: \"\\f1f1\";\n}\n\ni.icon.discover:before {\n  content: \"\\f1f2\";\n}\n\ni.icon.american.express:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.paypal.card:before {\n  content: \"\\f1f4\";\n}\n\ni.icon.stripe:before {\n  content: \"\\f1f5\";\n}\n\ni.icon.japan.credit.bureau:before {\n  content: \"\\f24b\";\n}\n\ni.icon.diners.club:before {\n  content: \"\\f24c\";\n}\n\ni.icon.credit.card.alternative:before {\n  content: \"\\f283\";\n}\n\n/* Networks and Websites*/\n\ni.icon.twitter.square:before {\n  content: \"\\f081\";\n}\n\ni.icon.facebook.square:before {\n  content: \"\\f082\";\n}\n\ni.icon.linkedin.square:before {\n  content: \"\\f08c\";\n}\n\ni.icon.github.square:before {\n  content: \"\\f092\";\n}\n\ni.icon.twitter:before {\n  content: \"\\f099\";\n}\n\ni.icon.facebook.f:before {\n  content: \"\\f09a\";\n}\n\ni.icon.github:before {\n  content: \"\\f09b\";\n}\n\ni.icon.pinterest:before {\n  content: \"\\f0d2\";\n}\n\ni.icon.pinterest.square:before {\n  content: \"\\f0d3\";\n}\n\ni.icon.google.plus.square:before {\n  content: \"\\f0d4\";\n}\n\ni.icon.google.plus:before {\n  content: \"\\f0d5\";\n}\n\ni.icon.linkedin:before {\n  content: \"\\f0e1\";\n}\n\ni.icon.github.alternate:before {\n  content: \"\\f113\";\n}\n\ni.icon.maxcdn:before {\n  content: \"\\f136\";\n}\n\ni.icon.youtube.square:before {\n  content: \"\\f166\";\n}\n\ni.icon.youtube:before {\n  content: \"\\f167\";\n}\n\ni.icon.xing:before {\n  content: \"\\f168\";\n}\n\ni.icon.xing.square:before {\n  content: \"\\f169\";\n}\n\ni.icon.youtube.play:before {\n  content: \"\\f16a\";\n}\n\ni.icon.dropbox:before {\n  content: \"\\f16b\";\n}\n\ni.icon.stack.overflow:before {\n  content: \"\\f16c\";\n}\n\ni.icon.instagram:before {\n  content: \"\\f16d\";\n}\n\ni.icon.flickr:before {\n  content: \"\\f16e\";\n}\n\ni.icon.adn:before {\n  content: \"\\f170\";\n}\n\ni.icon.bitbucket:before {\n  content: \"\\f171\";\n}\n\ni.icon.bitbucket.square:before {\n  content: \"\\f172\";\n}\n\ni.icon.tumblr:before {\n  content: \"\\f173\";\n}\n\ni.icon.tumblr.square:before {\n  content: \"\\f174\";\n}\n\ni.icon.apple:before {\n  content: \"\\f179\";\n}\n\ni.icon.windows:before {\n  content: \"\\f17a\";\n}\n\ni.icon.android:before {\n  content: \"\\f17b\";\n}\n\ni.icon.linux:before {\n  content: \"\\f17c\";\n}\n\ni.icon.dribble:before {\n  content: \"\\f17d\";\n}\n\ni.icon.skype:before {\n  content: \"\\f17e\";\n}\n\ni.icon.foursquare:before {\n  content: \"\\f180\";\n}\n\ni.icon.trello:before {\n  content: \"\\f181\";\n}\n\ni.icon.gittip:before {\n  content: \"\\f184\";\n}\n\ni.icon.vk:before {\n  content: \"\\f189\";\n}\n\ni.icon.weibo:before {\n  content: \"\\f18a\";\n}\n\ni.icon.renren:before {\n  content: \"\\f18b\";\n}\n\ni.icon.pagelines:before {\n  content: \"\\f18c\";\n}\n\ni.icon.stack.exchange:before {\n  content: \"\\f18d\";\n}\n\ni.icon.vimeo.square:before {\n  content: \"\\f194\";\n}\n\ni.icon.slack:before {\n  content: \"\\f198\";\n}\n\ni.icon.wordpress:before {\n  content: \"\\f19a\";\n}\n\ni.icon.yahoo:before {\n  content: \"\\f19e\";\n}\n\ni.icon.google:before {\n  content: \"\\f1a0\";\n}\n\ni.icon.reddit:before {\n  content: \"\\f1a1\";\n}\n\ni.icon.reddit.square:before {\n  content: \"\\f1a2\";\n}\n\ni.icon.stumbleupon.circle:before {\n  content: \"\\f1a3\";\n}\n\ni.icon.stumbleupon:before {\n  content: \"\\f1a4\";\n}\n\ni.icon.delicious:before {\n  content: \"\\f1a5\";\n}\n\ni.icon.digg:before {\n  content: \"\\f1a6\";\n}\n\ni.icon.pied.piper:before {\n  content: \"\\f1a7\";\n}\n\ni.icon.pied.piper.alternate:before {\n  content: \"\\f1a8\";\n}\n\ni.icon.drupal:before {\n  content: \"\\f1a9\";\n}\n\ni.icon.joomla:before {\n  content: \"\\f1aa\";\n}\n\ni.icon.behance:before {\n  content: \"\\f1b4\";\n}\n\ni.icon.behance.square:before {\n  content: \"\\f1b5\";\n}\n\ni.icon.steam:before {\n  content: \"\\f1b6\";\n}\n\ni.icon.steam.square:before {\n  content: \"\\f1b7\";\n}\n\ni.icon.spotify:before {\n  content: \"\\f1bc\";\n}\n\ni.icon.deviantart:before {\n  content: \"\\f1bd\";\n}\n\ni.icon.soundcloud:before {\n  content: \"\\f1be\";\n}\n\ni.icon.vine:before {\n  content: \"\\f1ca\";\n}\n\ni.icon.codepen:before {\n  content: \"\\f1cb\";\n}\n\ni.icon.jsfiddle:before {\n  content: \"\\f1cc\";\n}\n\ni.icon.rebel:before {\n  content: \"\\f1d0\";\n}\n\ni.icon.empire:before {\n  content: \"\\f1d1\";\n}\n\ni.icon.git.square:before {\n  content: \"\\f1d2\";\n}\n\ni.icon.git:before {\n  content: \"\\f1d3\";\n}\n\ni.icon.hacker.news:before {\n  content: \"\\f1d4\";\n}\n\ni.icon.tencent.weibo:before {\n  content: \"\\f1d5\";\n}\n\ni.icon.qq:before {\n  content: \"\\f1d6\";\n}\n\ni.icon.wechat:before {\n  content: \"\\f1d7\";\n}\n\ni.icon.slideshare:before {\n  content: \"\\f1e7\";\n}\n\ni.icon.twitch:before {\n  content: \"\\f1e8\";\n}\n\ni.icon.yelp:before {\n  content: \"\\f1e9\";\n}\n\ni.icon.lastfm:before {\n  content: \"\\f202\";\n}\n\ni.icon.lastfm.square:before {\n  content: \"\\f203\";\n}\n\ni.icon.ioxhost:before {\n  content: \"\\f208\";\n}\n\ni.icon.angellist:before {\n  content: \"\\f209\";\n}\n\ni.icon.meanpath:before {\n  content: \"\\f20c\";\n}\n\ni.icon.buysellads:before {\n  content: \"\\f20d\";\n}\n\ni.icon.connectdevelop:before {\n  content: \"\\f20e\";\n}\n\ni.icon.dashcube:before {\n  content: \"\\f210\";\n}\n\ni.icon.forumbee:before {\n  content: \"\\f211\";\n}\n\ni.icon.leanpub:before {\n  content: \"\\f212\";\n}\n\ni.icon.sellsy:before {\n  content: \"\\f213\";\n}\n\ni.icon.shirtsinbulk:before {\n  content: \"\\f214\";\n}\n\ni.icon.simplybuilt:before {\n  content: \"\\f215\";\n}\n\ni.icon.skyatlas:before {\n  content: \"\\f216\";\n}\n\ni.icon.facebook:before {\n  content: \"\\f230\";\n}\n\ni.icon.pinterest:before {\n  content: \"\\f231\";\n}\n\ni.icon.whatsapp:before {\n  content: \"\\f232\";\n}\n\ni.icon.viacoin:before {\n  content: \"\\f237\";\n}\n\ni.icon.medium:before {\n  content: \"\\f23a\";\n}\n\ni.icon.y.combinator:before {\n  content: \"\\f23b\";\n}\n\ni.icon.optinmonster:before {\n  content: \"\\f23c\";\n}\n\ni.icon.opencart:before {\n  content: \"\\f23d\";\n}\n\ni.icon.expeditedssl:before {\n  content: \"\\f23e\";\n}\n\ni.icon.gg:before {\n  content: \"\\f260\";\n}\n\ni.icon.gg.circle:before {\n  content: \"\\f261\";\n}\n\ni.icon.tripadvisor:before {\n  content: \"\\f262\";\n}\n\ni.icon.odnoklassniki:before {\n  content: \"\\f263\";\n}\n\ni.icon.odnoklassniki.square:before {\n  content: \"\\f264\";\n}\n\ni.icon.pocket:before {\n  content: \"\\f265\";\n}\n\ni.icon.wikipedia:before {\n  content: \"\\f266\";\n}\n\ni.icon.safari:before {\n  content: \"\\f267\";\n}\n\ni.icon.chrome:before {\n  content: \"\\f268\";\n}\n\ni.icon.firefox:before {\n  content: \"\\f269\";\n}\n\ni.icon.opera:before {\n  content: \"\\f26a\";\n}\n\ni.icon.internet.explorer:before {\n  content: \"\\f26b\";\n}\n\ni.icon.contao:before {\n  content: \"\\f26d\";\n}\n\ni.icon.\\35 00px:before {\n  content: \"\\f26e\";\n}\n\ni.icon.amazon:before {\n  content: \"\\f270\";\n}\n\ni.icon.houzz:before {\n  content: \"\\f27c\";\n}\n\ni.icon.vimeo:before {\n  content: \"\\f27d\";\n}\n\ni.icon.black.tie:before {\n  content: \"\\f27e\";\n}\n\ni.icon.fonticons:before {\n  content: \"\\f280\";\n}\n\ni.icon.reddit.alien:before {\n  content: \"\\f281\";\n}\n\ni.icon.microsoft.edge:before {\n  content: \"\\f282\";\n}\n\ni.icon.codiepie:before {\n  content: \"\\f284\";\n}\n\ni.icon.modx:before {\n  content: \"\\f285\";\n}\n\ni.icon.fort.awesome:before {\n  content: \"\\f286\";\n}\n\ni.icon.product.hunt:before {\n  content: \"\\f288\";\n}\n\ni.icon.mixcloud:before {\n  content: \"\\f289\";\n}\n\ni.icon.scribd:before {\n  content: \"\\f28a\";\n}\n\ni.icon.gitlab:before {\n  content: \"\\f296\";\n}\n\ni.icon.wpbeginner:before {\n  content: \"\\f297\";\n}\n\ni.icon.wpforms:before {\n  content: \"\\f298\";\n}\n\ni.icon.envira.gallery:before {\n  content: \"\\f299\";\n}\n\ni.icon.glide:before {\n  content: \"\\f2a5\";\n}\n\ni.icon.glide.g:before {\n  content: \"\\f2a6\";\n}\n\ni.icon.viadeo:before {\n  content: \"\\f2a9\";\n}\n\ni.icon.viadeo.square:before {\n  content: \"\\f2aa\";\n}\n\ni.icon.snapchat:before {\n  content: \"\\f2ab\";\n}\n\ni.icon.snapchat.ghost:before {\n  content: \"\\f2ac\";\n}\n\ni.icon.snapchat.square:before {\n  content: \"\\f2ad\";\n}\n\ni.icon.pied.piper.hat:before {\n  content: \"\\f2ae\";\n}\n\ni.icon.first.order:before {\n  content: \"\\f2b0\";\n}\n\ni.icon.yoast:before {\n  content: \"\\f2b1\";\n}\n\ni.icon.themeisle:before {\n  content: \"\\f2b2\";\n}\n\ni.icon.google.plus.circle:before {\n  content: \"\\f2b3\";\n}\n\ni.icon.font.awesome:before {\n  content: \"\\f2b4\";\n}\n\n/*******************************\n            Aliases\n*******************************/\n\ni.icon.like:before {\n  content: \"\\f004\";\n}\n\ni.icon.favorite:before {\n  content: \"\\f005\";\n}\n\ni.icon.video:before {\n  content: \"\\f008\";\n}\n\ni.icon.check:before {\n  content: \"\\f00c\";\n}\n\ni.icon.close:before {\n  content: \"\\f00d\";\n}\n\ni.icon.cancel:before {\n  content: \"\\f00d\";\n}\n\ni.icon.delete:before {\n  content: \"\\f00d\";\n}\n\ni.icon.x:before {\n  content: \"\\f00d\";\n}\n\ni.icon.zoom.in:before {\n  content: \"\\f00e\";\n}\n\ni.icon.magnify:before {\n  content: \"\\f00e\";\n}\n\ni.icon.shutdown:before {\n  content: \"\\f011\";\n}\n\ni.icon.clock:before {\n  content: \"\\f017\";\n}\n\ni.icon.time:before {\n  content: \"\\f017\";\n}\n\ni.icon.play.circle.outline:before {\n  content: \"\\f01d\";\n}\n\ni.icon.headphone:before {\n  content: \"\\f025\";\n}\n\ni.icon.camera:before {\n  content: \"\\f030\";\n}\n\ni.icon.video.camera:before {\n  content: \"\\f03d\";\n}\n\ni.icon.picture:before {\n  content: \"\\f03e\";\n}\n\ni.icon.pencil:before {\n  content: \"\\f040\";\n}\n\ni.icon.compose:before {\n  content: \"\\f040\";\n}\n\ni.icon.point:before {\n  content: \"\\f041\";\n}\n\ni.icon.tint:before {\n  content: \"\\f043\";\n}\n\ni.icon.signup:before {\n  content: \"\\f044\";\n}\n\ni.icon.plus.circle:before {\n  content: \"\\f055\";\n}\n\ni.icon.question.circle:before {\n  content: \"\\f059\";\n}\n\ni.icon.dont:before {\n  content: \"\\f05e\";\n}\n\ni.icon.minimize:before {\n  content: \"\\f066\";\n}\n\ni.icon.add:before {\n  content: \"\\f067\";\n}\n\ni.icon.exclamation.circle:before {\n  content: \"\\f06a\";\n}\n\ni.icon.attention:before {\n  content: \"\\f06a\";\n}\n\ni.icon.eye:before {\n  content: \"\\f06e\";\n}\n\ni.icon.exclamation.triangle:before {\n  content: \"\\f071\";\n}\n\ni.icon.shuffle:before {\n  content: \"\\f074\";\n}\n\ni.icon.chat:before {\n  content: \"\\f075\";\n}\n\ni.icon.cart:before {\n  content: \"\\f07a\";\n}\n\ni.icon.shopping.cart:before {\n  content: \"\\f07a\";\n}\n\ni.icon.bar.graph:before {\n  content: \"\\f080\";\n}\n\ni.icon.key:before {\n  content: \"\\f084\";\n}\n\ni.icon.cogs:before {\n  content: \"\\f085\";\n}\n\ni.icon.discussions:before {\n  content: \"\\f086\";\n}\n\ni.icon.like.outline:before {\n  content: \"\\f087\";\n}\n\ni.icon.dislike.outline:before {\n  content: \"\\f088\";\n}\n\ni.icon.heart.outline:before {\n  content: \"\\f08a\";\n}\n\ni.icon.log.out:before {\n  content: \"\\f08b\";\n}\n\ni.icon.thumb.tack:before {\n  content: \"\\f08d\";\n}\n\ni.icon.winner:before {\n  content: \"\\f091\";\n}\n\ni.icon.phone:before {\n  content: \"\\f095\";\n}\n\ni.icon.bookmark.outline:before {\n  content: \"\\f097\";\n}\n\ni.icon.phone.square:before {\n  content: \"\\f098\";\n}\n\ni.icon.credit.card:before {\n  content: \"\\f09d\";\n}\n\ni.icon.hdd.outline:before {\n  content: \"\\f0a0\";\n}\n\ni.icon.bullhorn:before {\n  content: \"\\f0a1\";\n}\n\ni.icon.bell.outline:before {\n  content: \"\\f0a2\";\n}\n\ni.icon.hand.outline.right:before {\n  content: \"\\f0a4\";\n}\n\ni.icon.hand.outline.left:before {\n  content: \"\\f0a5\";\n}\n\ni.icon.hand.outline.up:before {\n  content: \"\\f0a6\";\n}\n\ni.icon.hand.outline.down:before {\n  content: \"\\f0a7\";\n}\n\ni.icon.globe:before {\n  content: \"\\f0ac\";\n}\n\ni.icon.wrench:before {\n  content: \"\\f0ad\";\n}\n\ni.icon.briefcase:before {\n  content: \"\\f0b1\";\n}\n\ni.icon.group:before {\n  content: \"\\f0c0\";\n}\n\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\n\ni.icon.chain:before {\n  content: \"\\f0c1\";\n}\n\ni.icon.flask:before {\n  content: \"\\f0c3\";\n}\n\ni.icon.sidebar:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.bars:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.list.ul:before {\n  content: \"\\f0ca\";\n}\n\ni.icon.list.ol:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.numbered.list:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.magic:before {\n  content: \"\\f0d0\";\n}\n\ni.icon.truck:before {\n  content: \"\\f0d1\";\n}\n\ni.icon.currency:before {\n  content: \"\\f0d6\";\n}\n\ni.icon.triangle.down:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.dropdown:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.triangle.up:before {\n  content: \"\\f0d8\";\n}\n\ni.icon.triangle.left:before {\n  content: \"\\f0d9\";\n}\n\ni.icon.triangle.right:before {\n  content: \"\\f0da\";\n}\n\ni.icon.envelope:before {\n  content: \"\\f0e0\";\n}\n\ni.icon.conversation:before {\n  content: \"\\f0e6\";\n}\n\ni.icon.rain:before {\n  content: \"\\f0e9\";\n}\n\ni.icon.clipboard:before {\n  content: \"\\f0ea\";\n}\n\ni.icon.lightbulb:before {\n  content: \"\\f0eb\";\n}\n\ni.icon.bell:before {\n  content: \"\\f0f3\";\n}\n\ni.icon.ambulance:before {\n  content: \"\\f0f9\";\n}\n\ni.icon.medkit:before {\n  content: \"\\f0fa\";\n}\n\ni.icon.fighter.jet:before {\n  content: \"\\f0fb\";\n}\n\ni.icon.beer:before {\n  content: \"\\f0fc\";\n}\n\ni.icon.plus.square:before {\n  content: \"\\f0fe\";\n}\n\ni.icon.computer:before {\n  content: \"\\f108\";\n}\n\ni.icon.circle.outline:before {\n  content: \"\\f10c\";\n}\n\ni.icon.gamepad:before {\n  content: \"\\f11b\";\n}\n\ni.icon.star.half.full:before {\n  content: \"\\f123\";\n}\n\ni.icon.broken.chain:before {\n  content: \"\\f127\";\n}\n\ni.icon.question:before {\n  content: \"\\f128\";\n}\n\ni.icon.exclamation:before {\n  content: \"\\f12a\";\n}\n\ni.icon.eraser:before {\n  content: \"\\f12d\";\n}\n\ni.icon.microphone:before {\n  content: \"\\f130\";\n}\n\ni.icon.microphone.slash:before {\n  content: \"\\f131\";\n}\n\ni.icon.shield:before {\n  content: \"\\f132\";\n}\n\ni.icon.target:before {\n  content: \"\\f140\";\n}\n\ni.icon.play.circle:before {\n  content: \"\\f144\";\n}\n\ni.icon.pencil.square:before {\n  content: \"\\f14b\";\n}\n\ni.icon.eur:before {\n  content: \"\\f153\";\n}\n\ni.icon.gbp:before {\n  content: \"\\f154\";\n}\n\ni.icon.usd:before {\n  content: \"\\f155\";\n}\n\ni.icon.inr:before {\n  content: \"\\f156\";\n}\n\ni.icon.cny:before {\n  content: \"\\f157\";\n}\n\ni.icon.rmb:before {\n  content: \"\\f157\";\n}\n\ni.icon.jpy:before {\n  content: \"\\f157\";\n}\n\ni.icon.rouble:before {\n  content: \"\\f158\";\n}\n\ni.icon.rub:before {\n  content: \"\\f158\";\n}\n\ni.icon.krw:before {\n  content: \"\\f159\";\n}\n\ni.icon.btc:before {\n  content: \"\\f15a\";\n}\n\ni.icon.gratipay:before {\n  content: \"\\f184\";\n}\n\ni.icon.zip:before {\n  content: \"\\f187\";\n}\n\ni.icon.dot.circle.outline:before {\n  content: \"\\f192\";\n}\n\ni.icon.try:before {\n  content: \"\\f195\";\n}\n\ni.icon.graduation:before {\n  content: \"\\f19d\";\n}\n\ni.icon.circle.outline:before {\n  content: \"\\f1db\";\n}\n\ni.icon.sliders:before {\n  content: \"\\f1de\";\n}\n\ni.icon.weixin:before {\n  content: \"\\f1d7\";\n}\n\ni.icon.tty:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.teletype:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.binoculars:before {\n  content: \"\\f1e5\";\n}\n\ni.icon.power.cord:before {\n  content: \"\\f1e6\";\n}\n\ni.icon.wi-fi:before {\n  content: \"\\f1eb\";\n}\n\ni.icon.visa.card:before {\n  content: \"\\f1f0\";\n}\n\ni.icon.mastercard.card:before {\n  content: \"\\f1f1\";\n}\n\ni.icon.discover.card:before {\n  content: \"\\f1f2\";\n}\n\ni.icon.amex:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.american.express.card:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.stripe.card:before {\n  content: \"\\f1f5\";\n}\n\ni.icon.bell.slash:before {\n  content: \"\\f1f6\";\n}\n\ni.icon.bell.slash.outline:before {\n  content: \"\\f1f7\";\n}\n\ni.icon.area.graph:before {\n  content: \"\\f1fe\";\n}\n\ni.icon.pie.graph:before {\n  content: \"\\f200\";\n}\n\ni.icon.line.graph:before {\n  content: \"\\f201\";\n}\n\ni.icon.cc:before {\n  content: \"\\f20a\";\n}\n\ni.icon.sheqel:before {\n  content: \"\\f20b\";\n}\n\ni.icon.ils:before {\n  content: \"\\f20b\";\n}\n\ni.icon.plus.cart:before {\n  content: \"\\f217\";\n}\n\ni.icon.arrow.down.cart:before {\n  content: \"\\f218\";\n}\n\ni.icon.detective:before {\n  content: \"\\f21b\";\n}\n\ni.icon.venus:before {\n  content: \"\\f221\";\n}\n\ni.icon.mars:before {\n  content: \"\\f222\";\n}\n\ni.icon.mercury:before {\n  content: \"\\f223\";\n}\n\ni.icon.intersex:before {\n  content: \"\\f224\";\n}\n\ni.icon.venus.double:before {\n  content: \"\\f226\";\n}\n\ni.icon.female.homosexual:before {\n  content: \"\\f226\";\n}\n\ni.icon.mars.double:before {\n  content: \"\\f227\";\n}\n\ni.icon.male.homosexual:before {\n  content: \"\\f227\";\n}\n\ni.icon.venus.mars:before {\n  content: \"\\f228\";\n}\n\ni.icon.mars.stroke:before {\n  content: \"\\f229\";\n}\n\ni.icon.mars.alternate:before {\n  content: \"\\f229\";\n}\n\ni.icon.mars.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.mars.stroke.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.mars.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.mars.stroke.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.asexual:before {\n  content: \"\\f22d\";\n}\n\ni.icon.facebook.official:before {\n  content: \"\\f230\";\n}\n\ni.icon.user.plus:before {\n  content: \"\\f234\";\n}\n\ni.icon.user.times:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.close:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.cancel:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.delete:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.x:before {\n  content: \"\\f235\";\n}\n\ni.icon.bed:before {\n  content: \"\\f236\";\n}\n\ni.icon.yc:before {\n  content: \"\\f23b\";\n}\n\ni.icon.ycombinator:before {\n  content: \"\\f23b\";\n}\n\ni.icon.battery.four:before {\n  content: \"\\f240\";\n}\n\ni.icon.battery.three:before {\n  content: \"\\f241\";\n}\n\ni.icon.battery.three.quarters:before {\n  content: \"\\f241\";\n}\n\ni.icon.battery.two:before {\n  content: \"\\f242\";\n}\n\ni.icon.battery.half:before {\n  content: \"\\f242\";\n}\n\ni.icon.battery.one:before {\n  content: \"\\f243\";\n}\n\ni.icon.battery.quarter:before {\n  content: \"\\f243\";\n}\n\ni.icon.battery.zero:before {\n  content: \"\\f244\";\n}\n\ni.icon.i.cursor:before {\n  content: \"\\f246\";\n}\n\ni.icon.jcb:before {\n  content: \"\\f24b\";\n}\n\ni.icon.japan.credit.bureau.card:before {\n  content: \"\\f24b\";\n}\n\ni.icon.diners.club.card:before {\n  content: \"\\f24c\";\n}\n\ni.icon.balance:before {\n  content: \"\\f24e\";\n}\n\ni.icon.hourglass.outline:before {\n  content: \"\\f250\";\n}\n\ni.icon.hourglass.zero:before {\n  content: \"\\f250\";\n}\n\ni.icon.hourglass.one:before {\n  content: \"\\f251\";\n}\n\ni.icon.hourglass.two:before {\n  content: \"\\f252\";\n}\n\ni.icon.hourglass.three:before {\n  content: \"\\f253\";\n}\n\ni.icon.hourglass.four:before {\n  content: \"\\f254\";\n}\n\ni.icon.grab:before {\n  content: \"\\f255\";\n}\n\ni.icon.hand.victory:before {\n  content: \"\\f25b\";\n}\n\ni.icon.tm:before {\n  content: \"\\f25c\";\n}\n\ni.icon.r.circle:before {\n  content: \"\\f25d\";\n}\n\ni.icon.television:before {\n  content: \"\\f26c\";\n}\n\ni.icon.five.hundred.pixels:before {\n  content: \"\\f26e\";\n}\n\ni.icon.calendar.plus:before {\n  content: \"\\f271\";\n}\n\ni.icon.calendar.minus:before {\n  content: \"\\f272\";\n}\n\ni.icon.calendar.times:before {\n  content: \"\\f273\";\n}\n\ni.icon.calendar.check:before {\n  content: \"\\f274\";\n}\n\ni.icon.factory:before {\n  content: \"\\f275\";\n}\n\ni.icon.commenting:before {\n  content: \"\\f27a\";\n}\n\ni.icon.commenting.outline:before {\n  content: \"\\f27b\";\n}\n\ni.icon.edge:before {\n  content: \"\\f282\";\n}\n\ni.icon.ms.edge:before {\n  content: \"\\f282\";\n}\n\ni.icon.wordpress.beginner:before {\n  content: \"\\f297\";\n}\n\ni.icon.wordpress.forms:before {\n  content: \"\\f298\";\n}\n\ni.icon.envira:before {\n  content: \"\\f299\";\n}\n\ni.icon.question.circle.outline:before {\n  content: \"\\f29c\";\n}\n\ni.icon.assistive.listening.devices:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.als:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.ald:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.asl.interpreting:before {\n  content: \"\\f2a3\";\n}\n\ni.icon.deaf:before {\n  content: \"\\f2a4\";\n}\n\ni.icon.american.sign.language.interpreting:before {\n  content: \"\\f2a3\";\n}\n\ni.icon.hard.of.hearing:before {\n  content: \"\\f2a4\";\n}\n\ni.icon.signing:before {\n  content: \"\\f2a7\";\n}\n\ni.icon.new.pied.piper:before {\n  content: \"\\f2ae\";\n}\n\ni.icon.theme.isle:before {\n  content: \"\\f2b2\";\n}\n\ni.icon.google.plus.official:before {\n  content: \"\\f2b3\";\n}\n\ni.icon.fa:before {\n  content: \"\\f2b4\";\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Image\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Image\n*******************************/\n\n.ui.image {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  max-width: 100%;\n  background-color: transparent;\n}\n\nimg.ui.image {\n  display: block;\n}\n\n.ui.image svg,\n.ui.image img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.hidden.images,\n.ui.hidden.image {\n  display: none;\n}\n\n.ui.hidden.transition.images,\n.ui.hidden.transition.image {\n  display: block;\n  visibility: hidden;\n}\n\n.ui.disabled.images,\n.ui.disabled.image {\n  cursor: default;\n  opacity: 0.45;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.image,\n.ui.inline.image svg,\n.ui.inline.image img {\n  display: inline-block;\n}\n\n/*------------------\n  Vertical Aligned\n-------------------*/\n\n.ui.top.aligned.images .image,\n.ui.top.aligned.image,\n.ui.top.aligned.image svg,\n.ui.top.aligned.image img {\n  display: inline-block;\n  vertical-align: top;\n}\n\n.ui.middle.aligned.images .image,\n.ui.middle.aligned.image,\n.ui.middle.aligned.image svg,\n.ui.middle.aligned.image img {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ui.bottom.aligned.images .image,\n.ui.bottom.aligned.image,\n.ui.bottom.aligned.image svg,\n.ui.bottom.aligned.image img {\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n/*--------------\n     Rounded\n---------------*/\n\n.ui.rounded.images .image,\n.ui.rounded.image,\n.ui.rounded.images .image > *,\n.ui.rounded.image > * {\n  border-radius: 0.3125em;\n}\n\n/*--------------\n    Bordered\n---------------*/\n\n.ui.bordered.images .image,\n.ui.bordered.images img,\n.ui.bordered.images svg,\n.ui.bordered.image img,\n.ui.bordered.image svg,\nimg.ui.bordered.image {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.images,\n.ui.circular.image {\n  overflow: hidden;\n}\n\n.ui.circular.images .image,\n.ui.circular.image,\n.ui.circular.images .image > *,\n.ui.circular.image > * {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.images,\n.ui.fluid.image,\n.ui.fluid.images img,\n.ui.fluid.images svg,\n.ui.fluid.image svg,\n.ui.fluid.image img {\n  display: block;\n  width: 100%;\n  height: auto;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.avatar.images .image,\n.ui.avatar.images img,\n.ui.avatar.images svg,\n.ui.avatar.image img,\n.ui.avatar.image svg,\n.ui.avatar.image {\n  margin-right: 0.25em;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*-------------------\n       Spaced\n--------------------*/\n\n.ui.spaced.image {\n  display: inline-block !important;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.ui[class*=\"left spaced\"].image {\n  margin-left: 0.5em;\n  margin-right: 0em;\n}\n\n.ui[class*=\"right spaced\"].image {\n  margin-left: 0em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.image,\n.ui.floated.images {\n  float: left;\n  margin-right: 1em;\n  margin-bottom: 1em;\n}\n\n.ui.right.floated.images,\n.ui.right.floated.image {\n  float: right;\n  margin-right: 0em;\n  margin-bottom: 1em;\n  margin-left: 1em;\n}\n\n.ui.floated.images:last-child,\n.ui.floated.image:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.centered.images,\n.ui.centered.image {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.images .image,\n.ui.mini.images img,\n.ui.mini.images svg,\n.ui.mini.image {\n  width: 35px;\n  height: auto;\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.images .image,\n.ui.tiny.images img,\n.ui.tiny.images svg,\n.ui.tiny.image {\n  width: 80px;\n  height: auto;\n  font-size: 0.85714286rem;\n}\n\n.ui.small.images .image,\n.ui.small.images img,\n.ui.small.images svg,\n.ui.small.image {\n  width: 150px;\n  height: auto;\n  font-size: 0.92857143rem;\n}\n\n.ui.medium.images .image,\n.ui.medium.images img,\n.ui.medium.images svg,\n.ui.medium.image {\n  width: 300px;\n  height: auto;\n  font-size: 1rem;\n}\n\n.ui.large.images .image,\n.ui.large.images img,\n.ui.large.images svg,\n.ui.large.image {\n  width: 450px;\n  height: auto;\n  font-size: 1.14285714rem;\n}\n\n.ui.big.images .image,\n.ui.big.images img,\n.ui.big.images svg,\n.ui.big.image {\n  width: 600px;\n  height: auto;\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.images .image,\n.ui.huge.images img,\n.ui.huge.images svg,\n.ui.huge.image {\n  width: 800px;\n  height: auto;\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.images .image,\n.ui.massive.images img,\n.ui.massive.images svg,\n.ui.massive.image {\n  width: 960px;\n  height: auto;\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n              Groups\n*******************************/\n\n.ui.images {\n  font-size: 0em;\n  margin: 0em -0.25rem 0rem;\n}\n\n.ui.images .image,\n.ui.images img,\n.ui.images svg {\n  display: inline-block;\n  margin: 0em 0.25rem 0.5rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Input\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Standard\n*******************************/\n\n/*--------------------\n        Inputs\n---------------------*/\n\n.ui.input {\n  position: relative;\n  font-weight: normal;\n  font-style: normal;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.input input {\n  margin: 0em;\n  max-width: 100%;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-align: left;\n  line-height: 1.2142em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  padding: 0.67861429em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-transition: box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease;\n  box-shadow: none;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n\n.ui.input input::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.input input::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.input input:-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n        Disabled\n---------------------*/\n\n.ui.disabled.input,\n.ui.input input[disabled] {\n  opacity: 0.45;\n}\n\n.ui.disabled.input input,\n.ui.input input[disabled] {\n  pointer-events: none;\n}\n\n/*--------------------\n        Active\n---------------------*/\n\n.ui.input input:active,\n.ui.input.down input {\n  border-color: rgba(0, 0, 0, 0.3);\n  background: #FAFAFA;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.loading.input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.loading.input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.input.focus input,\n.ui.input input:focus {\n  border-color: #85B7D9;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.8);\n  box-shadow: none;\n}\n\n.ui.input.focus input::-webkit-input-placeholder,\n.ui.input input:focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.input.focus input::-moz-placeholder,\n.ui.input input:focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.input.focus input:-ms-input-placeholder,\n.ui.input input:focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n.ui.input.error input {\n  background-color: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  box-shadow: none;\n}\n\n/* Error Placeholder */\n\n.ui.input.error input::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.input.error input::-moz-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.input.error input:-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n\n/* Focused Error Placeholder */\n\n.ui.input.error input:focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n\n.ui.input.error input:focus::-moz-placeholder {\n  color: #da9796;\n}\n\n.ui.input.error input:focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n      Transparent\n---------------------*/\n\n.ui.transparent.input input {\n  border-color: transparent !important;\n  background-color: transparent !important;\n  padding: 0em !important;\n  box-shadow: none !important;\n}\n\n/* Transparent Icon */\n\n.ui.transparent.icon.input > i.icon {\n  width: 1.1em;\n}\n\n.ui.transparent.icon.input > input {\n  padding-left: 0em !important;\n  padding-right: 2em !important;\n}\n\n.ui.transparent[class*=\"left icon\"].input > input {\n  padding-left: 2em !important;\n  padding-right: 0em !important;\n}\n\n/* Transparent Inverted */\n\n.ui.transparent.inverted.input {\n  color: #FFFFFF;\n}\n\n.ui.transparent.inverted.input input {\n  color: inherit;\n}\n\n.ui.transparent.inverted.input input::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.transparent.inverted.input input::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.transparent.inverted.input input:-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/*--------------------\n         Icon\n---------------------*/\n\n.ui.icon.input > i.icon {\n  cursor: default;\n  position: absolute;\n  line-height: 1;\n  text-align: center;\n  top: 0px;\n  right: 0px;\n  margin: 0em;\n  height: 100%;\n  width: 2.67142857em;\n  opacity: 0.5;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n\n.ui.icon.input > i.icon:not(.link) {\n  pointer-events: none;\n}\n\n.ui.icon.input input {\n  padding-right: 2.67142857em !important;\n}\n\n.ui.icon.input > i.icon:before,\n.ui.icon.input > i.icon:after {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  top: 50%;\n  width: 100%;\n  margin-top: -0.5em;\n}\n\n.ui.icon.input > i.link.icon {\n  cursor: pointer;\n}\n\n.ui.icon.input > i.circular.icon {\n  top: 0.35em;\n  right: 0.5em;\n}\n\n/* Left Icon Input */\n\n.ui[class*=\"left icon\"].input > i.icon {\n  right: auto;\n  left: 1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"left icon\"].input > i.circular.icon {\n  right: auto;\n  left: 0.5em;\n}\n\n.ui[class*=\"left icon\"].input > input {\n  padding-left: 2.67142857em !important;\n  padding-right: 1em !important;\n}\n\n/* Focus */\n\n.ui.icon.input > input:focus ~ i.icon {\n  opacity: 1;\n}\n\n/*--------------------\n        Labeled\n---------------------*/\n\n/* Adjacent Label */\n\n.ui.labeled.input > .label {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  margin: 0;\n  font-size: 1em;\n}\n\n.ui.labeled.input > .label:not(.corner) {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n}\n\n/* Regular Label on Left */\n\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n  border-left-color: transparent;\n}\n\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input:focus {\n  border-left-color: #85B7D9;\n}\n\n/* Regular Label on Right */\n\n.ui[class*=\"right labeled\"].input input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n\n.ui[class*=\"right labeled\"].input input + .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n.ui[class*=\"right labeled\"].input input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Corner Label */\n\n.ui.labeled.input .corner.label {\n  top: 1px;\n  right: 1px;\n  font-size: 0.64285714em;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Spacing with corner label */\n\n.ui[class*=\"corner labeled\"]:not([class*=\"left corner labeled\"]).labeled.input input {\n  padding-right: 2.5em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > input {\n  padding-right: 3.25em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > .icon {\n  margin-right: 1.25em;\n}\n\n/* Left Labeled */\n\n.ui[class*=\"left corner labeled\"].labeled.input input {\n  padding-left: 2.5em !important;\n}\n\n.ui[class*=\"left corner labeled\"].icon.input > input {\n  padding-left: 3.25em !important;\n}\n\n.ui[class*=\"left corner labeled\"].icon.input > .icon {\n  margin-left: 1.25em;\n}\n\n/* Corner Label Position  */\n\n.ui.input > .ui.corner.label {\n  top: 1px;\n  right: 1px;\n}\n\n.ui.input > .ui.left.corner.label {\n  right: auto;\n  left: 1px;\n}\n\n/*--------------------\n        Action\n---------------------*/\n\n.ui.action.input > .button,\n.ui.action.input > .buttons {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n}\n\n.ui.action.input > .button,\n.ui.action.input > .buttons > .button {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n  margin: 0;\n}\n\n/* Button on Right */\n\n.ui.action.input:not([class*=\"left action\"]) > input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .button:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .buttons:not(:first-child) > .button {\n  border-radius: 0px;\n}\n\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .button:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .buttons:last-child > .button {\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px;\n}\n\n/* Input Focus */\n\n.ui.action.input:not([class*=\"left action\"]) input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Button on Left */\n\n.ui[class*=\"left action\"].input > input {\n  border-top-left-radius: 0px !important;\n  border-bottom-left-radius: 0px !important;\n  border-left-color: transparent !important;\n}\n\n.ui[class*=\"left action\"].input > .dropdown,\n.ui[class*=\"left action\"].input > .button,\n.ui[class*=\"left action\"].input > .buttons > .button {\n  border-radius: 0px;\n}\n\n.ui[class*=\"left action\"].input > .dropdown:first-child,\n.ui[class*=\"left action\"].input > .button:first-child,\n.ui[class*=\"left action\"].input > .buttons:first-child > .button {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Input Focus */\n\n.ui[class*=\"left action\"].input > input:focus {\n  border-left-color: #85B7D9 !important;\n}\n\n/*--------------------\n       Inverted\n---------------------*/\n\n/* Standard */\n\n.ui.inverted.input input {\n  border: none;\n}\n\n/*--------------------\n        Fluid\n---------------------*/\n\n.ui.fluid.input {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.ui.fluid.input > input {\n  width: 0px !important;\n}\n\n/*--------------------\n        Size\n---------------------*/\n\n.ui.mini.input {\n  font-size: 0.78571429em;\n}\n\n.ui.small.input {\n  font-size: 0.92857143em;\n}\n\n.ui.input {\n  font-size: 1em;\n}\n\n.ui.large.input {\n  font-size: 1.14285714em;\n}\n\n.ui.big.input {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.input {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.input {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Label\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Label\n*******************************/\n\n.ui.label {\n  display: inline-block;\n  line-height: 1;\n  vertical-align: baseline;\n  margin: 0em 0.14285714em;\n  background-color: #E8E8E8;\n  background-image: none;\n  padding: 0.5833em 0.833em;\n  color: rgba(0, 0, 0, 0.6);\n  text-transform: none;\n  font-weight: bold;\n  border: 0px solid transparent;\n  border-radius: 0.28571429rem;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.label:first-child {\n  margin-left: 0em;\n}\n\n.ui.label:last-child {\n  margin-right: 0em;\n}\n\n/* Link */\n\na.ui.label {\n  cursor: pointer;\n}\n\n/* Inside Link */\n\n.ui.label > a {\n  cursor: pointer;\n  color: inherit;\n  opacity: 0.5;\n  -webkit-transition: 0.1s opacity ease;\n  transition: 0.1s opacity ease;\n}\n\n.ui.label > a:hover {\n  opacity: 1;\n}\n\n/* Image */\n\n.ui.label > img {\n  width: auto !important;\n  vertical-align: middle;\n  height: 2.1666em !important;\n}\n\n/* Icon */\n\n.ui.label > .icon {\n  width: auto;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Detail */\n\n.ui.label > .detail {\n  display: inline-block;\n  vertical-align: top;\n  font-weight: bold;\n  margin-left: 1em;\n  opacity: 0.8;\n}\n\n.ui.label > .detail .icon {\n  margin: 0em 0.25em 0em 0em;\n}\n\n/* Removable label */\n\n.ui.label > .close.icon,\n.ui.label > .delete.icon {\n  cursor: pointer;\n  margin-right: 0em;\n  margin-left: 0.5em;\n  font-size: 0.92857143em;\n  opacity: 0.5;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.label > .delete.icon:hover {\n  opacity: 1;\n}\n\n/*-------------------\n       Group\n--------------------*/\n\n.ui.labels > .label {\n  margin: 0em 0.5em 0.5em 0em;\n}\n\n/*-------------------\n       Coupling\n--------------------*/\n\n.ui.header > .ui.label {\n  margin-top: -0.29165em;\n}\n\n/* Remove border radius on attached segment */\n\n.ui.attached.segment > .ui.top.left.attached.label,\n.ui.bottom.attached.segment > .ui.top.left.attached.label {\n  border-top-left-radius: 0;\n}\n\n.ui.attached.segment > .ui.top.right.attached.label,\n.ui.bottom.attached.segment > .ui.top.right.attached.label {\n  border-top-right-radius: 0;\n}\n\n.ui.top.attached.segment > .ui.bottom.left.attached.label {\n  border-bottom-left-radius: 0;\n}\n\n.ui.top.attached.segment > .ui.bottom.right.attached.label {\n  border-bottom-right-radius: 0;\n}\n\n/* Padding on next content after a label */\n\n.ui.top.attached.label:first-child + :not(.attached),\n.ui.top.attached.label + [class*=\"right floated\"] + * {\n  margin-top: 2rem !important;\n}\n\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\n  margin-top: 0em;\n  margin-bottom: 2rem !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.image.label {\n  width: auto !important;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  max-width: 9999px;\n  vertical-align: baseline;\n  text-transform: none;\n  background: #E8E8E8;\n  padding: 0.5833em 0.833em 0.5833em 0.5em;\n  border-radius: 0.28571429rem;\n  box-shadow: none;\n}\n\n.ui.image.label img {\n  display: inline-block;\n  vertical-align: top;\n  height: 2.1666em;\n  margin: -0.5833em 0.5em -0.5833em -0.5em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui.image.label .detail {\n  background: rgba(0, 0, 0, 0.1);\n  margin: -0.5833em -0.833em -0.5833em 0.5em;\n  padding: 0.5833em 0.833em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/*-------------------\n         Tag\n--------------------*/\n\n.ui.tag.labels .label,\n.ui.tag.label {\n  margin-left: 1em;\n  position: relative;\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: none;\n  transition: none;\n}\n\n.ui.tag.labels .label:before,\n.ui.tag.label:before {\n  position: absolute;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  top: 50%;\n  right: 100%;\n  content: '';\n  background-color: inherit;\n  background-image: none;\n  width: 1.56em;\n  height: 1.56em;\n  -webkit-transition: none;\n  transition: none;\n}\n\n.ui.tag.labels .label:after,\n.ui.tag.label:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: -0.25em;\n  margin-top: -0.25em;\n  background-color: #FFFFFF !important;\n  width: 0.5em;\n  height: 0.5em;\n  box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n  border-radius: 500rem;\n}\n\n/*-------------------\n    Corner Label\n--------------------*/\n\n.ui.corner.label {\n  position: absolute;\n  top: 0em;\n  right: 0em;\n  margin: 0em;\n  padding: 0em;\n  text-align: center;\n  border-color: #E8E8E8;\n  width: 4em;\n  height: 4em;\n  z-index: 1;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n/* Icon Label */\n\n.ui.corner.label {\n  background-color: transparent !important;\n}\n\n.ui.corner.label:after {\n  position: absolute;\n  content: \"\";\n  right: 0em;\n  top: 0em;\n  z-index: -1;\n  width: 0em;\n  height: 0em;\n  background-color: transparent !important;\n  border-top: 0em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 4em solid transparent;\n  border-left: 0em solid transparent;\n  border-right-color: inherit;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n.ui.corner.label .icon {\n  cursor: default;\n  position: relative;\n  top: 0.64285714em;\n  left: 0.78571429em;\n  font-size: 1.14285714em;\n  margin: 0em;\n}\n\n/* Left Corner */\n\n.ui.left.corner.label,\n.ui.left.corner.label:after {\n  right: auto;\n  left: 0em;\n}\n\n.ui.left.corner.label:after {\n  border-top: 4em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 0em solid transparent;\n  border-left: 0em solid transparent;\n  border-top-color: inherit;\n}\n\n.ui.left.corner.label .icon {\n  left: -0.78571429em;\n}\n\n/* Segment */\n\n.ui.segment > .ui.corner.label {\n  top: -1px;\n  right: -1px;\n}\n\n.ui.segment > .ui.left.corner.label {\n  right: auto;\n  left: -1px;\n}\n\n/*-------------------\n       Ribbon\n--------------------*/\n\n.ui.ribbon.label {\n  position: relative;\n  margin: 0em;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.ui.ribbon.label:after {\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 0%;\n  background-color: transparent !important;\n  border-style: solid;\n  border-width: 0em 1.2em 1.2em 0em;\n  border-color: transparent;\n  border-right-color: inherit;\n  width: 0em;\n  height: 0em;\n}\n\n/* Positioning */\n\n.ui.ribbon.label {\n  left: calc( -1rem  -  1.2em );\n  margin-right: -1.2em;\n  padding-left: calc( 1rem  +  1.2em );\n  padding-right: 1.2em;\n}\n\n.ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  1rem  +  1.2em );\n  padding-left: 1.2em;\n  padding-right: calc( 1rem  +  1.2em );\n}\n\n/* Right Ribbon */\n\n.ui[class*=\"right ribbon\"].label {\n  text-align: left;\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"right ribbon\"].label:after {\n  left: auto;\n  right: 0%;\n  border-style: solid;\n  border-width: 1.2em 1.2em 0em 0em;\n  border-color: transparent;\n  border-top-color: inherit;\n}\n\n/* Inside Table */\n\n.ui.image > .ribbon.label,\n.ui.card .image > .ribbon.label {\n  position: absolute;\n  top: 1rem;\n}\n\n.ui.card .image > .ui.ribbon.label,\n.ui.image > .ui.ribbon.label {\n  left: calc( 0.05rem  -  1.2em );\n}\n\n.ui.card .image > .ui[class*=\"right ribbon\"].label,\n.ui.image > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  -0.05rem  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/* Inside Table */\n\n.ui.table td > .ui.ribbon.label {\n  left: calc( -0.78571429em  -  1.2em );\n}\n\n.ui.table td > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  0.78571429em  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui[class*=\"top attached\"].label,\n.ui.attached.label {\n  width: 100%;\n  position: absolute;\n  margin: 0em;\n  top: 0em;\n  left: 0em;\n  padding: 0.75em 1em;\n  border-radius: 0.21428571rem 0.21428571rem 0em 0em;\n}\n\n.ui[class*=\"bottom attached\"].label {\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0em 0.21428571rem 0.21428571rem;\n}\n\n.ui[class*=\"top left attached\"].label {\n  width: auto;\n  margin-top: 0em !important;\n  border-radius: 0.21428571rem 0em 0.28571429rem 0em;\n}\n\n.ui[class*=\"top right attached\"].label {\n  width: auto;\n  left: auto;\n  right: 0em;\n  border-radius: 0em 0.21428571rem 0em 0.28571429rem;\n}\n\n.ui[class*=\"bottom left attached\"].label {\n  width: auto;\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0.28571429rem 0em 0.21428571rem;\n}\n\n.ui[class*=\"bottom right attached\"].label {\n  top: auto;\n  bottom: 0em;\n  left: auto;\n  right: 0em;\n  width: auto;\n  border-radius: 0.28571429rem 0em 0.21428571rem 0em;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.label.disabled {\n  opacity: 0.5;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\na.ui.labels .label:hover,\na.ui.label:hover {\n  background-color: #E0E0E0;\n  border-color: #E0E0E0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.labels a.label:hover:before,\na.ui.label:hover:before {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n        Active\n--------------------*/\n\n.ui.active.label {\n  background-color: #D0D0D0;\n  border-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.label:before {\n  background-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n     Active Hover\n--------------------*/\n\na.ui.labels .active.label:hover,\na.ui.active.label:hover {\n  background-color: #C8C8C8;\n  border-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.labels a.active.label:ActiveHover:before,\na.ui.active.label:ActiveHover:before {\n  background-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n      Visible\n--------------------*/\n\n.ui.labels.visible .label,\n.ui.label.visible:not(.dropdown) {\n  display: inline-block !important;\n}\n\n/*-------------------\n      Hidden\n--------------------*/\n\n.ui.labels.hidden .label,\n.ui.label.hidden {\n  display: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n\n.ui.red.labels .label,\n.ui.red.label {\n  background-color: #DB2828 !important;\n  border-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.red.labels .label:hover,\na.ui.red.label:hover {\n  background-color: #d01919 !important;\n  border-color: #d01919 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.red.corner.label,\n.ui.red.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.red.ribbon.label {\n  border-color: #b21e1e !important;\n}\n\n/* Basic */\n\n.ui.basic.red.label {\n  background-color: #FFFFFF !important;\n  color: #DB2828 !important;\n  border-color: #DB2828 !important;\n}\n\n.ui.basic.red.labels a.label:hover,\na.ui.basic.red.label:hover {\n  background-color: #FFFFFF !important;\n  color: #d01919 !important;\n  border-color: #d01919 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.labels .label,\n.ui.orange.label {\n  background-color: #F2711C !important;\n  border-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.orange.labels .label:hover,\na.ui.orange.label:hover {\n  background-color: #f26202 !important;\n  border-color: #f26202 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.orange.corner.label,\n.ui.orange.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.orange.ribbon.label {\n  border-color: #cf590c !important;\n}\n\n/* Basic */\n\n.ui.basic.orange.label {\n  background-color: #FFFFFF !important;\n  color: #F2711C !important;\n  border-color: #F2711C !important;\n}\n\n.ui.basic.orange.labels a.label:hover,\na.ui.basic.orange.label:hover {\n  background-color: #FFFFFF !important;\n  color: #f26202 !important;\n  border-color: #f26202 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.labels .label,\n.ui.yellow.label {\n  background-color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.yellow.labels .label:hover,\na.ui.yellow.label:hover {\n  background-color: #eaae00 !important;\n  border-color: #eaae00 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.yellow.corner.label,\n.ui.yellow.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.yellow.ribbon.label {\n  border-color: #cd9903 !important;\n}\n\n/* Basic */\n\n.ui.basic.yellow.label {\n  background-color: #FFFFFF !important;\n  color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n}\n\n.ui.basic.yellow.labels a.label:hover,\na.ui.basic.yellow.label:hover {\n  background-color: #FFFFFF !important;\n  color: #eaae00 !important;\n  border-color: #eaae00 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.labels .label,\n.ui.olive.label {\n  background-color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.olive.labels .label:hover,\na.ui.olive.label:hover {\n  background-color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.olive.corner.label,\n.ui.olive.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.olive.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n\n.ui.basic.olive.label {\n  background-color: #FFFFFF !important;\n  color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n}\n\n.ui.basic.olive.labels a.label:hover,\na.ui.basic.olive.label:hover {\n  background-color: #FFFFFF !important;\n  color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.labels .label,\n.ui.green.label {\n  background-color: #21BA45 !important;\n  border-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.green.labels .label:hover,\na.ui.green.label:hover {\n  background-color: #16ab39 !important;\n  border-color: #16ab39 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.green.corner.label,\n.ui.green.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.green.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n\n.ui.basic.green.label {\n  background-color: #FFFFFF !important;\n  color: #21BA45 !important;\n  border-color: #21BA45 !important;\n}\n\n.ui.basic.green.labels a.label:hover,\na.ui.basic.green.label:hover {\n  background-color: #FFFFFF !important;\n  color: #16ab39 !important;\n  border-color: #16ab39 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.labels .label,\n.ui.teal.label {\n  background-color: #00B5AD !important;\n  border-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.teal.labels .label:hover,\na.ui.teal.label:hover {\n  background-color: #009c95 !important;\n  border-color: #009c95 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.teal.corner.label,\n.ui.teal.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.teal.ribbon.label {\n  border-color: #00827c !important;\n}\n\n/* Basic */\n\n.ui.basic.teal.label {\n  background-color: #FFFFFF !important;\n  color: #00B5AD !important;\n  border-color: #00B5AD !important;\n}\n\n.ui.basic.teal.labels a.label:hover,\na.ui.basic.teal.label:hover {\n  background-color: #FFFFFF !important;\n  color: #009c95 !important;\n  border-color: #009c95 !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.labels .label,\n.ui.blue.label {\n  background-color: #2185D0 !important;\n  border-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.blue.labels .label:hover,\na.ui.blue.label:hover {\n  background-color: #1678c2 !important;\n  border-color: #1678c2 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.blue.corner.label,\n.ui.blue.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.blue.ribbon.label {\n  border-color: #1a69a4 !important;\n}\n\n/* Basic */\n\n.ui.basic.blue.label {\n  background-color: #FFFFFF !important;\n  color: #2185D0 !important;\n  border-color: #2185D0 !important;\n}\n\n.ui.basic.blue.labels a.label:hover,\na.ui.basic.blue.label:hover {\n  background-color: #FFFFFF !important;\n  color: #1678c2 !important;\n  border-color: #1678c2 !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.labels .label,\n.ui.violet.label {\n  background-color: #6435C9 !important;\n  border-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.violet.labels .label:hover,\na.ui.violet.label:hover {\n  background-color: #5829bb !important;\n  border-color: #5829bb !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.violet.corner.label,\n.ui.violet.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.violet.ribbon.label {\n  border-color: #502aa1 !important;\n}\n\n/* Basic */\n\n.ui.basic.violet.label {\n  background-color: #FFFFFF !important;\n  color: #6435C9 !important;\n  border-color: #6435C9 !important;\n}\n\n.ui.basic.violet.labels a.label:hover,\na.ui.basic.violet.label:hover {\n  background-color: #FFFFFF !important;\n  color: #5829bb !important;\n  border-color: #5829bb !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.labels .label,\n.ui.purple.label {\n  background-color: #A333C8 !important;\n  border-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.purple.labels .label:hover,\na.ui.purple.label:hover {\n  background-color: #9627ba !important;\n  border-color: #9627ba !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.purple.corner.label,\n.ui.purple.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.purple.ribbon.label {\n  border-color: #82299f !important;\n}\n\n/* Basic */\n\n.ui.basic.purple.label {\n  background-color: #FFFFFF !important;\n  color: #A333C8 !important;\n  border-color: #A333C8 !important;\n}\n\n.ui.basic.purple.labels a.label:hover,\na.ui.basic.purple.label:hover {\n  background-color: #FFFFFF !important;\n  color: #9627ba !important;\n  border-color: #9627ba !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.labels .label,\n.ui.pink.label {\n  background-color: #E03997 !important;\n  border-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.pink.labels .label:hover,\na.ui.pink.label:hover {\n  background-color: #e61a8d !important;\n  border-color: #e61a8d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.pink.corner.label,\n.ui.pink.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.pink.ribbon.label {\n  border-color: #c71f7e !important;\n}\n\n/* Basic */\n\n.ui.basic.pink.label {\n  background-color: #FFFFFF !important;\n  color: #E03997 !important;\n  border-color: #E03997 !important;\n}\n\n.ui.basic.pink.labels a.label:hover,\na.ui.basic.pink.label:hover {\n  background-color: #FFFFFF !important;\n  color: #e61a8d !important;\n  border-color: #e61a8d !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.labels .label,\n.ui.brown.label {\n  background-color: #A5673F !important;\n  border-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.brown.labels .label:hover,\na.ui.brown.label:hover {\n  background-color: #975b33 !important;\n  border-color: #975b33 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.brown.corner.label,\n.ui.brown.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.brown.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n\n.ui.basic.brown.label {\n  background-color: #FFFFFF !important;\n  color: #A5673F !important;\n  border-color: #A5673F !important;\n}\n\n.ui.basic.brown.labels a.label:hover,\na.ui.basic.brown.label:hover {\n  background-color: #FFFFFF !important;\n  color: #975b33 !important;\n  border-color: #975b33 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.labels .label,\n.ui.grey.label {\n  background-color: #767676 !important;\n  border-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.grey.labels .label:hover,\na.ui.grey.label:hover {\n  background-color: #838383 !important;\n  border-color: #838383 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.grey.corner.label,\n.ui.grey.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.grey.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n\n.ui.basic.grey.label {\n  background-color: #FFFFFF !important;\n  color: #767676 !important;\n  border-color: #767676 !important;\n}\n\n.ui.basic.grey.labels a.label:hover,\na.ui.basic.grey.label:hover {\n  background-color: #FFFFFF !important;\n  color: #838383 !important;\n  border-color: #838383 !important;\n}\n\n/*--- Black ---*/\n\n.ui.black.labels .label,\n.ui.black.label {\n  background-color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.black.labels .label:hover,\na.ui.black.label:hover {\n  background-color: #27292a !important;\n  border-color: #27292a !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.black.corner.label,\n.ui.black.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.black.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n\n.ui.basic.black.label {\n  background-color: #FFFFFF !important;\n  color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n}\n\n.ui.basic.black.labels a.label:hover,\na.ui.basic.black.label:hover {\n  background-color: #FFFFFF !important;\n  color: #27292a !important;\n  border-color: #27292a !important;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.label {\n  background: none #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n}\n\n/* Link */\n\na.ui.basic.label:hover {\n  text-decoration: none;\n  background: none #FFFFFF;\n  color: #1e70bf;\n  box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n\n/* Pointing */\n\n.ui.basic.pointing.label:before {\n  border-color: inherit;\n}\n\n/*-------------------\n       Fluid\n--------------------*/\n\n.ui.label.fluid,\n.ui.fluid.labels > .label {\n  width: 100%;\n  box-sizing: border-box;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.labels .label,\n.ui.inverted.label {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n/*-------------------\n     Horizontal\n--------------------*/\n\n.ui.horizontal.labels .label,\n.ui.horizontal.label {\n  margin: 0em 0.5em 0em 0em;\n  padding: 0.4em 0.833em;\n  min-width: 3em;\n  text-align: center;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.labels .label,\n.ui.circular.label {\n  min-width: 2em;\n  min-height: 2em;\n  padding: 0.5em !important;\n  line-height: 1em;\n  text-align: center;\n  border-radius: 500rem;\n}\n\n.ui.empty.circular.labels .label,\n.ui.empty.circular.label {\n  min-width: 0em;\n  min-height: 0em;\n  overflow: hidden;\n  width: 0.5em;\n  height: 0.5em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.label {\n  position: relative;\n}\n\n.ui.attached.pointing.label {\n  position: absolute;\n}\n\n.ui.pointing.label:before {\n  background-color: inherit;\n  background-image: inherit;\n  border-width: none;\n  border-style: solid;\n  border-color: inherit;\n}\n\n/* Arrow */\n\n.ui.pointing.label:before {\n  position: absolute;\n  content: '';\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  background-image: none;\n  z-index: 2;\n  width: 0.6666em;\n  height: 0.6666em;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n/*--- Above ---*/\n\n.ui.pointing.label,\n.ui[class*=\"pointing above\"].label {\n  margin-top: 1em;\n}\n\n.ui.pointing.label:before,\n.ui[class*=\"pointing above\"].label:before {\n  border-width: 1px 0px 0px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 0%;\n  left: 50%;\n}\n\n/*--- Below ---*/\n\n.ui[class*=\"bottom pointing\"].label,\n.ui[class*=\"pointing below\"].label {\n  margin-top: 0em;\n  margin-bottom: 1em;\n}\n\n.ui[class*=\"bottom pointing\"].label:before,\n.ui[class*=\"pointing below\"].label:before {\n  border-width: 0px 1px 1px 0px;\n  top: auto;\n  right: auto;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 100%;\n  left: 50%;\n}\n\n/*--- Left ---*/\n\n.ui[class*=\"left pointing\"].label {\n  margin-top: 0em;\n  margin-left: 0.6666em;\n}\n\n.ui[class*=\"left pointing\"].label:before {\n  border-width: 0px 0px 1px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*--- Right ---*/\n\n.ui[class*=\"right pointing\"].label {\n  margin-top: 0em;\n  margin-right: 0.6666em;\n}\n\n.ui[class*=\"right pointing\"].label:before {\n  border-width: 1px 1px 0px 0px;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n}\n\n/* Basic Pointing */\n\n/*--- Above ---*/\n\n.ui.basic.pointing.label:before,\n.ui.basic[class*=\"pointing above\"].label:before {\n  margin-top: -1px;\n}\n\n/*--- Below ---*/\n\n.ui.basic[class*=\"bottom pointing\"].label:before,\n.ui.basic[class*=\"pointing below\"].label:before {\n  bottom: auto;\n  top: 100%;\n  margin-top: 1px;\n}\n\n/*--- Left ---*/\n\n.ui.basic[class*=\"left pointing\"].label:before {\n  top: 50%;\n  left: -1px;\n}\n\n/*--- Right ---*/\n\n.ui.basic[class*=\"right pointing\"].label:before {\n  top: 50%;\n  right: -1px;\n}\n\n/*------------------\n   Floating Label\n-------------------*/\n\n.ui.floating.label {\n  position: absolute;\n  z-index: 100;\n  top: -1em;\n  left: 100%;\n  margin: 0em 0em 0em -1.5em !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.labels .label,\n.ui.mini.label {\n  font-size: 0.64285714rem;\n}\n\n.ui.tiny.labels .label,\n.ui.tiny.label {\n  font-size: 0.71428571rem;\n}\n\n.ui.small.labels .label,\n.ui.small.label {\n  font-size: 0.78571429rem;\n}\n\n.ui.labels .label,\n.ui.label {\n  font-size: 0.85714286rem;\n}\n\n.ui.large.labels .label,\n.ui.large.label {\n  font-size: 1rem;\n}\n\n.ui.big.labels .label,\n.ui.big.label {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.labels .label,\n.ui.huge.label {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.labels .label,\n.ui.massive.label {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - List\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            List\n*******************************/\n\nul.ui.list,\nol.ui.list,\n.ui.list {\n  list-style-type: none;\n  margin: 1em 0em;\n  padding: 0em 0em;\n}\n\nul.ui.list:first-child,\nol.ui.list:first-child,\n.ui.list:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\nul.ui.list:last-child,\nol.ui.list:last-child,\n.ui.list:last-child {\n  margin-bottom: 0em;\n  padding-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* List Item */\n\nul.ui.list li,\nol.ui.list li,\n.ui.list > .item,\n.ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n\nul.ui.list > li:first-child:after,\nol.ui.list > li:first-child:after,\n.ui.list > .list > .item,\n.ui.list > .item:after {\n  content: '';\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\nul.ui.list li:first-child,\nol.ui.list li:first-child,\n.ui.list .list > .item:first-child,\n.ui.list > .item:first-child {\n  padding-top: 0em;\n}\n\nul.ui.list li:last-child,\nol.ui.list li:last-child,\n.ui.list .list > .item:last-child,\n.ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/* Child List */\n\nul.ui.list ul,\nol.ui.list ol,\n.ui.list .list {\n  clear: both;\n  margin: 0em;\n  padding: 0.75em 0em 0.25em 0.5em;\n}\n\n/* Child Item */\n\nul.ui.list ul li,\nol.ui.list ol li,\n.ui.list .list > .item {\n  padding: 0.14285714em 0em;\n  line-height: inherit;\n}\n\n/* Icon */\n\n.ui.list .list > .item > i.icon,\n.ui.list > .item > i.icon {\n  display: table-cell;\n  margin: 0em;\n  padding-top: 0.07142857em;\n  padding-right: 0.28571429em;\n  vertical-align: top;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.list .list > .item > i.icon:only-child,\n.ui.list > .item > i.icon:only-child {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* Image */\n\n.ui.list .list > .item > .image,\n.ui.list > .item > .image {\n  display: table-cell;\n  background-color: transparent;\n  margin: 0em;\n  vertical-align: top;\n}\n\n.ui.list .list > .item > .image:not(:only-child):not(img),\n.ui.list > .item > .image:not(:only-child):not(img) {\n  padding-right: 0.5em;\n}\n\n.ui.list .list > .item > .image img,\n.ui.list > .item > .image img {\n  vertical-align: top;\n}\n\n.ui.list .list > .item > img.image,\n.ui.list .list > .item > .image:only-child,\n.ui.list > .item > img.image,\n.ui.list > .item > .image:only-child {\n  display: inline-block;\n}\n\n/* Content */\n\n.ui.list .list > .item > .content,\n.ui.list > .item > .content {\n  line-height: 1.14285714em;\n}\n\n.ui.list .list > .item > .image + .content,\n.ui.list .list > .item > .icon + .content,\n.ui.list > .item > .image + .content,\n.ui.list > .item > .icon + .content {\n  display: table-cell;\n  padding: 0em 0em 0em 0.5em;\n  vertical-align: top;\n}\n\n.ui.list .list > .item > img.image + .content,\n.ui.list > .item > img.image + .content {\n  display: inline-block;\n}\n\n.ui.list .list > .item > .content > .list,\n.ui.list > .item > .content > .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n/* Header */\n\n.ui.list .list > .item .header,\n.ui.list > .item .header {\n  display: block;\n  margin: 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Description */\n\n.ui.list .list > .item .description,\n.ui.list > .item .description {\n  display: block;\n  color: rgba(0, 0, 0, 0.7);\n}\n\n/* Child Link */\n\n.ui.list > .item a,\n.ui.list .list > .item a {\n  cursor: pointer;\n}\n\n/* Linking Item */\n\n.ui.list .list > a.item,\n.ui.list > a.item {\n  cursor: pointer;\n  color: #4183C4;\n}\n\n.ui.list .list > a.item:hover,\n.ui.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linked Item Icons */\n\n.ui.list .list > a.item i.icon,\n.ui.list > a.item i.icon {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Header Link */\n\n.ui.list .list > .item a.header,\n.ui.list > .item a.header {\n  cursor: pointer;\n  color: #4183C4 !important;\n}\n\n.ui.list .list > .item a.header:hover,\n.ui.list > .item a.header:hover {\n  color: #1e70bf !important;\n}\n\n/* Floated Content */\n\n.ui[class*=\"left floated\"].list {\n  float: left;\n}\n\n.ui[class*=\"right floated\"].list {\n  float: right;\n}\n\n.ui.list .list > .item [class*=\"left floated\"],\n.ui.list > .item [class*=\"left floated\"] {\n  float: left;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.list .list > .item [class*=\"right floated\"],\n.ui.list > .item [class*=\"right floated\"] {\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.menu .ui.list > .item,\n.ui.menu .ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  background-color: transparent;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n\n.ui.menu .ui.list .list > .item:before,\n.ui.menu .ui.list > .item:before {\n  border: none;\n  background: none;\n}\n\n.ui.menu .ui.list .list > .item:first-child,\n.ui.menu .ui.list > .item:first-child {\n  padding-top: 0em;\n}\n\n.ui.menu .ui.list .list > .item:last-child,\n.ui.menu .ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*-------------------\n      Horizontal\n--------------------*/\n\n.ui.horizontal.list {\n  display: inline-block;\n  font-size: 0em;\n}\n\n.ui.horizontal.list > .item {\n  display: inline-block;\n  margin-left: 1em;\n  font-size: 1rem;\n}\n\n.ui.horizontal.list:not(.celled) > .item:first-child {\n  margin-left: 0em !important;\n  padding-left: 0em !important;\n}\n\n.ui.horizontal.list .list {\n  padding-left: 0em;\n  padding-bottom: 0em;\n}\n\n.ui.horizontal.list > .item > .image,\n.ui.horizontal.list .list > .item > .image,\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list .list > .item > .icon,\n.ui.horizontal.list > .item > .content,\n.ui.horizontal.list .list > .item > .content {\n  vertical-align: middle;\n}\n\n/* Padding on all elements */\n\n.ui.horizontal.list > .item:first-child,\n.ui.horizontal.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Horizontal List */\n\n.ui.horizontal.list > .item > i.icon {\n  margin: 0em;\n  padding: 0em 0.25em 0em 0em;\n}\n\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list > .item > .icon + .content {\n  float: none;\n  display: inline-block;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n.ui.list .list > .disabled.item,\n.ui.list > .disabled.item {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3) !important;\n}\n\n.ui.inverted.list .list > .disabled.item,\n.ui.inverted.list > .disabled.item {\n  color: rgba(225, 225, 225, 0.3) !important;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\n.ui.list .list > a.item:hover .icon,\n.ui.list > a.item:hover .icon {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.list .list > a.item > .icon,\n.ui.inverted.list > a.item > .icon {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.ui.inverted.list .list > .item .header,\n.ui.inverted.list > .item .header {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.list .list > .item .description,\n.ui.inverted.list > .item .description {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Item Link */\n\n.ui.inverted.list .list > a.item,\n.ui.inverted.list > a.item {\n  cursor: pointer;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.list .list > a.item:hover,\n.ui.inverted.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linking Content */\n\n.ui.inverted.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n.ui.inverted.list .item a:not(.ui):hover {\n  color: #1e70bf !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.list[class*=\"top aligned\"] .image,\n.ui.list[class*=\"top aligned\"] .content,\n.ui.list [class*=\"top aligned\"] {\n  vertical-align: top !important;\n}\n\n.ui.list[class*=\"middle aligned\"] .image,\n.ui.list[class*=\"middle aligned\"] .content,\n.ui.list [class*=\"middle aligned\"] {\n  vertical-align: middle !important;\n}\n\n.ui.list[class*=\"bottom aligned\"] .image,\n.ui.list[class*=\"bottom aligned\"] .content,\n.ui.list [class*=\"bottom aligned\"] {\n  vertical-align: bottom !important;\n}\n\n/*-------------------\n       Link\n--------------------*/\n\n.ui.link.list .item,\n.ui.link.list a.item,\n.ui.link.list .item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-transition: 0.1s color ease;\n  transition: 0.1s color ease;\n}\n\n.ui.link.list a.item:hover,\n.ui.link.list .item a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.link.list a.item:active,\n.ui.link.list .item a:not(.ui):active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.ui.link.list .active.item,\n.ui.link.list .active.item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.link.list .item,\n.ui.inverted.link.list a.item,\n.ui.inverted.link.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.inverted.link.list a.item:hover,\n.ui.inverted.link.list .item a:not(.ui):hover {\n  color: #ffffff;\n}\n\n.ui.inverted.link.list a.item:active,\n.ui.inverted.link.list .item a:not(.ui):active {\n  color: #ffffff;\n}\n\n.ui.inverted.link.list a.active.item,\n.ui.inverted.link.list .active.item a:not(.ui) {\n  color: #ffffff;\n}\n\n/*-------------------\n      Selection\n--------------------*/\n\n.ui.selection.list .list > .item,\n.ui.selection.list > .item {\n  cursor: pointer;\n  background: transparent;\n  padding: 0.5em 0.5em;\n  margin: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  border-radius: 0.5em;\n  -webkit-transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n  transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n}\n\n.ui.selection.list .list > .item:last-child,\n.ui.selection.list > .item:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.selection.list.list > .item:hover,\n.ui.selection.list > .item:hover {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.selection.list .list > .item:active,\n.ui.selection.list > .item:active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.ui.selection.list .list > .item.active,\n.ui.selection.list > .item.active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.selection.list > .item,\n.ui.inverted.selection.list > .item {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.inverted.selection.list > .item:hover,\n.ui.inverted.selection.list > .item:hover {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n.ui.inverted.selection.list > .item:active,\n.ui.inverted.selection.list > .item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n.ui.inverted.selection.list > .item.active,\n.ui.inverted.selection.list > .item.active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/* Celled / Divided Selection List */\n\n.ui.celled.selection.list .list > .item,\n.ui.divided.selection.list .list > .item,\n.ui.celled.selection.list > .item,\n.ui.divided.selection.list > .item {\n  border-radius: 0em;\n}\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.list > .item {\n  -webkit-transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n  transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n}\n\n.ui.animated.list:not(.horizontal) > .item:hover {\n  padding-left: 1em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.list:not(.selection) .list > .item,\n.ui.fitted.list:not(.selection) > .item {\n  padding-left: 0em;\n  padding-right: 0em;\n}\n\n.ui.fitted.selection.list .list > .item,\n.ui.fitted.selection.list > .item {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n/*-------------------\n      Bulleted\n--------------------*/\n\nul.ui.list,\n.ui.bulleted.list {\n  margin-left: 1.25rem;\n}\n\nul.ui.list li,\n.ui.bulleted.list .list > .item,\n.ui.bulleted.list > .item {\n  position: relative;\n}\n\nul.ui.list li:before,\n.ui.bulleted.list .list > .item:before,\n.ui.bulleted.list > .item:before {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  pointer-events: none;\n  position: absolute;\n  top: auto;\n  left: auto;\n  font-weight: normal;\n  margin-left: -1.25rem;\n  content: '•';\n  opacity: 1;\n  color: inherit;\n  vertical-align: top;\n}\n\nul.ui.list li:before,\n.ui.bulleted.list .list > a.item:before,\n.ui.bulleted.list > a.item:before {\n  color: rgba(0, 0, 0, 0.87);\n}\n\nul.ui.list ul,\n.ui.bulleted.list .list {\n  padding-left: 1.25rem;\n}\n\n/* Horizontal Bulleted */\n\nul.ui.horizontal.bulleted.list,\n.ui.horizontal.bulleted.list {\n  margin-left: 0em;\n}\n\nul.ui.horizontal.bulleted.list li,\n.ui.horizontal.bulleted.list > .item {\n  margin-left: 1.75rem;\n}\n\nul.ui.horizontal.bulleted.list li:first-child,\n.ui.horizontal.bulleted.list > .item:first-child {\n  margin-left: 0em;\n}\n\nul.ui.horizontal.bulleted.list li::before,\n.ui.horizontal.bulleted.list > .item::before {\n  color: rgba(0, 0, 0, 0.87);\n}\n\nul.ui.horizontal.bulleted.list li:first-child::before,\n.ui.horizontal.bulleted.list > .item:first-child::before {\n  display: none;\n}\n\n/*-------------------\n       Ordered\n--------------------*/\n\nol.ui.list,\n.ui.ordered.list,\n.ui.ordered.list .list,\nol.ui.list ol {\n  counter-reset: ordered;\n  margin-left: 1.25rem;\n  list-style-type: none;\n}\n\nol.ui.list li,\n.ui.ordered.list .list > .item,\n.ui.ordered.list > .item {\n  list-style-type: none;\n  position: relative;\n}\n\nol.ui.list li:before,\n.ui.ordered.list .list > .item:before,\n.ui.ordered.list > .item:before {\n  position: absolute;\n  top: auto;\n  left: auto;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  pointer-events: none;\n  margin-left: -1.25rem;\n  counter-increment: ordered;\n  content: counters(ordered, \".\") \" \";\n  text-align: right;\n  color: rgba(0, 0, 0, 0.87);\n  vertical-align: middle;\n  opacity: 0.8;\n}\n\nol.ui.inverted.list li:before,\n.ui.ordered.inverted.list .list > .item:before,\n.ui.ordered.inverted.list > .item:before {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Value */\n\n.ui.ordered.list > .list > .item[data-value],\n.ui.ordered.list > .item[data-value] {\n  content: attr(data-value);\n}\n\nol.ui.list li[value]:before {\n  content: attr(value);\n}\n\n/* Child Lists */\n\nol.ui.list ol,\n.ui.ordered.list .list {\n  margin-left: 1em;\n}\n\nol.ui.list ol li:before,\n.ui.ordered.list .list > .item:before {\n  margin-left: -2em;\n}\n\n/* Horizontal Ordered */\n\nol.ui.horizontal.list,\n.ui.ordered.horizontal.list {\n  margin-left: 0em;\n}\n\nol.ui.horizontal.list li:before,\n.ui.ordered.horizontal.list .list > .item:before,\n.ui.ordered.horizontal.list > .item:before {\n  position: static;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*-------------------\n       Divided\n--------------------*/\n\n.ui.divided.list > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.divided.list .list > .item {\n  border-top: none;\n}\n\n.ui.divided.list .item .list > .item {\n  border-top: none;\n}\n\n.ui.divided.list .list > .item:first-child,\n.ui.divided.list > .item:first-child {\n  border-top: none;\n}\n\n/* Sub Menu */\n\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\n  border-top-width: 1px;\n}\n\n/* Divided bulleted */\n\n.ui.divided.bulleted.list:not(.horizontal),\n.ui.divided.bulleted.list .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n.ui.divided.bulleted.list > .item:not(.horizontal) {\n  padding-left: 1.25rem;\n}\n\n/* Divided Ordered */\n\n.ui.divided.ordered.list {\n  margin-left: 0em;\n}\n\n.ui.divided.ordered.list .list > .item,\n.ui.divided.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.divided.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n\n.ui.divided.ordered.list .item .list > .item {\n  padding-left: 1em;\n}\n\n/* Divided Selection */\n\n.ui.divided.selection.list .list > .item,\n.ui.divided.selection.list > .item {\n  margin: 0em;\n  border-radius: 0em;\n}\n\n/* Divided horizontal */\n\n.ui.divided.horizontal.list {\n  margin-left: 0em;\n}\n\n.ui.divided.horizontal.list > .item:not(:first-child) {\n  padding-left: 0.5em;\n}\n\n.ui.divided.horizontal.list > .item:not(:last-child) {\n  padding-right: 0.5em;\n}\n\n.ui.divided.horizontal.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  line-height: 0.6;\n}\n\n.ui.horizontal.divided.list > .item:first-child {\n  border-left: none;\n}\n\n/* Inverted */\n\n.ui.divided.inverted.list > .item,\n.ui.divided.inverted.list > .list,\n.ui.divided.inverted.horizontal.list > .item {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Celled\n--------------------*/\n\n.ui.celled.list > .item,\n.ui.celled.list > .list {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.celled.list > .item:last-child {\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Padding on all elements */\n\n.ui.celled.list > .item:first-child,\n.ui.celled.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Sub Menu */\n\n.ui.celled.list .item .list > .item {\n  border-width: 0px;\n}\n\n.ui.celled.list .list > .item:first-child {\n  border-top-width: 0px;\n}\n\n/* Celled Bulleted */\n\n.ui.celled.bulleted.list {\n  margin-left: 0em;\n}\n\n.ui.celled.bulleted.list .list > .item,\n.ui.celled.bulleted.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.celled.bulleted.list .item .list {\n  margin-left: -1.25rem;\n  margin-right: -1.25rem;\n  padding-bottom: 0.21428571em;\n}\n\n/* Celled Ordered */\n\n.ui.celled.ordered.list {\n  margin-left: 0em;\n}\n\n.ui.celled.ordered.list .list > .item,\n.ui.celled.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.celled.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n\n.ui.celled.ordered.list .list > .item {\n  padding-left: 1em;\n}\n\n/* Celled Horizontal */\n\n.ui.horizontal.celled.list {\n  margin-left: 0em;\n}\n\n.ui.horizontal.celled.list .list > .item,\n.ui.horizontal.celled.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  line-height: 0.6;\n}\n\n.ui.horizontal.celled.list .list > .item:last-child,\n.ui.horizontal.celled.list > .item:last-child {\n  border-bottom: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Inverted */\n\n.ui.celled.inverted.list > .item,\n.ui.celled.inverted.list > .list {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.ui.celled.inverted.horizontal.list .list > .item,\n.ui.celled.inverted.horizontal.list > .item {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n       Relaxed\n--------------------*/\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.42857143em;\n}\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.42857143em;\n}\n\n.ui.horizontal.relaxed.list .list > .item:not(:first-child),\n.ui.horizontal.relaxed.list > .item:not(:first-child) {\n  padding-left: 1rem;\n}\n\n.ui.horizontal.relaxed.list .list > .item:not(:last-child),\n.ui.horizontal.relaxed.list > .item:not(:last-child) {\n  padding-right: 1rem;\n}\n\n/* Very Relaxed */\n\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.85714286em;\n}\n\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.85714286em;\n}\n\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:first-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:first-child) {\n  padding-left: 1.5rem;\n}\n\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:last-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:last-child) {\n  padding-right: 1.5rem;\n}\n\n/*-------------------\n      Sizes\n--------------------*/\n\n.ui.mini.list {\n  font-size: 0.78571429em;\n}\n\n.ui.tiny.list {\n  font-size: 0.85714286em;\n}\n\n.ui.small.list {\n  font-size: 0.92857143em;\n}\n\n.ui.list {\n  font-size: 1em;\n}\n\n.ui.large.list {\n  font-size: 1.14285714em;\n}\n\n.ui.big.list {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.list {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.list {\n  font-size: 1.71428571em;\n}\n\n.ui.mini.horizontal.list .list > .item,\n.ui.mini.horizontal.list > .item {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.horizontal.list .list > .item,\n.ui.tiny.horizontal.list > .item {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.horizontal.list .list > .item,\n.ui.small.horizontal.list > .item {\n  font-size: 0.92857143rem;\n}\n\n.ui.horizontal.list .list > .item,\n.ui.horizontal.list > .item {\n  font-size: 1rem;\n}\n\n.ui.large.horizontal.list .list > .item,\n.ui.large.horizontal.list > .item {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.horizontal.list .list > .item,\n.ui.big.horizontal.list > .item {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.horizontal.list .list > .item,\n.ui.huge.horizontal.list > .item {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.horizontal.list .list > .item,\n.ui.massive.horizontal.list > .item {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Loader\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Loader\n*******************************/\n\n/* Standard Size */\n\n.ui.loader {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: 0px;\n  text-align: center;\n  z-index: 1000;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n}\n\n/* Static Shape */\n\n.ui.loader:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n/* Active Shape */\n\n.ui.loader:after {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  -webkit-animation: loader 0.6s linear;\n  animation: loader 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/* Active Animation */\n\n@-webkit-keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/* Sizes */\n\n.ui.mini.loader:before,\n.ui.mini.loader:after {\n  width: 1rem;\n  height: 1rem;\n  margin: 0em 0em 0em -0.5rem;\n}\n\n.ui.tiny.loader:before,\n.ui.tiny.loader:after {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  margin: 0em 0em 0em -0.57142857rem;\n}\n\n.ui.small.loader:before,\n.ui.small.loader:after {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  margin: 0em 0em 0em -0.85714286rem;\n}\n\n.ui.loader:before,\n.ui.loader:after {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  margin: 0em 0em 0em -1.14285714rem;\n}\n\n.ui.large.loader:before,\n.ui.large.loader:after {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  margin: 0em 0em 0em -1.71428571rem;\n}\n\n.ui.big.loader:before,\n.ui.big.loader:after {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  margin: 0em 0em 0em -1.85714286rem;\n}\n\n.ui.huge.loader:before,\n.ui.huge.loader:after {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  margin: 0em 0em 0em -2.07142857rem;\n}\n\n.ui.massive.loader:before,\n.ui.massive.loader:after {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  margin: 0em 0em 0em -2.28571429rem;\n}\n\n/*-------------------\n      Coupling\n--------------------*/\n\n/* Show inside active dimmer */\n\n.ui.dimmer .loader {\n  display: block;\n}\n\n/* Black Dimmer */\n\n.ui.dimmer .ui.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.dimmer .ui.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.ui.dimmer .ui.loader:after {\n  border-color: #FFFFFF transparent transparent;\n}\n\n/* White Dimmer (Inverted) */\n\n.ui.inverted.dimmer .ui.loader {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.dimmer .ui.loader:before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.ui.inverted.dimmer .ui.loader:after {\n  border-color: #767676 transparent transparent;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n        Text\n--------------------*/\n\n.ui.text.loader {\n  width: auto !important;\n  height: auto !important;\n  text-align: center;\n  font-style: normal;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.indeterminate.loader:after {\n  -webkit-animation-direction: reverse;\n  animation-direction: reverse;\n  -webkit-animation-duration: 1.2s;\n  animation-duration: 1.2s;\n}\n\n.ui.loader.active,\n.ui.loader.visible {\n  display: block;\n}\n\n.ui.loader.disabled,\n.ui.loader.hidden {\n  display: none;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*-------------------\n        Sizes\n--------------------*/\n\n/* Loader */\n\n.ui.inverted.dimmer .ui.mini.loader,\n.ui.mini.loader {\n  width: 1rem;\n  height: 1rem;\n  font-size: 0.78571429em;\n}\n\n.ui.inverted.dimmer .ui.tiny.loader,\n.ui.tiny.loader {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  font-size: 0.85714286em;\n}\n\n.ui.inverted.dimmer .ui.small.loader,\n.ui.small.loader {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  font-size: 0.92857143em;\n}\n\n.ui.inverted.dimmer .ui.loader,\n.ui.loader {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  font-size: 1em;\n}\n\n.ui.inverted.dimmer .ui.large.loader,\n.ui.large.loader {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  font-size: 1.14285714em;\n}\n\n.ui.inverted.dimmer .ui.big.loader,\n.ui.big.loader {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  font-size: 1.28571429em;\n}\n\n.ui.inverted.dimmer .ui.huge.loader,\n.ui.huge.loader {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  font-size: 1.42857143em;\n}\n\n.ui.inverted.dimmer .ui.massive.loader,\n.ui.massive.loader {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  font-size: 1.71428571em;\n}\n\n/* Text Loader */\n\n.ui.mini.text.loader {\n  min-width: 1rem;\n  padding-top: 1.78571429rem;\n}\n\n.ui.tiny.text.loader {\n  min-width: 1.14285714rem;\n  padding-top: 1.92857143rem;\n}\n\n.ui.small.text.loader {\n  min-width: 1.71428571rem;\n  padding-top: 2.5rem;\n}\n\n.ui.text.loader {\n  min-width: 2.28571429rem;\n  padding-top: 3.07142857rem;\n}\n\n.ui.large.text.loader {\n  min-width: 3.42857143rem;\n  padding-top: 4.21428571rem;\n}\n\n.ui.big.text.loader {\n  min-width: 3.71428571rem;\n  padding-top: 4.5rem;\n}\n\n.ui.huge.text.loader {\n  min-width: 4.14285714rem;\n  padding-top: 4.92857143rem;\n}\n\n.ui.massive.text.loader {\n  min-width: 4.57142857rem;\n  padding-top: 5.35714286rem;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.ui.inverted.loader:after {\n  border-top-color: #FFFFFF;\n}\n\n/*-------------------\n       Inline\n--------------------*/\n\n.ui.inline.loader {\n  position: relative;\n  vertical-align: middle;\n  margin: 0em;\n  left: 0em;\n  top: 0em;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.ui.inline.loader.active,\n.ui.inline.loader.visible {\n  display: inline-block;\n}\n\n/* Centered Inline */\n\n.ui.centered.inline.loader.active,\n.ui.centered.inline.loader.visible {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Rail\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Rails\n*******************************/\n\n.ui.rail {\n  position: absolute;\n  top: 0%;\n  width: 300px;\n  height: 100%;\n}\n\n.ui.left.rail {\n  left: auto;\n  right: 100%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n.ui.right.rail {\n  left: 100%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Internal\n---------------*/\n\n.ui.left.internal.rail {\n  left: 0%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n.ui.right.internal.rail {\n  left: auto;\n  right: 0%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n/*--------------\n    Dividing\n---------------*/\n\n.ui.dividing.rail {\n  width: 302.5px;\n}\n\n.ui.left.dividing.rail {\n  padding: 0em 2.5rem 0em 0em;\n  margin: 0em 2.5rem 0em 0em;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.right.dividing.rail {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  padding: 0em 0em 0em 2.5rem;\n  margin: 0em 0em 0em 2.5rem;\n}\n\n/*--------------\n    Distance\n---------------*/\n\n.ui.close.rail {\n  width: calc( 300px  +  1em );\n}\n\n.ui.close.left.rail {\n  padding: 0em 1em 0em 0em;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.close.right.rail {\n  padding: 0em 0em 0em 1em;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.very.close.rail {\n  width: calc( 300px  +  0.5em );\n}\n\n.ui.very.close.left.rail {\n  padding: 0em 0.5em 0em 0em;\n  margin: 0em 0.5em 0em 0em;\n}\n\n.ui.very.close.right.rail {\n  padding: 0em 0em 0em 0.5em;\n  margin: 0em 0em 0em 0.5em;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.left.rail,\n.ui.attached.right.rail {\n  padding: 0em;\n  margin: 0em;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.mini.rail {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.rail {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.rail {\n  font-size: 0.92857143rem;\n}\n\n.ui.rail {\n  font-size: 1rem;\n}\n\n.ui.large.rail {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.rail {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.rail {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.rail {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Reveal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Reveal\n*******************************/\n\n.ui.reveal {\n  display: inherit;\n  position: relative !important;\n  font-size: 0em !important;\n}\n\n.ui.reveal > .visible.content {\n  position: absolute !important;\n  top: 0em !important;\n  left: 0em !important;\n  z-index: 3 !important;\n  -webkit-transition: all 0.5s ease 0.1s;\n  transition: all 0.5s ease 0.1s;\n}\n\n.ui.reveal > .hidden.content {\n  position: relative !important;\n  z-index: 2 !important;\n}\n\n/* Make sure hovered element is on top of other reveal */\n\n.ui.active.reveal .visible.content,\n.ui.reveal:hover .visible.content {\n  z-index: 4 !important;\n}\n\n/*******************************\n              Types\n*******************************/\n\n/*--------------\n      Slide\n---------------*/\n\n.ui.slide.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.slide.reveal > .content {\n  display: block;\n  width: 100%;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s ease 0.1s;\n  transition: -webkit-transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s, -webkit-transform 0.5s ease 0.1s;\n}\n\n.ui.slide.reveal > .visible.content {\n  position: relative !important;\n}\n\n.ui.slide.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n  -webkit-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.slide.active.reveal > .visible.content,\n.ui.slide.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.slide.active.reveal > .hidden.content,\n.ui.slide.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.right.reveal > .visible.content {\n  -webkit-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.right.reveal > .hidden.content {\n  -webkit-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.slide.right.active.reveal > .visible.content,\n.ui.slide.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.slide.right.active.reveal > .hidden.content,\n.ui.slide.right.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.up.reveal > .hidden.content {\n  -webkit-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n.ui.slide.up.active.reveal > .visible.content,\n.ui.slide.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.slide.up.active.reveal > .hidden.content,\n.ui.slide.up.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n  transform: translateY(0%) !important;\n}\n\n.ui.slide.down.reveal > .hidden.content {\n  -webkit-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.slide.down.active.reveal > .visible.content,\n.ui.slide.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n.ui.slide.down.active.reveal > .hidden.content,\n.ui.slide.down.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n  transform: translateY(0%) !important;\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.ui.fade.reveal > .visible.content {\n  opacity: 1;\n}\n\n.ui.fade.active.reveal > .visible.content,\n.ui.fade.reveal:hover > .visible.content {\n  opacity: 0;\n}\n\n/*--------------\n      Move\n---------------*/\n\n.ui.move.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.move.reveal > .content {\n  display: block;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s, -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n}\n\n.ui.move.reveal > .visible.content {\n  position: relative !important;\n}\n\n.ui.move.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n}\n\n.ui.move.active.reveal > .visible.content,\n.ui.move.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.move.right.active.reveal > .visible.content,\n.ui.move.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.move.up.active.reveal > .visible.content,\n.ui.move.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.move.down.active.reveal > .visible.content,\n.ui.move.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n/*--------------\n     Rotate\n---------------*/\n\n.ui.rotate.reveal > .visible.content {\n  -webkit-transition-duration: 0.5s;\n  transition-duration: 0.5s;\n  -webkit-transform: rotate(0deg);\n  transform: rotate(0deg);\n}\n\n.ui.rotate.reveal > .visible.content,\n.ui.rotate.right.reveal > .visible.content {\n  -webkit-transform-origin: bottom right;\n  transform-origin: bottom right;\n}\n\n.ui.rotate.active.reveal > .visible.content,\n.ui.rotate.reveal:hover > .visible.content,\n.ui.rotate.right.active.reveal > .visible.content,\n.ui.rotate.right.reveal:hover > .visible.content {\n  -webkit-transform: rotate(110deg);\n  transform: rotate(110deg);\n}\n\n.ui.rotate.left.reveal > .visible.content {\n  -webkit-transform-origin: bottom left;\n  transform-origin: bottom left;\n}\n\n.ui.rotate.left.active.reveal > .visible.content,\n.ui.rotate.left.reveal:hover > .visible.content {\n  -webkit-transform: rotate(-110deg);\n  transform: rotate(-110deg);\n}\n\n/*******************************\n              States\n*******************************/\n\n.ui.disabled.reveal:hover > .visible.visible.content {\n  position: static !important;\n  display: block !important;\n  opacity: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: auto !important;\n  bottom: auto !important;\n  -webkit-transform: none !important;\n  transform: none !important;\n}\n\n.ui.disabled.reveal:hover > .hidden.hidden.content {\n  display: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.reveal {\n  overflow: visible;\n}\n\n/*--------------\n     Instant\n---------------*/\n\n.ui.instant.reveal > .content {\n  -webkit-transition-delay: 0s !important;\n  transition-delay: 0s !important;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.reveal > .content {\n  font-size: 1rem !important;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Segment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Segment\n*******************************/\n\n.ui.segment {\n  position: relative;\n  background: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  padding: 1em 1em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.segment:first-child {\n  margin-top: 0em;\n}\n\n.ui.segment:last-child {\n  margin-bottom: 0em;\n}\n\n/* Vertical */\n\n.ui.vertical.segment {\n  margin: 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n  background: none transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.vertical.segment:last-child {\n  border-bottom: none;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Header */\n\n.ui.inverted.segment > .ui.header {\n  color: #FFFFFF;\n}\n\n/* Label */\n\n.ui[class*=\"bottom attached\"].segment > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n\n.ui[class*=\"top attached\"].segment > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n/* Grid */\n\n.ui.page.grid.segment,\n.ui.grid > .row > .ui.segment.column,\n.ui.grid > .ui.segment.column {\n  padding-top: 2em;\n  padding-bottom: 2em;\n}\n\n.ui.grid.segment {\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n}\n\n/* Table */\n\n.ui.basic.table.segment {\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n.ui[class*=\"very basic\"].table.segment {\n  padding: 1em 1em;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n        Piled\n--------------------*/\n\n.ui.piled.segments,\n.ui.piled.segment {\n  margin: 3em 0em;\n  box-shadow: '';\n  z-index: auto;\n}\n\n.ui.piled.segment:first-child {\n  margin-top: 0em;\n}\n\n.ui.piled.segment:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.piled.segments:after,\n.ui.piled.segments:before,\n.ui.piled.segment:after,\n.ui.piled.segment:before {\n  background-color: #FFFFFF;\n  visibility: visible;\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0px;\n  position: absolute;\n  width: 100%;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: '';\n}\n\n.ui.piled.segments:before,\n.ui.piled.segment:before {\n  -webkit-transform: rotate(-1.2deg);\n  transform: rotate(-1.2deg);\n  top: 0;\n  z-index: -2;\n}\n\n.ui.piled.segments:after,\n.ui.piled.segment:after {\n  -webkit-transform: rotate(1.2deg);\n  transform: rotate(1.2deg);\n  top: 0;\n  z-index: -1;\n}\n\n/* Piled Attached */\n\n.ui[class*=\"top attached\"].piled.segment {\n  margin-top: 3em;\n  margin-bottom: 0em;\n}\n\n.ui.piled.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n.ui.piled.segment[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 3em;\n}\n\n.ui.piled.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n       Stacked\n--------------------*/\n\n.ui.stacked.segment {\n  padding-bottom: 1.4em;\n}\n\n.ui.stacked.segments:before,\n.ui.stacked.segments:after,\n.ui.stacked.segment:before,\n.ui.stacked.segment:after {\n  content: '';\n  position: absolute;\n  bottom: -3px;\n  left: 0%;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: rgba(0, 0, 0, 0.03);\n  width: 100%;\n  height: 6px;\n  visibility: visible;\n}\n\n.ui.stacked.segments:before,\n.ui.stacked.segment:before {\n  display: none;\n}\n\n/* Add additional page */\n\n.ui.tall.stacked.segments:before,\n.ui.tall.stacked.segment:before {\n  display: block;\n  bottom: 0px;\n}\n\n/* Inverted */\n\n.ui.stacked.inverted.segments:before,\n.ui.stacked.inverted.segments:after,\n.ui.stacked.inverted.segment:before,\n.ui.stacked.inverted.segment:after {\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(34, 36, 38, 0.35);\n}\n\n/*-------------------\n       Padded\n--------------------*/\n\n.ui.padded.segment {\n  padding: 1.5em;\n}\n\n.ui[class*=\"very padded\"].segment {\n  padding: 3em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.segment {\n  display: table;\n}\n\n/* Compact Group */\n\n.ui.compact.segments {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n\n.ui.compact.segments .segment,\n.ui.segments .compact.segment {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.segment {\n  display: table-cell;\n  padding: 2em;\n  text-align: center;\n  vertical-align: middle;\n  border-radius: 500em;\n}\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.segments,\n.ui.raised.segment {\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*******************************\n            Groups\n*******************************/\n\n/* Group */\n\n.ui.segments {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n  margin: 1rem 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n\n.ui.segments:first-child {\n  margin-top: 0em;\n}\n\n.ui.segments:last-child {\n  margin-bottom: 0em;\n}\n\n/* Nested Segment */\n\n.ui.segments > .segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em;\n  width: auto;\n  box-shadow: none;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.segments:not(.horizontal) > .segment:first-child {\n  border-top: none;\n  margin-top: 0em;\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n\n.ui.segments:not(.horizontal) > .segment:last-child {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Only */\n\n.ui.segments:not(.horizontal) > .segment:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Nested Group */\n\n.ui.segments > .ui.segments {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 1rem 1rem;\n}\n\n.ui.segments > .segments:first-child {\n  border-top: none;\n}\n\n.ui.segments > .segment + .segments:not(.horizontal) {\n  margin-top: 0em;\n}\n\n/* Horizontal Group */\n\n.ui.horizontal.segments {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  background-color: transparent;\n  border-radius: 0px;\n  padding: 0em;\n  background-color: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Nested Horizontal Group */\n\n.ui.segments > .horizontal.segments {\n  margin: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Horizontal Segment */\n\n.ui.horizontal.segments > .segment {\n  -webkit-box-flex: 1;\n  flex: 1 1 auto;\n  -ms-flex: 1 1 0px;\n  /* Solves #2550 MS Flex */\n  margin: 0em;\n  min-width: 0px;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Border Fixes */\n\n.ui.segments > .horizontal.segments:first-child {\n  border-top: none;\n}\n\n.ui.horizontal.segments > .segment:first-child {\n  border-left: none;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.segment {\n  opacity: 0.45;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.segment {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  -webkit-transition: all 0s linear;\n  transition: all 0s linear;\n}\n\n.ui.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  border-radius: 0.28571429rem;\n  z-index: 100;\n}\n\n.ui.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: segment-spin 0.6s linear;\n  animation: segment-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n\n@-webkit-keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Basic\n--------------------*/\n\n.ui.basic.segment {\n  background: none transparent;\n  box-shadow: none;\n  border: none;\n  border-radius: 0px;\n}\n\n/*-------------------\n       Clearing\n--------------------*/\n\n.ui.clearing.segment:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.segment:not(.inverted) {\n  border-top: 2px solid #DB2828;\n}\n\n.ui.inverted.red.segment {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n\n.ui.orange.segment:not(.inverted) {\n  border-top: 2px solid #F2711C;\n}\n\n.ui.inverted.orange.segment {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n\n.ui.yellow.segment:not(.inverted) {\n  border-top: 2px solid #FBBD08;\n}\n\n.ui.inverted.yellow.segment {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n\n.ui.olive.segment:not(.inverted) {\n  border-top: 2px solid #B5CC18;\n}\n\n.ui.inverted.olive.segment {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n\n.ui.green.segment:not(.inverted) {\n  border-top: 2px solid #21BA45;\n}\n\n.ui.inverted.green.segment {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n\n.ui.teal.segment:not(.inverted) {\n  border-top: 2px solid #00B5AD;\n}\n\n.ui.inverted.teal.segment {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n\n.ui.blue.segment:not(.inverted) {\n  border-top: 2px solid #2185D0;\n}\n\n.ui.inverted.blue.segment {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n\n.ui.violet.segment:not(.inverted) {\n  border-top: 2px solid #6435C9;\n}\n\n.ui.inverted.violet.segment {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n\n.ui.purple.segment:not(.inverted) {\n  border-top: 2px solid #A333C8;\n}\n\n.ui.inverted.purple.segment {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n\n.ui.pink.segment:not(.inverted) {\n  border-top: 2px solid #E03997;\n}\n\n.ui.inverted.pink.segment {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n\n.ui.brown.segment:not(.inverted) {\n  border-top: 2px solid #A5673F;\n}\n\n.ui.inverted.brown.segment {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n\n.ui.grey.segment:not(.inverted) {\n  border-top: 2px solid #767676;\n}\n\n.ui.inverted.grey.segment {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n\n.ui.black.segment:not(.inverted) {\n  border-top: 2px solid #1B1C1D;\n}\n\n.ui.inverted.black.segment {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui[class*=\"left aligned\"].segment {\n  text-align: left;\n}\n\n.ui[class*=\"right aligned\"].segment {\n  text-align: right;\n}\n\n.ui[class*=\"center aligned\"].segment {\n  text-align: center;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.segment,\n.ui[class*=\"left floated\"].segment {\n  float: left;\n  margin-right: 1em;\n}\n\n.ui[class*=\"right floated\"].segment {\n  float: right;\n  margin-left: 1em;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.segment {\n  border: none;\n  box-shadow: none;\n}\n\n.ui.inverted.segment,\n.ui.primary.inverted.segment {\n  background: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Nested */\n\n.ui.inverted.segment .segment {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.segment .inverted.segment {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Attached */\n\n.ui.inverted.attached.segment {\n  border-color: #555555;\n}\n\n/*-------------------\n     Emphasis\n--------------------*/\n\n/* Secondary */\n\n.ui.secondary.segment {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.secondary.inverted.segment {\n  background: #4c4f52 -webkit-linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/* Tertiary */\n\n.ui.tertiary.segment {\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.tertiary.inverted.segment {\n  background: #717579 -webkit-linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n/* Middle */\n\n.ui.attached.segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached:not(.message) + .ui.attached.segment:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].segment {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui.segment[class*=\"bottom attached\"] {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Size\n--------------------*/\n\n.ui.mini.segments .segment,\n.ui.mini.segment {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.segments .segment,\n.ui.tiny.segment {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.segments .segment,\n.ui.small.segment {\n  font-size: 0.92857143rem;\n}\n\n.ui.segments .segment,\n.ui.segment {\n  font-size: 1rem;\n}\n\n.ui.large.segments .segment,\n.ui.large.segment {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.segments .segment,\n.ui.big.segment {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.segments .segment,\n.ui.huge.segment {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.segments .segment,\n.ui.massive.segment {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Step\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Plural\n*******************************/\n\n.ui.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  margin: 1em 0em;\n  background: '';\n  box-shadow: none;\n  line-height: 1.14285714em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* First Steps */\n\n.ui.steps:first-child {\n  margin-top: 0em;\n}\n\n/* Last Steps */\n\n.ui.steps:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n           Singular\n*******************************/\n\n.ui.steps .step {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  vertical-align: middle;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  margin: 0em 0em;\n  padding: 1.14285714em 2em;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  border-radius: 0em;\n  border: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n}\n\n/* Arrow */\n\n.ui.steps .step:after {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  content: '';\n  top: 50%;\n  right: 0%;\n  border: medium none;\n  background-color: #FFFFFF;\n  width: 1.14285714em;\n  height: 1.14285714em;\n  border-style: solid;\n  border-color: rgba(34, 36, 38, 0.15);\n  border-width: 0px 1px 1px 0px;\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\n}\n\n/* First Step */\n\n.ui.steps .step:first-child {\n  padding-left: 2em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n/* Last Step */\n\n.ui.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.steps .step:last-child {\n  border-right: none;\n  margin-right: 0em;\n}\n\n/* Only Step */\n\n.ui.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Title */\n\n.ui.steps .step .title {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  font-weight: bold;\n}\n\n.ui.steps .step > .title {\n  width: 100%;\n}\n\n/* Description */\n\n.ui.steps .step .description {\n  font-weight: normal;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.steps .step > .description {\n  width: 100%;\n}\n\n.ui.steps .step .title ~ .description {\n  margin-top: 0.25em;\n}\n\n/* Icon */\n\n.ui.steps .step > .icon {\n  line-height: 1;\n  font-size: 2.5em;\n  margin: 0em 1rem 0em 0em;\n}\n\n.ui.steps .step > .icon,\n.ui.steps .step > .icon ~ .content {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  -ms-flex-item-align: middle;\n  -ms-grid-row-align: middle;\n  align-self: middle;\n}\n\n.ui.steps .step > .icon ~ .content {\n  -webkit-box-flex: 1 0 auto;\n  -ms-flex-positive: 1 0 auto;\n  flex-grow: 1 0 auto;\n}\n\n/* Horizontal Icon */\n\n.ui.steps:not(.vertical) .step > .icon {\n  width: auto;\n}\n\n/* Link */\n\n.ui.steps .link.step,\n.ui.steps a.step {\n  cursor: pointer;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Ordered\n---------------*/\n\n.ui.ordered.steps {\n  counter-reset: ordered;\n}\n\n.ui.ordered.steps .step:before {\n  display: block;\n  position: static;\n  text-align: center;\n  content: counters(ordered, \".\");\n  -ms-flex-item-align: middle;\n  -ms-grid-row-align: middle;\n  align-self: middle;\n  margin-right: 1rem;\n  font-size: 2.5em;\n  counter-increment: ordered;\n  font-family: inherit;\n  font-weight: bold;\n}\n\n.ui.ordered.steps .step > * {\n  display: block;\n  -ms-flex-item-align: middle;\n  -ms-grid-row-align: middle;\n  align-self: middle;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  overflow: visible;\n}\n\n.ui.vertical.steps .step {\n  -webkit-box-pack: start;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n  border-radius: 0em;\n  padding: 1.14285714em 2em;\n  border-right: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.vertical.steps .step:first-child {\n  padding: 1.14285714em 2em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.vertical.steps .step:last-child {\n  border-bottom: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.vertical.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Arrow */\n\n.ui.vertical.steps .step:after {\n  display: none;\n}\n\n.ui.vertical.steps .step:after {\n  top: 50%;\n  right: 0%;\n  border-width: 0px 1px 1px 0px;\n}\n\n.ui.vertical.steps .step:after {\n  display: none;\n}\n\n.ui.vertical.steps .active.step:after {\n  display: block;\n}\n\n.ui.vertical.steps .step:last-child:after {\n  display: none;\n}\n\n.ui.vertical.steps .active.step:last-child:after {\n  display: block;\n}\n\n/*---------------\n    Responsive\n----------------*/\n\n/* Mobile (Default) */\n\n@media only screen and (max-width: 767px) {\n  .ui.steps {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.steps .step {\n    width: 100% !important;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n\n  .ui.steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n\n  .ui.steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n\n  /* Arrow */\n\n  .ui.steps .step:after {\n    display: none !important;\n  }\n\n  /* Content */\n\n  .ui.steps .step .content {\n    text-align: center;\n  }\n\n  /* Icon */\n\n  .ui.steps .step > .icon,\n  .ui.ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n/* Link Hover */\n\n.ui.steps .link.step:hover::after,\n.ui.steps .link.step:hover,\n.ui.steps a.step:hover::after,\n.ui.steps a.step:hover {\n  background: #F9FAFB;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Link Down */\n\n.ui.steps .link.step:active::after,\n.ui.steps .link.step:active,\n.ui.steps a.step:active::after,\n.ui.steps a.step:active {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.9);\n}\n\n/* Active */\n\n.ui.steps .step.active {\n  cursor: auto;\n  background: #F3F4F5;\n}\n\n.ui.steps .step.active:after {\n  background: #F3F4F5;\n}\n\n.ui.steps .step.active .title {\n  color: #4183C4;\n}\n\n.ui.ordered.steps .step.active:before,\n.ui.steps .active.step .icon {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Active Arrow */\n\n.ui.steps .step:after {\n  display: block;\n}\n\n.ui.steps .active.step:after {\n  display: block;\n}\n\n.ui.steps .step:last-child:after {\n  display: none;\n}\n\n.ui.steps .active.step:last-child:after {\n  display: none;\n}\n\n/* Active Hover */\n\n.ui.steps .link.active.step:hover::after,\n.ui.steps .link.active.step:hover,\n.ui.steps a.active.step:hover::after,\n.ui.steps a.active.step:hover {\n  cursor: pointer;\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Completed */\n\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  color: #21BA45;\n}\n\n/* Disabled */\n\n.ui.steps .disabled.step {\n  cursor: auto;\n  background: #FFFFFF;\n  pointer-events: none;\n}\n\n.ui.steps .disabled.step,\n.ui.steps .disabled.step .title,\n.ui.steps .disabled.step .description {\n  color: rgba(40, 40, 40, 0.3);\n}\n\n.ui.steps .disabled.step:after {\n  background: #FFFFFF;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n   Stackable\n---------------*/\n\n/* Tablet Or Below */\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].steps {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  /* Steps */\n\n  .ui[class*=\"tablet stackable\"].steps .step {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n\n  .ui[class*=\"tablet stackable\"].steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n\n  .ui[class*=\"tablet stackable\"].steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n\n  /* Arrow */\n\n  .ui[class*=\"tablet stackable\"].steps .step:after {\n    display: none !important;\n  }\n\n  /* Content */\n\n  .ui[class*=\"tablet stackable\"].steps .step .content {\n    text-align: center;\n  }\n\n  /* Icon */\n\n  .ui[class*=\"tablet stackable\"].steps .step > .icon,\n  .ui[class*=\"tablet stackable\"].ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n/* Fluid */\n\n.ui.fluid.steps {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* Top */\n\n.ui.attached.steps {\n  width: calc(100% +  2px ) !important;\n  margin: 0em -1px 0;\n  max-width: calc(100% +  2px );\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.attached.steps .step:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.attached.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n\n.ui.bottom.attached.steps {\n  margin: 0 -1px 0em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.bottom.attached.steps .step:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui.bottom.attached.steps .step:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/*-------------------\n    Evenly Divided\n--------------------*/\n\n.ui.one.steps,\n.ui.two.steps,\n.ui.three.steps,\n.ui.four.steps,\n.ui.five.steps,\n.ui.six.steps,\n.ui.seven.steps,\n.ui.eight.steps {\n  width: 100%;\n}\n\n.ui.one.steps > .step,\n.ui.two.steps > .step,\n.ui.three.steps > .step,\n.ui.four.steps > .step,\n.ui.five.steps > .step,\n.ui.six.steps > .step,\n.ui.seven.steps > .step,\n.ui.eight.steps > .step {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n}\n\n.ui.one.steps > .step {\n  width: 100%;\n}\n\n.ui.two.steps > .step {\n  width: 50%;\n}\n\n.ui.three.steps > .step {\n  width: 33.333%;\n}\n\n.ui.four.steps > .step {\n  width: 25%;\n}\n\n.ui.five.steps > .step {\n  width: 20%;\n}\n\n.ui.six.steps > .step {\n  width: 16.666%;\n}\n\n.ui.seven.steps > .step {\n  width: 14.285%;\n}\n\n.ui.eight.steps > .step {\n  width: 12.500%;\n}\n\n/*-------------------\n       Sizes\n--------------------*/\n\n.ui.mini.steps .step,\n.ui.mini.step {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.steps .step,\n.ui.tiny.step {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.steps .step,\n.ui.small.step {\n  font-size: 0.92857143rem;\n}\n\n.ui.steps .step,\n.ui.step {\n  font-size: 1rem;\n}\n\n.ui.large.steps .step,\n.ui.large.step {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.steps .step,\n.ui.big.step {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.steps .step,\n.ui.huge.step {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.steps .step,\n.ui.massive.step {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Step';\n  src: url(data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiInASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwAFJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgEUKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA) format('woff');\n}\n\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  font-family: 'Step';\n  content: '\\e800';\n  /* '' */\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Breadcrumb\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Breadcrumb\n*******************************/\n\n.ui.breadcrumb {\n  line-height: 1;\n  display: inline-block;\n  margin: 0em 0em;\n  vertical-align: middle;\n}\n\n.ui.breadcrumb:first-child {\n  margin-top: 0em;\n}\n\n.ui.breadcrumb:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n          Content\n*******************************/\n\n/* Divider */\n\n.ui.breadcrumb .divider {\n  display: inline-block;\n  opacity: 0.7;\n  margin: 0em 0.21428571rem 0em;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n  vertical-align: baseline;\n}\n\n/* Link */\n\n.ui.breadcrumb a {\n  color: #4183C4;\n}\n\n.ui.breadcrumb a:hover {\n  color: #1e70bf;\n}\n\n/* Icon Divider */\n\n.ui.breadcrumb .icon.divider {\n  font-size: 0.85714286em;\n  vertical-align: baseline;\n}\n\n/* Section */\n\n.ui.breadcrumb a.section {\n  cursor: pointer;\n}\n\n.ui.breadcrumb .section {\n  display: inline-block;\n  margin: 0em;\n  padding: 0em;\n}\n\n/* Loose Coupling */\n\n.ui.breadcrumb.segment {\n  display: inline-block;\n  padding: 0.78571429em 1em;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.breadcrumb .active.section {\n  font-weight: bold;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.mini.breadcrumb {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.breadcrumb {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.breadcrumb {\n  font-size: 0.92857143rem;\n}\n\n.ui.breadcrumb {\n  font-size: 1rem;\n}\n\n.ui.large.breadcrumb {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.breadcrumb {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.breadcrumb {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.breadcrumb {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Form\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Elements\n*******************************/\n\n/*--------------------\n        Form\n---------------------*/\n\n.ui.form {\n  position: relative;\n  max-width: 100%;\n}\n\n/*--------------------\n        Content\n---------------------*/\n\n.ui.form > p {\n  margin: 1em 0em;\n}\n\n/*--------------------\n        Field\n---------------------*/\n\n.ui.form .field {\n  clear: both;\n  margin: 0em 0em 1em;\n}\n\n.ui.form .field:last-child,\n.ui.form .fields:last-child .field {\n  margin-bottom: 0em;\n}\n\n.ui.form .fields .field {\n  clear: both;\n  margin: 0em;\n}\n\n/*--------------------\n        Labels\n---------------------*/\n\n.ui.form .field > label {\n  display: block;\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n/*--------------------\n    Standard Inputs\n---------------------*/\n\n.ui.form textarea,\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  width: 100%;\n  vertical-align: top;\n}\n\n/* Set max height on unusual input */\n\n.ui.form ::-webkit-datetime-edit,\n.ui.form ::-webkit-inner-spin-button {\n  height: 1.2142em;\n}\n\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  line-height: 1.2142em;\n  padding: 0.67861429em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/* Text Area */\n\n.ui.form textarea {\n  margin: 0em;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: 0.78571429em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  outline: none;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n  font-size: 1em;\n  line-height: 1.2857;\n  resize: vertical;\n}\n\n.ui.form textarea:not([rows]) {\n  height: 12em;\n  min-height: 8em;\n  max-height: 24em;\n}\n\n.ui.form textarea,\n.ui.form input[type=\"checkbox\"] {\n  vertical-align: top;\n}\n\n/*--------------------------\n  Input w/ attached Button\n---------------------------*/\n\n.ui.form input.attached {\n  width: auto;\n}\n\n/*--------------------\n     Basic Select\n---------------------*/\n\n.ui.form select {\n  display: block;\n  height: auto;\n  width: 100%;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  padding: 0.62em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/*--------------------\n       Dropdown\n---------------------*/\n\n/* Block */\n\n.ui.form .field > .selection.dropdown {\n  width: 100%;\n}\n\n.ui.form .field > .selection.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/* Inline */\n\n.ui.form .inline.fields .field > .selection.dropdown,\n.ui.form .inline.field > .selection.dropdown {\n  width: auto;\n}\n\n.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\n  float: none;\n}\n\n/*--------------------\n       UI Input\n---------------------*/\n\n/* Block */\n\n.ui.form .field .ui.input,\n.ui.form .fields .field .ui.input,\n.ui.form .wide.field .ui.input {\n  width: 100%;\n}\n\n/* Inline  */\n\n.ui.form .inline.fields .field:not(.wide) .ui.input,\n.ui.form .inline.field:not(.wide) .ui.input {\n  width: auto;\n  vertical-align: middle;\n}\n\n/* Auto Input */\n\n.ui.form .fields .field .ui.input input,\n.ui.form .field .ui.input input {\n  width: auto;\n}\n\n/* Full Width Input */\n\n.ui.form .ten.fields .ui.input input,\n.ui.form .nine.fields .ui.input input,\n.ui.form .eight.fields .ui.input input,\n.ui.form .seven.fields .ui.input input,\n.ui.form .six.fields .ui.input input,\n.ui.form .five.fields .ui.input input,\n.ui.form .four.fields .ui.input input,\n.ui.form .three.fields .ui.input input,\n.ui.form .two.fields .ui.input input,\n.ui.form .wide.field .ui.input input {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  width: 0px;\n}\n\n/*--------------------\n   Types of Messages\n---------------------*/\n\n.ui.form .success.message,\n.ui.form .warning.message,\n.ui.form .error.message {\n  display: none;\n}\n\n/* Assumptions */\n\n.ui.form .message:first-child {\n  margin-top: 0px;\n}\n\n/*--------------------\n   Validation Prompt\n---------------------*/\n\n.ui.form .field .prompt.label {\n  white-space: normal;\n  background: #FFFFFF !important;\n  border: 1px solid #E0B4B4 !important;\n  color: #9F3A38 !important;\n}\n\n.ui.form .inline.fields .field .prompt,\n.ui.form .inline.field .prompt {\n  vertical-align: top;\n  margin: -0.25em 0em -0.5em 0.5em;\n}\n\n.ui.form .inline.fields .field .prompt:before,\n.ui.form .inline.field .prompt:before {\n  border-width: 0px 0px 1px 1px;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n      Autofilled\n---------------------*/\n\n.ui.form .field.field input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #E5DFA1 !important;\n}\n\n/* Focus */\n\n.ui.form .field.field input:-webkit-autofill:focus {\n  box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #D5C315 !important;\n}\n\n/* Error */\n\n.ui.form .error.error input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n  border-color: #E0B4B4 !important;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n\n.ui.form ::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.form :-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.form ::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.form :focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.form :focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.form :focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/* Error Placeholder */\n\n.ui.form .error ::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.form .error :-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n\n.ui.form .error ::-moz-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.form .error :focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n\n.ui.form .error :focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n\n.ui.form .error :focus::-moz-placeholder {\n  color: #da9796;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.form input:not([type]):focus,\n.ui.form input[type=\"date\"]:focus,\n.ui.form input[type=\"datetime-local\"]:focus,\n.ui.form input[type=\"email\"]:focus,\n.ui.form input[type=\"number\"]:focus,\n.ui.form input[type=\"password\"]:focus,\n.ui.form input[type=\"search\"]:focus,\n.ui.form input[type=\"tel\"]:focus,\n.ui.form input[type=\"time\"]:focus,\n.ui.form input[type=\"text\"]:focus,\n.ui.form input[type=\"file\"]:focus,\n.ui.form input[type=\"url\"]:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n}\n\n.ui.form textarea:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  -webkit-appearance: none;\n}\n\n/*--------------------\n        Success\n---------------------*/\n\n/* On Form */\n\n.ui.form.success .success.message:not(:empty) {\n  display: block;\n}\n\n.ui.form.success .compact.success.message:not(:empty) {\n  display: inline-block;\n}\n\n.ui.form.success .icon.success.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Warning\n---------------------*/\n\n/* On Form */\n\n.ui.form.warning .warning.message:not(:empty) {\n  display: block;\n}\n\n.ui.form.warning .compact.warning.message:not(:empty) {\n  display: inline-block;\n}\n\n.ui.form.warning .icon.warning.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n/* On Form */\n\n.ui.form.error .error.message:not(:empty) {\n  display: block;\n}\n\n.ui.form.error .compact.error.message:not(:empty) {\n  display: inline-block;\n}\n\n.ui.form.error .icon.error.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/* On Field(s) */\n\n.ui.form .fields.error .field label,\n.ui.form .field.error label,\n.ui.form .fields.error .field .input,\n.ui.form .field.error .input {\n  color: #9F3A38;\n}\n\n.ui.form .fields.error .field .corner.label,\n.ui.form .field.error .corner.label {\n  border-color: #9F3A38;\n  color: #FFFFFF;\n}\n\n.ui.form .fields.error .field textarea,\n.ui.form .fields.error .field select,\n.ui.form .fields.error .field input:not([type]),\n.ui.form .fields.error .field input[type=\"date\"],\n.ui.form .fields.error .field input[type=\"datetime-local\"],\n.ui.form .fields.error .field input[type=\"email\"],\n.ui.form .fields.error .field input[type=\"number\"],\n.ui.form .fields.error .field input[type=\"password\"],\n.ui.form .fields.error .field input[type=\"search\"],\n.ui.form .fields.error .field input[type=\"tel\"],\n.ui.form .fields.error .field input[type=\"time\"],\n.ui.form .fields.error .field input[type=\"text\"],\n.ui.form .fields.error .field input[type=\"file\"],\n.ui.form .fields.error .field input[type=\"url\"],\n.ui.form .field.error textarea,\n.ui.form .field.error select,\n.ui.form .field.error input:not([type]),\n.ui.form .field.error input[type=\"date\"],\n.ui.form .field.error input[type=\"datetime-local\"],\n.ui.form .field.error input[type=\"email\"],\n.ui.form .field.error input[type=\"number\"],\n.ui.form .field.error input[type=\"password\"],\n.ui.form .field.error input[type=\"search\"],\n.ui.form .field.error input[type=\"tel\"],\n.ui.form .field.error input[type=\"time\"],\n.ui.form .field.error input[type=\"text\"],\n.ui.form .field.error input[type=\"file\"],\n.ui.form .field.error input[type=\"url\"] {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  border-radius: '';\n  box-shadow: none;\n}\n\n.ui.form .field.error textarea:focus,\n.ui.form .field.error select:focus,\n.ui.form .field.error input:not([type]):focus,\n.ui.form .field.error input[type=\"date\"]:focus,\n.ui.form .field.error input[type=\"datetime-local\"]:focus,\n.ui.form .field.error input[type=\"email\"]:focus,\n.ui.form .field.error input[type=\"number\"]:focus,\n.ui.form .field.error input[type=\"password\"]:focus,\n.ui.form .field.error input[type=\"search\"]:focus,\n.ui.form .field.error input[type=\"tel\"]:focus,\n.ui.form .field.error input[type=\"time\"]:focus,\n.ui.form .field.error input[type=\"text\"]:focus,\n.ui.form .field.error input[type=\"file\"]:focus,\n.ui.form .field.error input[type=\"url\"]:focus {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-appearance: none;\n  box-shadow: none;\n}\n\n/* Preserve Native Select Stylings */\n\n.ui.form .field.error select {\n  -webkit-appearance: menulist-button;\n}\n\n/*------------------\n    Dropdown Error\n--------------------*/\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .fields.error .field .ui.dropdown .item,\n.ui.form .field.error .ui.dropdown,\n.ui.form .field.error .ui.dropdown .text,\n.ui.form .field.error .ui.dropdown .item {\n  background: #FFF6F6;\n  color: #9F3A38;\n}\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .field.error .ui.dropdown {\n  border-color: #E0B4B4 !important;\n}\n\n.ui.form .fields.error .field .ui.dropdown:hover,\n.ui.form .field.error .ui.dropdown:hover {\n  border-color: #E0B4B4 !important;\n}\n\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\n.ui.form .field.error .ui.dropdown:hover .menu {\n  border-color: #E0B4B4;\n}\n\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\n  background-color: #EACBCB;\n  color: #9F3A38;\n}\n\n/* Hover */\n\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\n.ui.form .field.error .ui.dropdown .menu .item:hover {\n  background-color: #FBE7E7;\n}\n\n/* Selected */\n\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\n.ui.form .field.error .ui.dropdown .menu .selected.item {\n  background-color: #FBE7E7;\n}\n\n/* Active */\n\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\n.ui.form .field.error .ui.dropdown .menu .active.item {\n  background-color: #FDCFCF !important;\n}\n\n/*--------------------\n    Checkbox Error\n---------------------*/\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\n  color: #9F3A38;\n}\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n\n.ui.form .fields.error .field .checkbox label:after,\n.ui.form .field.error .checkbox label:after,\n.ui.form .fields.error .field .checkbox .box:after,\n.ui.form .field.error .checkbox .box:after {\n  color: #9F3A38;\n}\n\n/*--------------------\n       Disabled\n---------------------*/\n\n.ui.form .disabled.fields .field,\n.ui.form .disabled.field,\n.ui.form .field :disabled {\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n.ui.form .field.disabled > label,\n.ui.form .fields.disabled > label {\n  opacity: 0.45;\n}\n\n.ui.form .field.disabled :disabled {\n  opacity: 1;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.form {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n}\n\n.ui.loading.form:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\n\n.ui.loading.form:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: form-spin 0.6s linear;\n  animation: form-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n\n@-webkit-keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n         Element Types\n*******************************/\n\n/*--------------------\n     Required Field\n---------------------*/\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after,\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  margin: -0.2em 0em 0em 0.2em;\n  content: '*';\n  color: #DB2828;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after {\n  display: inline-block;\n  vertical-align: top;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  position: absolute;\n  top: 0%;\n  left: 100%;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n    Inverted Colors\n---------------------*/\n\n.ui.inverted.form label,\n.ui.form .inverted.segment label,\n.ui.form .inverted.segment .ui.checkbox label,\n.ui.form .inverted.segment .ui.checkbox .box,\n.ui.inverted.form .ui.checkbox label,\n.ui.inverted.form .ui.checkbox .box,\n.ui.inverted.form .inline.fields > label,\n.ui.inverted.form .inline.fields .field > label,\n.ui.inverted.form .inline.fields .field > p,\n.ui.inverted.form .inline.field > label,\n.ui.inverted.form .inline.field > p {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Inverted Field */\n\n.ui.inverted.form input:not([type]),\n.ui.inverted.form input[type=\"date\"],\n.ui.inverted.form input[type=\"datetime-local\"],\n.ui.inverted.form input[type=\"email\"],\n.ui.inverted.form input[type=\"number\"],\n.ui.inverted.form input[type=\"password\"],\n.ui.inverted.form input[type=\"search\"],\n.ui.inverted.form input[type=\"tel\"],\n.ui.inverted.form input[type=\"time\"],\n.ui.inverted.form input[type=\"text\"],\n.ui.inverted.form input[type=\"file\"],\n.ui.inverted.form input[type=\"url\"] {\n  background: #FFFFFF;\n  border-color: rgba(255, 255, 255, 0.1);\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n}\n\n/*--------------------\n     Field Groups\n---------------------*/\n\n/* Grouped Vertically */\n\n.ui.form .grouped.fields {\n  display: block;\n  margin: 0em 0em 1em;\n}\n\n.ui.form .grouped.fields:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.form .grouped.fields > label {\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n.ui.form .grouped.fields .field,\n.ui.form .grouped.inline.fields .field {\n  display: block;\n  margin: 0.5em 0em;\n  padding: 0em;\n}\n\n/*--------------------\n        Fields\n---------------------*/\n\n/* Split fields */\n\n.ui.form .fields {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  margin: 0em -0.5em 1em;\n}\n\n.ui.form .fields > .field {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.form .fields > .field:first-child {\n  border-left: none;\n  box-shadow: none;\n}\n\n/* Other Combinations */\n\n.ui.form .two.fields > .fields,\n.ui.form .two.fields > .field {\n  width: 50%;\n}\n\n.ui.form .three.fields > .fields,\n.ui.form .three.fields > .field {\n  width: 33.33333333%;\n}\n\n.ui.form .four.fields > .fields,\n.ui.form .four.fields > .field {\n  width: 25%;\n}\n\n.ui.form .five.fields > .fields,\n.ui.form .five.fields > .field {\n  width: 20%;\n}\n\n.ui.form .six.fields > .fields,\n.ui.form .six.fields > .field {\n  width: 16.66666667%;\n}\n\n.ui.form .seven.fields > .fields,\n.ui.form .seven.fields > .field {\n  width: 14.28571429%;\n}\n\n.ui.form .eight.fields > .fields,\n.ui.form .eight.fields > .field {\n  width: 12.5%;\n}\n\n.ui.form .nine.fields > .fields,\n.ui.form .nine.fields > .field {\n  width: 11.11111111%;\n}\n\n.ui.form .ten.fields > .fields,\n.ui.form .ten.fields > .field {\n  width: 10%;\n}\n\n/* Swap to full width on mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.form .fields {\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap;\n  }\n\n  .ui[class*=\"equal width\"].form .fields > .field,\n  .ui.form [class*=\"equal width\"].fields > .field,\n  .ui.form .two.fields > .fields,\n  .ui.form .two.fields > .field,\n  .ui.form .three.fields > .fields,\n  .ui.form .three.fields > .field,\n  .ui.form .four.fields > .fields,\n  .ui.form .four.fields > .field,\n  .ui.form .five.fields > .fields,\n  .ui.form .five.fields > .field,\n  .ui.form .six.fields > .fields,\n  .ui.form .six.fields > .field,\n  .ui.form .seven.fields > .fields,\n  .ui.form .seven.fields > .field,\n  .ui.form .eight.fields > .fields,\n  .ui.form .eight.fields > .field,\n  .ui.form .nine.fields > .fields,\n  .ui.form .nine.fields > .field,\n  .ui.form .ten.fields > .fields,\n  .ui.form .ten.fields > .field {\n    width: 100% !important;\n    margin: 0em 0em 1em;\n  }\n}\n\n/* Sizing Combinations */\n\n.ui.form .fields .wide.field {\n  width: 6.25%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.form .one.wide.field {\n  width: 6.25% !important;\n}\n\n.ui.form .two.wide.field {\n  width: 12.5% !important;\n}\n\n.ui.form .three.wide.field {\n  width: 18.75% !important;\n}\n\n.ui.form .four.wide.field {\n  width: 25% !important;\n}\n\n.ui.form .five.wide.field {\n  width: 31.25% !important;\n}\n\n.ui.form .six.wide.field {\n  width: 37.5% !important;\n}\n\n.ui.form .seven.wide.field {\n  width: 43.75% !important;\n}\n\n.ui.form .eight.wide.field {\n  width: 50% !important;\n}\n\n.ui.form .nine.wide.field {\n  width: 56.25% !important;\n}\n\n.ui.form .ten.wide.field {\n  width: 62.5% !important;\n}\n\n.ui.form .eleven.wide.field {\n  width: 68.75% !important;\n}\n\n.ui.form .twelve.wide.field {\n  width: 75% !important;\n}\n\n.ui.form .thirteen.wide.field {\n  width: 81.25% !important;\n}\n\n.ui.form .fourteen.wide.field {\n  width: 87.5% !important;\n}\n\n.ui.form .fifteen.wide.field {\n  width: 93.75% !important;\n}\n\n.ui.form .sixteen.wide.field {\n  width: 100% !important;\n}\n\n/* Swap to full width on mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.form .two.fields > .fields,\n  .ui.form .two.fields > .field,\n  .ui.form .three.fields > .fields,\n  .ui.form .three.fields > .field,\n  .ui.form .four.fields > .fields,\n  .ui.form .four.fields > .field,\n  .ui.form .five.fields > .fields,\n  .ui.form .five.fields > .field,\n  .ui.form .fields > .two.wide.field,\n  .ui.form .fields > .three.wide.field,\n  .ui.form .fields > .four.wide.field,\n  .ui.form .fields > .five.wide.field,\n  .ui.form .fields > .six.wide.field,\n  .ui.form .fields > .seven.wide.field,\n  .ui.form .fields > .eight.wide.field,\n  .ui.form .fields > .nine.wide.field,\n  .ui.form .fields > .ten.wide.field,\n  .ui.form .fields > .eleven.wide.field,\n  .ui.form .fields > .twelve.wide.field,\n  .ui.form .fields > .thirteen.wide.field,\n  .ui.form .fields > .fourteen.wide.field,\n  .ui.form .fields > .fifteen.wide.field,\n  .ui.form .fields > .sixteen.wide.field {\n    width: 100% !important;\n  }\n\n  .ui.form .fields {\n    margin-bottom: 0em;\n  }\n}\n\n/*--------------------\n     Equal Width\n---------------------*/\n\n.ui[class*=\"equal width\"].form .fields > .field,\n.ui.form [class*=\"equal width\"].fields > .field {\n  width: 100%;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n/*--------------------\n    Inline Fields\n---------------------*/\n\n.ui.form .inline.fields {\n  margin: 0em 0em 1em;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.form .inline.fields .field {\n  margin: 0em;\n  padding: 0em 1em 0em 0em;\n}\n\n/* Inline Label */\n\n.ui.form .inline.fields > label,\n.ui.form .inline.fields .field > label,\n.ui.form .inline.fields .field > p,\n.ui.form .inline.field > label,\n.ui.form .inline.field > p {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: baseline;\n  font-size: 0.92857143em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: none;\n}\n\n/* Grouped Inline Label */\n\n.ui.form .inline.fields > label {\n  margin: 0.035714em 1em 0em 0em;\n}\n\n/* Inline Input */\n\n.ui.form .inline.fields .field > input,\n.ui.form .inline.fields .field > select,\n.ui.form .inline.field > input,\n.ui.form .inline.field > select {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: middle;\n  font-size: 1em;\n}\n\n/* Label */\n\n.ui.form .inline.fields .field > :first-child,\n.ui.form .inline.field > :first-child {\n  margin: 0em 0.85714286em 0em 0em;\n}\n\n.ui.form .inline.fields .field > :only-child,\n.ui.form .inline.field > :only-child {\n  margin: 0em;\n}\n\n/* Wide */\n\n.ui.form .inline.fields .wide.field {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.form .inline.fields .wide.field > input,\n.ui.form .inline.fields .wide.field > select {\n  width: 100%;\n}\n\n/*--------------------\n        Sizes\n---------------------*/\n\n.ui.mini.form {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.form {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.form {\n  font-size: 0.92857143rem;\n}\n\n.ui.form {\n  font-size: 1rem;\n}\n\n.ui.large.form {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.form {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.form {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.form {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Grid\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n.ui.grid {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  padding: 0em;\n}\n\n/*----------------------\n      Remove Gutters\n-----------------------*/\n\n.ui.grid {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.ui.relaxed.grid {\n  margin-left: -1.5rem;\n  margin-right: -1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid {\n  margin-left: -2.5rem;\n  margin-right: -2.5rem;\n}\n\n/* Preserve Rows Spacing on Consecutive Grids */\n\n.ui.grid + .grid {\n  margin-top: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Standard 16 column */\n\n.ui.grid > .column:not(.row),\n.ui.grid > .row > .column {\n  position: relative;\n  display: inline-block;\n  width: 6.25%;\n  padding-left: 1rem;\n  padding-right: 1rem;\n  vertical-align: top;\n}\n\n.ui.grid > * {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n/*-------------------\n        Rows\n--------------------*/\n\n.ui.grid > .row {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-pack: inherit;\n  -ms-flex-pack: inherit;\n  justify-content: inherit;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100% !important;\n  padding: 0rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Vertical padding when no rows */\n\n.ui.grid > .column:not(.row) {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n.ui.grid > .row > .column {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/*-------------------\n      Content\n--------------------*/\n\n.ui.grid > .row > img,\n.ui.grid > .row > .column > img {\n  max-width: 100%;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Collapse Margin on Consecutive Grid */\n\n.ui.grid > .ui.grid:first-child {\n  margin-top: 0em;\n}\n\n.ui.grid > .ui.grid:last-child {\n  margin-bottom: 0em;\n}\n\n/* Segment inside Aligned Grid */\n\n.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),\n.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {\n  width: 100%;\n}\n\n/* Align Dividers with Gutter */\n\n.ui.grid .row + .ui.divider {\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  margin: 1rem 1rem;\n}\n\n.ui.grid .column + .ui.vertical.divider {\n  height: calc(50% -  1rem );\n}\n\n/* Remove Border on Last Horizontal Segment */\n\n.ui.grid > .row > .column:last-child > .horizontal.segment,\n.ui.grid > .column:last-child > .horizontal.segment {\n  box-shadow: none;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-----------------------\n       Page Grid\n-------------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.page.grid {\n    width: auto;\n    padding-left: 0em;\n    padding-right: 0em;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n}\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 2em;\n    padding-right: 2em;\n  }\n}\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 3%;\n    padding-right: 3%;\n  }\n}\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 15%;\n    padding-right: 15%;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 23%;\n    padding-right: 23%;\n  }\n}\n\n/*-------------------\n     Column Count\n--------------------*/\n\n/* Assume full width with one column */\n\n.ui.grid > .column:only-child,\n.ui.grid > .row > .column:only-child {\n  width: 100%;\n}\n\n/* Grid Based */\n\n.ui[class*=\"one column\"].grid > .row > .column,\n.ui[class*=\"one column\"].grid > .column:not(.row) {\n  width: 100%;\n}\n\n.ui[class*=\"two column\"].grid > .row > .column,\n.ui[class*=\"two column\"].grid > .column:not(.row) {\n  width: 50%;\n}\n\n.ui[class*=\"three column\"].grid > .row > .column,\n.ui[class*=\"three column\"].grid > .column:not(.row) {\n  width: 33.33333333%;\n}\n\n.ui[class*=\"four column\"].grid > .row > .column,\n.ui[class*=\"four column\"].grid > .column:not(.row) {\n  width: 25%;\n}\n\n.ui[class*=\"five column\"].grid > .row > .column,\n.ui[class*=\"five column\"].grid > .column:not(.row) {\n  width: 20%;\n}\n\n.ui[class*=\"six column\"].grid > .row > .column,\n.ui[class*=\"six column\"].grid > .column:not(.row) {\n  width: 16.66666667%;\n}\n\n.ui[class*=\"seven column\"].grid > .row > .column,\n.ui[class*=\"seven column\"].grid > .column:not(.row) {\n  width: 14.28571429%;\n}\n\n.ui[class*=\"eight column\"].grid > .row > .column,\n.ui[class*=\"eight column\"].grid > .column:not(.row) {\n  width: 12.5%;\n}\n\n.ui[class*=\"nine column\"].grid > .row > .column,\n.ui[class*=\"nine column\"].grid > .column:not(.row) {\n  width: 11.11111111%;\n}\n\n.ui[class*=\"ten column\"].grid > .row > .column,\n.ui[class*=\"ten column\"].grid > .column:not(.row) {\n  width: 10%;\n}\n\n.ui[class*=\"eleven column\"].grid > .row > .column,\n.ui[class*=\"eleven column\"].grid > .column:not(.row) {\n  width: 9.09090909%;\n}\n\n.ui[class*=\"twelve column\"].grid > .row > .column,\n.ui[class*=\"twelve column\"].grid > .column:not(.row) {\n  width: 8.33333333%;\n}\n\n.ui[class*=\"thirteen column\"].grid > .row > .column,\n.ui[class*=\"thirteen column\"].grid > .column:not(.row) {\n  width: 7.69230769%;\n}\n\n.ui[class*=\"fourteen column\"].grid > .row > .column,\n.ui[class*=\"fourteen column\"].grid > .column:not(.row) {\n  width: 7.14285714%;\n}\n\n.ui[class*=\"fifteen column\"].grid > .row > .column,\n.ui[class*=\"fifteen column\"].grid > .column:not(.row) {\n  width: 6.66666667%;\n}\n\n.ui[class*=\"sixteen column\"].grid > .row > .column,\n.ui[class*=\"sixteen column\"].grid > .column:not(.row) {\n  width: 6.25%;\n}\n\n/* Row Based Overrides */\n\n.ui.grid > [class*=\"one column\"].row > .column {\n  width: 100% !important;\n}\n\n.ui.grid > [class*=\"two column\"].row > .column {\n  width: 50% !important;\n}\n\n.ui.grid > [class*=\"three column\"].row > .column {\n  width: 33.33333333% !important;\n}\n\n.ui.grid > [class*=\"four column\"].row > .column {\n  width: 25% !important;\n}\n\n.ui.grid > [class*=\"five column\"].row > .column {\n  width: 20% !important;\n}\n\n.ui.grid > [class*=\"six column\"].row > .column {\n  width: 16.66666667% !important;\n}\n\n.ui.grid > [class*=\"seven column\"].row > .column {\n  width: 14.28571429% !important;\n}\n\n.ui.grid > [class*=\"eight column\"].row > .column {\n  width: 12.5% !important;\n}\n\n.ui.grid > [class*=\"nine column\"].row > .column {\n  width: 11.11111111% !important;\n}\n\n.ui.grid > [class*=\"ten column\"].row > .column {\n  width: 10% !important;\n}\n\n.ui.grid > [class*=\"eleven column\"].row > .column {\n  width: 9.09090909% !important;\n}\n\n.ui.grid > [class*=\"twelve column\"].row > .column {\n  width: 8.33333333% !important;\n}\n\n.ui.grid > [class*=\"thirteen column\"].row > .column {\n  width: 7.69230769% !important;\n}\n\n.ui.grid > [class*=\"fourteen column\"].row > .column {\n  width: 7.14285714% !important;\n}\n\n.ui.grid > [class*=\"fifteen column\"].row > .column {\n  width: 6.66666667% !important;\n}\n\n.ui.grid > [class*=\"sixteen column\"].row > .column {\n  width: 6.25% !important;\n}\n\n/* Celled Page */\n\n.ui.celled.page.grid {\n  box-shadow: none;\n}\n\n/*-------------------\n    Column Width\n--------------------*/\n\n/* Sizing Combinations */\n\n.ui.grid > .row > [class*=\"one wide\"].column,\n.ui.grid > .column.row > [class*=\"one wide\"].column,\n.ui.grid > [class*=\"one wide\"].column,\n.ui.column.grid > [class*=\"one wide\"].column {\n  width: 6.25% !important;\n}\n\n.ui.grid > .row > [class*=\"two wide\"].column,\n.ui.grid > .column.row > [class*=\"two wide\"].column,\n.ui.grid > [class*=\"two wide\"].column,\n.ui.column.grid > [class*=\"two wide\"].column {\n  width: 12.5% !important;\n}\n\n.ui.grid > .row > [class*=\"three wide\"].column,\n.ui.grid > .column.row > [class*=\"three wide\"].column,\n.ui.grid > [class*=\"three wide\"].column,\n.ui.column.grid > [class*=\"three wide\"].column {\n  width: 18.75% !important;\n}\n\n.ui.grid > .row > [class*=\"four wide\"].column,\n.ui.grid > .column.row > [class*=\"four wide\"].column,\n.ui.grid > [class*=\"four wide\"].column,\n.ui.column.grid > [class*=\"four wide\"].column {\n  width: 25% !important;\n}\n\n.ui.grid > .row > [class*=\"five wide\"].column,\n.ui.grid > .column.row > [class*=\"five wide\"].column,\n.ui.grid > [class*=\"five wide\"].column,\n.ui.column.grid > [class*=\"five wide\"].column {\n  width: 31.25% !important;\n}\n\n.ui.grid > .row > [class*=\"six wide\"].column,\n.ui.grid > .column.row > [class*=\"six wide\"].column,\n.ui.grid > [class*=\"six wide\"].column,\n.ui.column.grid > [class*=\"six wide\"].column {\n  width: 37.5% !important;\n}\n\n.ui.grid > .row > [class*=\"seven wide\"].column,\n.ui.grid > .column.row > [class*=\"seven wide\"].column,\n.ui.grid > [class*=\"seven wide\"].column,\n.ui.column.grid > [class*=\"seven wide\"].column {\n  width: 43.75% !important;\n}\n\n.ui.grid > .row > [class*=\"eight wide\"].column,\n.ui.grid > .column.row > [class*=\"eight wide\"].column,\n.ui.grid > [class*=\"eight wide\"].column,\n.ui.column.grid > [class*=\"eight wide\"].column {\n  width: 50% !important;\n}\n\n.ui.grid > .row > [class*=\"nine wide\"].column,\n.ui.grid > .column.row > [class*=\"nine wide\"].column,\n.ui.grid > [class*=\"nine wide\"].column,\n.ui.column.grid > [class*=\"nine wide\"].column {\n  width: 56.25% !important;\n}\n\n.ui.grid > .row > [class*=\"ten wide\"].column,\n.ui.grid > .column.row > [class*=\"ten wide\"].column,\n.ui.grid > [class*=\"ten wide\"].column,\n.ui.column.grid > [class*=\"ten wide\"].column {\n  width: 62.5% !important;\n}\n\n.ui.grid > .row > [class*=\"eleven wide\"].column,\n.ui.grid > .column.row > [class*=\"eleven wide\"].column,\n.ui.grid > [class*=\"eleven wide\"].column,\n.ui.column.grid > [class*=\"eleven wide\"].column {\n  width: 68.75% !important;\n}\n\n.ui.grid > .row > [class*=\"twelve wide\"].column,\n.ui.grid > .column.row > [class*=\"twelve wide\"].column,\n.ui.grid > [class*=\"twelve wide\"].column,\n.ui.column.grid > [class*=\"twelve wide\"].column {\n  width: 75% !important;\n}\n\n.ui.grid > .row > [class*=\"thirteen wide\"].column,\n.ui.grid > .column.row > [class*=\"thirteen wide\"].column,\n.ui.grid > [class*=\"thirteen wide\"].column,\n.ui.column.grid > [class*=\"thirteen wide\"].column {\n  width: 81.25% !important;\n}\n\n.ui.grid > .row > [class*=\"fourteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fourteen wide\"].column,\n.ui.grid > [class*=\"fourteen wide\"].column,\n.ui.column.grid > [class*=\"fourteen wide\"].column {\n  width: 87.5% !important;\n}\n\n.ui.grid > .row > [class*=\"fifteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fifteen wide\"].column,\n.ui.grid > [class*=\"fifteen wide\"].column,\n.ui.column.grid > [class*=\"fifteen wide\"].column {\n  width: 93.75% !important;\n}\n\n.ui.grid > .row > [class*=\"sixteen wide\"].column,\n.ui.grid > .column.row > [class*=\"sixteen wide\"].column,\n.ui.grid > [class*=\"sixteen wide\"].column,\n.ui.column.grid > [class*=\"sixteen wide\"].column {\n  width: 100% !important;\n}\n\n/*----------------------\n    Width per Device\n-----------------------*/\n\n/* Mobile Sizing Combinations */\n\n@media only screen and (min-width: 320px) and (max-width: 767px) {\n  .ui.grid > .row > [class*=\"one wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"one wide mobile\"].column,\n  .ui.grid > [class*=\"one wide mobile\"].column,\n  .ui.column.grid > [class*=\"one wide mobile\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"two wide mobile\"].column,\n  .ui.grid > [class*=\"two wide mobile\"].column,\n  .ui.column.grid > [class*=\"two wide mobile\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"three wide mobile\"].column,\n  .ui.grid > [class*=\"three wide mobile\"].column,\n  .ui.column.grid > [class*=\"three wide mobile\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"four wide mobile\"].column,\n  .ui.grid > [class*=\"four wide mobile\"].column,\n  .ui.column.grid > [class*=\"four wide mobile\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"five wide mobile\"].column,\n  .ui.grid > [class*=\"five wide mobile\"].column,\n  .ui.column.grid > [class*=\"five wide mobile\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"six wide mobile\"].column,\n  .ui.grid > [class*=\"six wide mobile\"].column,\n  .ui.column.grid > [class*=\"six wide mobile\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > [class*=\"seven wide mobile\"].column,\n  .ui.column.grid > [class*=\"seven wide mobile\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > [class*=\"eight wide mobile\"].column,\n  .ui.column.grid > [class*=\"eight wide mobile\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > [class*=\"nine wide mobile\"].column,\n  .ui.column.grid > [class*=\"nine wide mobile\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > [class*=\"ten wide mobile\"].column,\n  .ui.column.grid > [class*=\"ten wide mobile\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > [class*=\"eleven wide mobile\"].column,\n  .ui.column.grid > [class*=\"eleven wide mobile\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > [class*=\"twelve wide mobile\"].column,\n  .ui.column.grid > [class*=\"twelve wide mobile\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > [class*=\"thirteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"thirteen wide mobile\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > [class*=\"fourteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fourteen wide mobile\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > [class*=\"fifteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fifteen wide mobile\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > [class*=\"sixteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"sixteen wide mobile\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Tablet Sizing Combinations */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.grid > .row > [class*=\"one wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"one wide tablet\"].column,\n  .ui.grid > [class*=\"one wide tablet\"].column,\n  .ui.column.grid > [class*=\"one wide tablet\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"two wide tablet\"].column,\n  .ui.grid > [class*=\"two wide tablet\"].column,\n  .ui.column.grid > [class*=\"two wide tablet\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"three wide tablet\"].column,\n  .ui.grid > [class*=\"three wide tablet\"].column,\n  .ui.column.grid > [class*=\"three wide tablet\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"four wide tablet\"].column,\n  .ui.grid > [class*=\"four wide tablet\"].column,\n  .ui.column.grid > [class*=\"four wide tablet\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"five wide tablet\"].column,\n  .ui.grid > [class*=\"five wide tablet\"].column,\n  .ui.column.grid > [class*=\"five wide tablet\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"six wide tablet\"].column,\n  .ui.grid > [class*=\"six wide tablet\"].column,\n  .ui.column.grid > [class*=\"six wide tablet\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > [class*=\"seven wide tablet\"].column,\n  .ui.column.grid > [class*=\"seven wide tablet\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > [class*=\"eight wide tablet\"].column,\n  .ui.column.grid > [class*=\"eight wide tablet\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > [class*=\"nine wide tablet\"].column,\n  .ui.column.grid > [class*=\"nine wide tablet\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > [class*=\"ten wide tablet\"].column,\n  .ui.column.grid > [class*=\"ten wide tablet\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > [class*=\"eleven wide tablet\"].column,\n  .ui.column.grid > [class*=\"eleven wide tablet\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > [class*=\"twelve wide tablet\"].column,\n  .ui.column.grid > [class*=\"twelve wide tablet\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > [class*=\"thirteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"thirteen wide tablet\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > [class*=\"fourteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fourteen wide tablet\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > [class*=\"fifteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fifteen wide tablet\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > [class*=\"sixteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"sixteen wide tablet\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Computer/Desktop Sizing Combinations */\n\n@media only screen and (min-width: 992px) {\n  .ui.grid > .row > [class*=\"one wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"one wide computer\"].column,\n  .ui.grid > [class*=\"one wide computer\"].column,\n  .ui.column.grid > [class*=\"one wide computer\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"two wide computer\"].column,\n  .ui.grid > [class*=\"two wide computer\"].column,\n  .ui.column.grid > [class*=\"two wide computer\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"three wide computer\"].column,\n  .ui.grid > [class*=\"three wide computer\"].column,\n  .ui.column.grid > [class*=\"three wide computer\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"four wide computer\"].column,\n  .ui.grid > [class*=\"four wide computer\"].column,\n  .ui.column.grid > [class*=\"four wide computer\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"five wide computer\"].column,\n  .ui.grid > [class*=\"five wide computer\"].column,\n  .ui.column.grid > [class*=\"five wide computer\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"six wide computer\"].column,\n  .ui.grid > [class*=\"six wide computer\"].column,\n  .ui.column.grid > [class*=\"six wide computer\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide computer\"].column,\n  .ui.grid > [class*=\"seven wide computer\"].column,\n  .ui.column.grid > [class*=\"seven wide computer\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide computer\"].column,\n  .ui.grid > [class*=\"eight wide computer\"].column,\n  .ui.column.grid > [class*=\"eight wide computer\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide computer\"].column,\n  .ui.grid > [class*=\"nine wide computer\"].column,\n  .ui.column.grid > [class*=\"nine wide computer\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide computer\"].column,\n  .ui.grid > [class*=\"ten wide computer\"].column,\n  .ui.column.grid > [class*=\"ten wide computer\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > [class*=\"eleven wide computer\"].column,\n  .ui.column.grid > [class*=\"eleven wide computer\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > [class*=\"twelve wide computer\"].column,\n  .ui.column.grid > [class*=\"twelve wide computer\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > [class*=\"thirteen wide computer\"].column,\n  .ui.column.grid > [class*=\"thirteen wide computer\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > [class*=\"fourteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fourteen wide computer\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > [class*=\"fifteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fifteen wide computer\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > [class*=\"sixteen wide computer\"].column,\n  .ui.column.grid > [class*=\"sixteen wide computer\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Large Monitor Sizing Combinations */\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.grid > .row > [class*=\"one wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide large screen\"].column,\n  .ui.grid > [class*=\"one wide large screen\"].column,\n  .ui.column.grid > [class*=\"one wide large screen\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide large screen\"].column,\n  .ui.grid > [class*=\"two wide large screen\"].column,\n  .ui.column.grid > [class*=\"two wide large screen\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide large screen\"].column,\n  .ui.grid > [class*=\"three wide large screen\"].column,\n  .ui.column.grid > [class*=\"three wide large screen\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide large screen\"].column,\n  .ui.grid > [class*=\"four wide large screen\"].column,\n  .ui.column.grid > [class*=\"four wide large screen\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide large screen\"].column,\n  .ui.grid > [class*=\"five wide large screen\"].column,\n  .ui.column.grid > [class*=\"five wide large screen\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide large screen\"].column,\n  .ui.grid > [class*=\"six wide large screen\"].column,\n  .ui.column.grid > [class*=\"six wide large screen\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > [class*=\"seven wide large screen\"].column,\n  .ui.column.grid > [class*=\"seven wide large screen\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > [class*=\"eight wide large screen\"].column,\n  .ui.column.grid > [class*=\"eight wide large screen\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > [class*=\"nine wide large screen\"].column,\n  .ui.column.grid > [class*=\"nine wide large screen\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > [class*=\"ten wide large screen\"].column,\n  .ui.column.grid > [class*=\"ten wide large screen\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > [class*=\"eleven wide large screen\"].column,\n  .ui.column.grid > [class*=\"eleven wide large screen\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > [class*=\"twelve wide large screen\"].column,\n  .ui.column.grid > [class*=\"twelve wide large screen\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > [class*=\"thirteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide large screen\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > [class*=\"fourteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide large screen\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > [class*=\"fifteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide large screen\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > [class*=\"sixteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide large screen\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Widescreen Sizing Combinations */\n\n@media only screen and (min-width: 1920px) {\n  .ui.grid > .row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > [class*=\"one wide widescreen\"].column,\n  .ui.column.grid > [class*=\"one wide widescreen\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > [class*=\"two wide widescreen\"].column,\n  .ui.column.grid > [class*=\"two wide widescreen\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > [class*=\"three wide widescreen\"].column,\n  .ui.column.grid > [class*=\"three wide widescreen\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > [class*=\"four wide widescreen\"].column,\n  .ui.column.grid > [class*=\"four wide widescreen\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > [class*=\"five wide widescreen\"].column,\n  .ui.column.grid > [class*=\"five wide widescreen\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > [class*=\"six wide widescreen\"].column,\n  .ui.column.grid > [class*=\"six wide widescreen\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > [class*=\"seven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"seven wide widescreen\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > [class*=\"eight wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eight wide widescreen\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > [class*=\"nine wide widescreen\"].column,\n  .ui.column.grid > [class*=\"nine wide widescreen\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > [class*=\"ten wide widescreen\"].column,\n  .ui.column.grid > [class*=\"ten wide widescreen\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > [class*=\"eleven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eleven wide widescreen\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > [class*=\"twelve wide widescreen\"].column,\n  .ui.column.grid > [class*=\"twelve wide widescreen\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > [class*=\"thirteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide widescreen\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fourteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide widescreen\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fifteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide widescreen\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > [class*=\"sixteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide widescreen\"].column {\n    width: 100% !important;\n  }\n}\n\n/*----------------------\n        Centered\n-----------------------*/\n\n.ui.centered.grid,\n.ui.centered.grid > .row,\n.ui.grid > .centered.row {\n  text-align: center;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row),\n.ui.centered.grid > .row > .column:not(.aligned):not(.justified),\n.ui.grid .centered.row > .column:not(.aligned):not(.justified) {\n  text-align: left;\n}\n\n.ui.grid > .centered.column,\n.ui.grid > .row > .centered.column {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*----------------------\n        Relaxed\n-----------------------*/\n\n.ui.relaxed.grid > .column:not(.row),\n.ui.relaxed.grid > .row > .column,\n.ui.grid > .relaxed.row > .column {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].grid > .row > .column,\n.ui.grid > [class*=\"very relaxed\"].row > .column {\n  padding-left: 2.5rem;\n  padding-right: 2.5rem;\n}\n\n/* Coupling with UI Divider */\n\n.ui.relaxed.grid .row + .ui.divider,\n.ui.grid .relaxed.row + .ui.divider {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid .row + .ui.divider,\n.ui.grid [class*=\"very relaxed\"].row + .ui.divider {\n  margin-left: 2.5rem;\n  margin-right: 2.5rem;\n}\n\n/*----------------------\n        Padded\n-----------------------*/\n\n.ui.padded.grid:not(.vertically):not(.horizontally) {\n  margin: 0em !important;\n}\n\n[class*=\"horizontally padded\"].ui.grid {\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n}\n\n[class*=\"vertically padded\"].ui.grid {\n  margin-top: 0em !important;\n  margin-bottom: 0em !important;\n}\n\n/*----------------------\n       \"Floated\"\n-----------------------*/\n\n.ui.grid [class*=\"left floated\"].column {\n  margin-right: auto;\n}\n\n.ui.grid [class*=\"right floated\"].column {\n  margin-left: auto;\n}\n\n/*----------------------\n        Divided\n-----------------------*/\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Swap from padding to margin on columns to have dividers align */\n\n.ui[class*=\"vertically divided\"].grid > .column:not(.row),\n.ui[class*=\"vertically divided\"].grid > .row > .column {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  padding-top: 0rem;\n  padding-bottom: 0rem;\n}\n\n.ui[class*=\"vertically divided\"].grid > .row {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/* No divider on first column on row */\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/* No space on top of first row */\n\n.ui[class*=\"vertically divided\"].grid > .row:first-child > .column {\n  margin-top: 0em;\n}\n\n/* Divided Row */\n\n.ui.grid > .divided.row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.grid > .divided.row > .column:first-child {\n  box-shadow: none;\n}\n\n/* Vertically Divided */\n\n.ui[class*=\"vertically divided\"].grid > .row {\n  position: relative;\n}\n\n.ui[class*=\"vertically divided\"].grid > .row:before {\n  position: absolute;\n  content: \"\";\n  top: 0em;\n  left: 0px;\n  width: calc(100% -  2rem );\n  height: 1px;\n  margin: 0% 1rem;\n  box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Padded Horizontally Divided */\n\n[class*=\"horizontally padded\"].ui.divided.grid,\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\n  width: 100%;\n}\n\n/* First Row Vertically Divided */\n\n.ui[class*=\"vertically divided\"].grid > .row:first-child:before {\n  box-shadow: none;\n}\n\n/* Inverted Divided */\n\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row):first-child,\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n\n.ui.inverted[class*=\"vertically divided\"].grid > .row:before {\n  box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n/* Relaxed */\n\n.ui.relaxed[class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n  width: calc(100% -  3rem );\n}\n\n.ui[class*=\"very relaxed\"][class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 5rem;\n  margin-right: 5rem;\n  width: calc(100% -  5rem );\n}\n\n/*----------------------\n         Celled\n-----------------------*/\n\n.ui.celled.grid {\n  width: 100%;\n  margin: 1em 0em;\n  box-shadow: 0px 0px 0px 1px #D4D4D5;\n}\n\n.ui.celled.grid > .row {\n  width: 100% !important;\n  margin: 0em;\n  padding: 0em;\n  box-shadow: 0px -1px 0px 0px #D4D4D5;\n}\n\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  box-shadow: -1px 0px 0px 0px #D4D4D5;\n}\n\n.ui.celled.grid > .column:first-child,\n.ui.celled.grid > .row > .column:first-child {\n  box-shadow: none;\n}\n\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  padding: 1em;\n}\n\n.ui.relaxed.celled.grid > .column:not(.row),\n.ui.relaxed.celled.grid > .row > .column {\n  padding: 1.5em;\n}\n\n.ui[class*=\"very relaxed\"].celled.grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].celled.grid > .row > .column {\n  padding: 2em;\n}\n\n/* Internally Celled */\n\n.ui[class*=\"internally celled\"].grid {\n  box-shadow: none;\n  margin: 0em;\n}\n\n.ui[class*=\"internally celled\"].grid > .row:first-child {\n  box-shadow: none;\n}\n\n.ui[class*=\"internally celled\"].grid > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/*----------------------\n   Vertically Aligned\n-----------------------*/\n\n/* Top Aligned */\n\n.ui[class*=\"top aligned\"].grid > .column:not(.row),\n.ui[class*=\"top aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"top aligned\"].row > .column,\n.ui.grid > [class*=\"top aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"top aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: top;\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n/* Middle Aligned */\n\n.ui[class*=\"middle aligned\"].grid > .column:not(.row),\n.ui[class*=\"middle aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"middle aligned\"].row > .column,\n.ui.grid > [class*=\"middle aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"middle aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: middle;\n  -ms-flex-item-align: center !important;\n  -ms-grid-row-align: center !important;\n  align-self: center !important;\n}\n\n/* Bottom Aligned */\n\n.ui[class*=\"bottom aligned\"].grid > .column:not(.row),\n.ui[class*=\"bottom aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"bottom aligned\"].row > .column,\n.ui.grid > [class*=\"bottom aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"bottom aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: bottom;\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n/* Stretched */\n\n.ui.stretched.grid > .row > .column,\n.ui.stretched.grid > .column,\n.ui.grid > .stretched.row > .column,\n.ui.grid > .stretched.column:not(.row),\n.ui.grid > .row > .stretched.column {\n  display: -webkit-inline-box !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.ui.stretched.grid > .row > .column > *,\n.ui.stretched.grid > .column > *,\n.ui.grid > .stretched.row > .column > *,\n.ui.grid > .stretched.column:not(.row) > *,\n.ui.grid > .row > .stretched.column > * {\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n}\n\n/*----------------------\n  Horizontally Centered\n-----------------------*/\n\n/* Left Aligned */\n\n.ui[class*=\"left aligned\"].grid > .column,\n.ui[class*=\"left aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"left aligned\"].row > .column,\n.ui.grid > [class*=\"left aligned\"].column.column,\n.ui.grid > .row > [class*=\"left aligned\"].column.column {\n  text-align: left;\n  -ms-flex-item-align: inherit;\n  -ms-grid-row-align: inherit;\n  align-self: inherit;\n}\n\n/* Center Aligned */\n\n.ui[class*=\"center aligned\"].grid > .column,\n.ui[class*=\"center aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"center aligned\"].row > .column,\n.ui.grid > [class*=\"center aligned\"].column.column,\n.ui.grid > .row > [class*=\"center aligned\"].column.column {\n  text-align: center;\n  -ms-flex-item-align: inherit;\n  -ms-grid-row-align: inherit;\n  align-self: inherit;\n}\n\n.ui[class*=\"center aligned\"].grid {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n/* Right Aligned */\n\n.ui[class*=\"right aligned\"].grid > .column,\n.ui[class*=\"right aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"right aligned\"].row > .column,\n.ui.grid > [class*=\"right aligned\"].column.column,\n.ui.grid > .row > [class*=\"right aligned\"].column.column {\n  text-align: right;\n  -ms-flex-item-align: inherit;\n  -ms-grid-row-align: inherit;\n  align-self: inherit;\n}\n\n/* Justified */\n\n.ui.justified.grid > .column,\n.ui.justified.grid > .row > .column,\n.ui.grid > .justified.row > .column,\n.ui.grid > .justified.column.column,\n.ui.grid > .row > .justified.column.column {\n  text-align: justify;\n  -webkit-hyphens: auto;\n  -ms-hyphens: auto;\n  hyphens: auto;\n}\n\n/*----------------------\n         Colored\n-----------------------*/\n\n.ui.grid > .row > .red.column,\n.ui.grid > .row > .orange.column,\n.ui.grid > .row > .yellow.column,\n.ui.grid > .row > .olive.column,\n.ui.grid > .row > .green.column,\n.ui.grid > .row > .teal.column,\n.ui.grid > .row > .blue.column,\n.ui.grid > .row > .violet.column,\n.ui.grid > .row > .purple.column,\n.ui.grid > .row > .pink.column,\n.ui.grid > .row > .brown.column,\n.ui.grid > .row > .grey.column,\n.ui.grid > .row > .black.column {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/* Red */\n\n.ui.grid > .red.row,\n.ui.grid > .red.column,\n.ui.grid > .row > .red.column {\n  background-color: #DB2828 !important;\n  color: #FFFFFF;\n}\n\n/* Orange */\n\n.ui.grid > .orange.row,\n.ui.grid > .orange.column,\n.ui.grid > .row > .orange.column {\n  background-color: #F2711C !important;\n  color: #FFFFFF;\n}\n\n/* Yellow */\n\n.ui.grid > .yellow.row,\n.ui.grid > .yellow.column,\n.ui.grid > .row > .yellow.column {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF;\n}\n\n/* Olive */\n\n.ui.grid > .olive.row,\n.ui.grid > .olive.column,\n.ui.grid > .row > .olive.column {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF;\n}\n\n/* Green */\n\n.ui.grid > .green.row,\n.ui.grid > .green.column,\n.ui.grid > .row > .green.column {\n  background-color: #21BA45 !important;\n  color: #FFFFFF;\n}\n\n/* Teal */\n\n.ui.grid > .teal.row,\n.ui.grid > .teal.column,\n.ui.grid > .row > .teal.column {\n  background-color: #00B5AD !important;\n  color: #FFFFFF;\n}\n\n/* Blue */\n\n.ui.grid > .blue.row,\n.ui.grid > .blue.column,\n.ui.grid > .row > .blue.column {\n  background-color: #2185D0 !important;\n  color: #FFFFFF;\n}\n\n/* Violet */\n\n.ui.grid > .violet.row,\n.ui.grid > .violet.column,\n.ui.grid > .row > .violet.column {\n  background-color: #6435C9 !important;\n  color: #FFFFFF;\n}\n\n/* Purple */\n\n.ui.grid > .purple.row,\n.ui.grid > .purple.column,\n.ui.grid > .row > .purple.column {\n  background-color: #A333C8 !important;\n  color: #FFFFFF;\n}\n\n/* Pink */\n\n.ui.grid > .pink.row,\n.ui.grid > .pink.column,\n.ui.grid > .row > .pink.column {\n  background-color: #E03997 !important;\n  color: #FFFFFF;\n}\n\n/* Brown */\n\n.ui.grid > .brown.row,\n.ui.grid > .brown.column,\n.ui.grid > .row > .brown.column {\n  background-color: #A5673F !important;\n  color: #FFFFFF;\n}\n\n/* Grey */\n\n.ui.grid > .grey.row,\n.ui.grid > .grey.column,\n.ui.grid > .row > .grey.column {\n  background-color: #767676 !important;\n  color: #FFFFFF;\n}\n\n/* Black */\n\n.ui.grid > .black.row,\n.ui.grid > .black.column,\n.ui.grid > .row > .black.column {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF;\n}\n\n/*----------------------\n      Equal Width\n-----------------------*/\n\n.ui[class*=\"equal width\"].grid > .column:not(.row),\n.ui[class*=\"equal width\"].grid > .row > .column,\n.ui.grid > [class*=\"equal width\"].row > .column {\n  display: inline-block;\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n}\n\n.ui[class*=\"equal width\"].grid > .wide.column,\n.ui[class*=\"equal width\"].grid > .row > .wide.column,\n.ui.grid > [class*=\"equal width\"].row > .wide.column {\n  -webkit-box-flex: 0;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n}\n\n/*----------------------\n        Reverse\n-----------------------*/\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"mobile reversed\"].grid,\n  .ui[class*=\"mobile reversed\"].grid > .row,\n  .ui.grid > [class*=\"mobile reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: row-reverse;\n    flex-direction: row-reverse;\n  }\n\n  .ui[class*=\"mobile vertically reversed\"].grid,\n  .ui.stackable[class*=\"mobile reversed\"] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: column-reverse;\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n\n  /* Vertically Divided Reversed */\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:first-child:before {\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n\n  /* Celled Reversed */\n\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/* Tablet */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"tablet reversed\"].grid,\n  .ui[class*=\"tablet reversed\"].grid > .row,\n  .ui.grid > [class*=\"tablet reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: row-reverse;\n    flex-direction: row-reverse;\n  }\n\n  .ui[class*=\"tablet vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: column-reverse;\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n\n  /* Vertically Divided Reversed */\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:first-child:before {\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n\n  /* Celled Reversed */\n\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/* Computer */\n\n@media only screen and (min-width: 992px) {\n  .ui[class*=\"computer reversed\"].grid,\n  .ui[class*=\"computer reversed\"].grid > .row,\n  .ui.grid > [class*=\"computer reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: row-reverse;\n    flex-direction: row-reverse;\n  }\n\n  .ui[class*=\"computer vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: column-reverse;\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n\n  /* Vertically Divided Reversed */\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:first-child:before {\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n\n  /* Celled Reversed */\n\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.doubling.grid {\n    width: auto;\n  }\n\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    display: inline-block !important;\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    box-shadow: none !important;\n    margin: 0em;\n  }\n\n  .ui[class*=\"two column\"].doubling.grid > .row > .column,\n  .ui[class*=\"two column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling.row.row > .column {\n    width: 100% !important;\n  }\n\n  .ui[class*=\"three column\"].doubling.grid > .row > .column,\n  .ui[class*=\"three column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"four column\"].doubling.grid > .row > .column,\n  .ui[class*=\"four column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"five column\"].doubling.grid > .row > .column,\n  .ui[class*=\"five column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"six column\"].doubling.grid > .row > .column,\n  .ui[class*=\"six column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"seven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"eight column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"nine column\"].doubling.grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"ten column\"].doubling.grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n\n  .ui[class*=\"eleven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n\n  .ui[class*=\"twelve column\"].doubling.grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n\n  .ui[class*=\"thirteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n\n  .ui[class*=\"fourteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n\n  .ui[class*=\"fifteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n\n  .ui[class*=\"sixteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling.row.row > .column {\n    width: 12.5% !important;\n  }\n}\n\n/* Mobile Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    margin: 0em !important;\n    box-shadow: none !important;\n  }\n\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling:not(.stackable).row.row > .column {\n    width: 100% !important;\n  }\n\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid {\n    width: auto;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n\n  .ui.stackable.grid > .row > .wide.column,\n  .ui.stackable.grid > .wide.column,\n  .ui.stackable.grid > .column.grid > .column,\n  .ui.stackable.grid > .column.row > .column,\n  .ui.stackable.grid > .row > .column,\n  .ui.stackable.grid > .column:not(.row),\n  .ui.grid > .stackable.stackable.row > .column {\n    width: 100% !important;\n    margin: 0em 0em !important;\n    box-shadow: none !important;\n    padding: 1rem 1rem !important;\n  }\n\n  .ui.stackable.grid:not(.vertically) > .row {\n    margin: 0em;\n    padding: 0em;\n  }\n\n  /* Coupling */\n\n  .ui.container > .ui.stackable.grid > .column,\n  .ui.container > .ui.stackable.grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n\n  /* Don't pad inside segment or nested grid */\n\n  .ui.grid .ui.stackable.grid,\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\n    margin-left: -1rem !important;\n    margin-right: -1rem !important;\n  }\n\n  /* Divided Stackable */\n\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\n    border-top: none !important;\n  }\n\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\n  .ui.inverted.stackable.celled.grid > .row > .column,\n  .ui.inverted.stackable.divided.grid > .row > .column {\n    border-top: 1px solid rgba(255, 255, 255, 0.1);\n  }\n\n  .ui.stackable.celled.grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.celled.grid > .row > .column,\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    border-top: 1px solid rgba(34, 36, 38, 0.15);\n    box-shadow: none !important;\n    padding-top: 2rem !important;\n    padding-bottom: 2rem !important;\n  }\n\n  .ui.stackable.celled.grid > .row {\n    box-shadow: none !important;\n  }\n\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n}\n\n/*----------------------\n     Only (Device)\n-----------------------*/\n\n/* These include arbitrary class repetitions for forced specificity */\n\n/* Mobile Only Hide */\n\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Tablet Only Hide */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.tablet) {\n    display: none !important;\n  }\n\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.tablet) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Computer Only Hide */\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Large Screen Only Hide */\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Widescreen Only Hide */\n\n@media only screen and (min-width: 1920px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*\n * # Semantic - Menu\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributor\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1rem 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  font-weight: normal;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  min-height: 2.85714286em;\n}\n\n.ui.menu:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.menu:first-child {\n  margin-top: 0rem;\n}\n\n.ui.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n/*--------------\n    Sub-Menu\n---------------*/\n\n.ui.menu .menu {\n  margin: 0em;\n}\n\n.ui.menu:not(.vertical) > .menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.menu:not(.vertical) .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.menu .item {\n  position: relative;\n  vertical-align: middle;\n  line-height: 1;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background: none;\n  padding: 0.92857143em 1.14285714em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: normal;\n  -webkit-transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n}\n\n.ui.menu > .item:first-child {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Border */\n\n.ui.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  right: 0px;\n  height: 100%;\n  width: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n  Text Content\n---------------*/\n\n.ui.menu .text.item > *,\n.ui.menu .item > a:not(.ui),\n.ui.menu .item > p:only-child {\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n  line-height: 1.3;\n}\n\n.ui.menu .item > p:first-child {\n  margin-top: 0;\n}\n\n.ui.menu .item > p:last-child {\n  margin-bottom: 0;\n}\n\n/*--------------\n      Icons\n---------------*/\n\n.ui.menu .item > i.icon {\n  opacity: 0.9;\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.menu:not(.vertical) .item > .button {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n  padding-bottom: 0.78571429em;\n  padding-top: 0.78571429em;\n  font-size: 1em;\n}\n\n/*----------------\n Grid / Container\n-----------------*/\n\n.ui.menu > .grid,\n.ui.menu > .container {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n}\n\n/*--------------\n     Inputs\n---------------*/\n\n.ui.menu .item > .input {\n  width: 100%;\n}\n\n.ui.menu:not(.vertical) .item > .input {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n}\n\n.ui.menu .item > .input input {\n  font-size: 1em;\n  padding-top: 0.57142857em;\n  padding-bottom: 0.57142857em;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.menu .header.item,\n.ui.vertical.menu .header.item {\n  margin: 0em;\n  background: '';\n  text-transform: normal;\n  font-weight: bold;\n}\n\n.ui.vertical.menu .item > .header:not(.ui) {\n  margin: 0em 0em 0.5em;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n/*--------------\n    Dropdowns\n---------------*/\n\n/* Dropdown Icon */\n\n.ui.menu .item > i.dropdown.icon {\n  padding: 0em;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/* Menu */\n\n.ui.menu .dropdown.item .menu {\n  left: 0px;\n  min-width: calc(100% - 1px);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  background: #FFFFFF;\n  margin: 0em 0px 0px;\n  box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n/* Menu Items */\n\n.ui.menu .ui.dropdown .menu > .item {\n  margin: 0;\n  text-align: left;\n  font-size: 1em !important;\n  padding: 0.78571429em 1.14285714em !important;\n  background: transparent !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n  text-transform: none !important;\n  font-weight: normal !important;\n  box-shadow: none !important;\n  -webkit-transition: none !important;\n  transition: none !important;\n}\n\n.ui.menu .ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown .menu > .selected.item {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown .menu > .active.item {\n  background: rgba(0, 0, 0, 0.03) !important;\n  font-weight: bold !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\n  display: block;\n}\n\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\n  display: inline-block;\n  font-size: 1em !important;\n  float: none;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Secondary */\n\n.ui.secondary.menu .dropdown.item > .menu,\n.ui.text.menu .dropdown.item > .menu {\n  border-radius: 0.28571429rem;\n  margin-top: 0.35714286em;\n}\n\n/* Pointing */\n\n.ui.menu .pointing.dropdown.item .menu {\n  margin-top: 0.75em;\n}\n\n/* Inverted */\n\n.ui.inverted.menu .search.dropdown.item > .search,\n.ui.inverted.menu .search.dropdown.item > .text {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Vertical */\n\n.ui.vertical.menu .dropdown.item > .icon {\n  float: right;\n  content: \"\\f0da\";\n  margin-left: 1em;\n}\n\n.ui.vertical.menu .dropdown.item .menu {\n  left: 100%;\n  min-width: 0;\n  margin: 0em 0em 0em 0em;\n  box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0.28571429rem 0.28571429rem 0.28571429rem;\n}\n\n.ui.vertical.menu .dropdown.item.upward .menu {\n  bottom: 0;\n}\n\n.ui.vertical.menu .dropdown.item:not(.upward) .menu {\n  top: 0;\n}\n\n.ui.vertical.menu .active.dropdown.item {\n  border-top-right-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n.ui.vertical.menu .dropdown.active.item {\n  box-shadow: none;\n}\n\n/* Evenly Divided */\n\n.ui.item.menu .dropdown .menu .item {\n  width: 100%;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n.ui.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-left: 1em;\n  padding: 0.3em 0.78571429em;\n}\n\n.ui.vertical.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-top: -0.15em;\n  margin-bottom: -0.15em;\n  padding: 0.3em 0.78571429em;\n}\n\n.ui.menu .item > .floating.label {\n  padding: 0.3em 0.78571429em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.menu .item > img:not(.ui) {\n  display: inline-block;\n  vertical-align: middle;\n  margin: -0.3em 0em;\n  width: 2.5em;\n}\n\n.ui.vertical.menu .item > img:not(.ui):only-child {\n  display: block;\n  max-width: 100%;\n  width: auto;\n}\n\n/*******************************\n          Coupling\n*******************************/\n\n/*--------------\n     Sidebar\n---------------*/\n\n/* Show vertical dividers below last */\n\n.ui.vertical.sidebar.menu > .item:first-child:before {\n  display: block !important;\n}\n\n.ui.vertical.sidebar.menu > .item::before {\n  top: auto;\n  bottom: 0px;\n}\n\n/*--------------\n    Container\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.menu > .ui.container {\n    width: 100% !important;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\n    border-left: 1px solid rgba(34, 36, 38, 0.1);\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.link.menu .item:hover,\n.ui.menu .dropdown.item:hover,\n.ui.menu .link.item:hover,\n.ui.menu a.item:hover {\n  cursor: pointer;\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Pressed\n---------------*/\n\n.ui.link.menu .item:active,\n.ui.menu .link.item:active,\n.ui.menu a.item:active {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  font-weight: normal;\n  box-shadow: none;\n}\n\n.ui.menu .active.item > i.icon {\n  opacity: 1;\n}\n\n/*--------------\n  Active Hover\n---------------*/\n\n.ui.menu .active.item:hover,\n.ui.vertical.menu .active.item:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.menu .item.disabled,\n.ui.menu .item.disabled:hover {\n  cursor: default;\n  background-color: transparent !important;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*------------------\nFloated Menu / Item\n-------------------*/\n\n/* Left Floated */\n\n.ui.menu:not(.vertical) .left.item,\n.ui.menu:not(.vertical) .left.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-right: auto !important;\n}\n\n/* Right Floated */\n\n.ui.menu:not(.vertical) .right.item,\n.ui.menu:not(.vertical) .right.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: auto !important;\n}\n\n/* Swapped Borders */\n\n.ui.menu .right.item::before,\n.ui.menu .right.menu > .item::before {\n  right: auto;\n  left: 0;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.menu {\n  display: block;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  background: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n/*--- Item ---*/\n\n.ui.vertical.menu .item {\n  display: block;\n  background: none;\n  border-top: none;\n  border-right: none;\n}\n\n.ui.vertical.menu > .item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px;\n}\n\n.ui.vertical.menu > .item:last-child {\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem;\n}\n\n/*--- Label ---*/\n\n.ui.vertical.menu .item > .label {\n  float: right;\n  text-align: center;\n}\n\n/*--- Icon ---*/\n\n.ui.vertical.menu .item > i.icon {\n  width: 1.18em;\n  float: right;\n  margin: 0em 0em 0em 0.5em;\n}\n\n.ui.vertical.menu .item > .label + i.icon {\n  float: none;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*--- Border ---*/\n\n.ui.vertical.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0px;\n  width: 100%;\n  height: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n.ui.vertical.menu .item:first-child:before {\n  display: none !important;\n}\n\n/*--- Sub Menu ---*/\n\n.ui.vertical.menu .item > .menu {\n  margin: 0.5em -1.14285714em 0em;\n}\n\n.ui.vertical.menu .menu .item {\n  background: none;\n  padding: 0.5em 1.33333333em;\n  font-size: 0.85714286em;\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.ui.vertical.menu .item .menu a.item:hover,\n.ui.vertical.menu .item .menu .link.item:hover {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.vertical.menu .menu .item:before {\n  display: none;\n}\n\n/* Vertical Active */\n\n.ui.vertical.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  border-radius: 0em;\n  box-shadow: none;\n}\n\n.ui.vertical.menu > .active.item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.vertical.menu > .active.item:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.vertical.menu > .active.item:only-child {\n  border-radius: 0.28571429rem;\n}\n\n.ui.vertical.menu .active.item .menu .active.item {\n  border-left: none;\n}\n\n.ui.vertical.menu .item .menu .active.item {\n  background-color: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Tabular\n---------------*/\n\n.ui.tabular.menu {\n  border-radius: 0em;\n  box-shadow: none !important;\n  border: none;\n  background: none transparent;\n  border-bottom: 1px solid #D4D4D5;\n}\n\n.ui.tabular.fluid.menu {\n  width: calc(100% +  2px ) !important;\n}\n\n.ui.tabular.menu .item {\n  background: transparent;\n  border-bottom: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  padding: 0.92857143em 1.42857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.tabular.menu .item:before {\n  display: none;\n}\n\n/* Hover */\n\n.ui.tabular.menu .item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active */\n\n.ui.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-top-width: 1px;\n  border-color: #D4D4D5;\n  font-weight: bold;\n  margin-bottom: -1px;\n  box-shadow: none;\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px !important;\n}\n\n/* Coupling with segment for attachment */\n\n.ui.tabular.menu + .attached:not(.top).segment,\n.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {\n  border-top: none;\n  margin-left: 0px;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 100%;\n}\n\n.top.attached.segment + .ui.bottom.tabular.menu {\n  position: relative;\n  width: calc(100% +  2px );\n  left: -1px;\n}\n\n/* Bottom Vertical Tabular */\n\n.ui.bottom.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-top: 1px solid #D4D4D5;\n}\n\n.ui.bottom.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: none;\n}\n\n.ui.bottom.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: -1px 0px 0px 0px;\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem !important;\n}\n\n/* Vertical Tabular (Left) */\n\n.ui.vertical.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: 1px solid #D4D4D5;\n}\n\n.ui.vertical.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-right: none;\n}\n\n.ui.vertical.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px -1px 0px 0px;\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem !important;\n}\n\n/* Vertical Right Tabular */\n\n.ui.vertical.right.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: none;\n  border-left: 1px solid #D4D4D5;\n}\n\n.ui.vertical.right.tabular.menu .item {\n  background: none;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-left: none;\n}\n\n.ui.vertical.right.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px 0px 0px -1px;\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px !important;\n}\n\n/* Dropdown */\n\n.ui.tabular.menu .active.dropdown.item {\n  margin-bottom: 0px;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  border-bottom: none;\n}\n\n/*--------------\n   Pagination\n---------------*/\n\n.ui.pagination.menu {\n  margin: 0em;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.ui.pagination.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.pagination.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.pagination.menu .item {\n  min-width: 3em;\n  text-align: center;\n}\n\n.ui.pagination.menu .icon.item i.icon {\n  vertical-align: top;\n}\n\n/* Active */\n\n.ui.pagination.menu .active.item {\n  border-top: none;\n  padding-top: 0.92857143em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: none;\n}\n\n/*--------------\n   Secondary\n---------------*/\n\n.ui.secondary.menu {\n  background: none;\n  margin-left: -0.35714286em;\n  margin-right: -0.35714286em;\n  border-radius: 0em;\n  border: none;\n  box-shadow: none;\n}\n\n/* Item */\n\n.ui.secondary.menu .item {\n  -ms-flex-item-align: center;\n  -ms-grid-row-align: center;\n  align-self: center;\n  box-shadow: none;\n  border: none;\n  padding: 0.78571429em 0.92857143em;\n  margin: 0em 0.35714286em;\n  background: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-radius: 0.28571429rem;\n}\n\n/* No Divider */\n\n.ui.secondary.menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n\n.ui.secondary.menu .header.item {\n  border-radius: 0em;\n  border-right: none;\n  background: none transparent;\n}\n\n/* Image */\n\n.ui.secondary.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/* Hover */\n\n.ui.secondary.menu .dropdown.item:hover,\n.ui.secondary.menu .link.item:hover,\n.ui.secondary.menu a.item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n\n.ui.secondary.menu .active.item {\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  border-radius: 0.28571429rem;\n}\n\n/* Active Hover */\n\n.ui.secondary.menu .active.item:hover {\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.menu .link.item,\n.ui.secondary.inverted.menu a.item {\n  color: rgba(255, 255, 255, 0.7) !important;\n}\n\n.ui.secondary.inverted.menu .dropdown.item:hover,\n.ui.secondary.inverted.menu .link.item:hover,\n.ui.secondary.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff !important;\n}\n\n.ui.secondary.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n/* Fix item margins */\n\n.ui.secondary.item.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n.ui.secondary.item.menu .item:last-child {\n  margin-right: 0em;\n}\n\n.ui.secondary.attached.menu {\n  box-shadow: none;\n}\n\n/* Sub Menu */\n\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {\n  margin: 0em -0.92857143em;\n}\n\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 1.33333333em;\n}\n\n/*---------------------\n   Secondary Vertical\n-----------------------*/\n\n.ui.secondary.vertical.menu > .item {\n  border: none;\n  margin: 0em 0em 0.35714286em;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.secondary.vertical.menu > .header.item {\n  border-radius: 0em;\n}\n\n/* Sub Menu */\n\n.ui.vertical.secondary.menu .item > .menu .item {\n  background-color: transparent;\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.menu {\n  background-color: transparent;\n}\n\n/*---------------------\n   Secondary Pointing\n-----------------------*/\n\n.ui.secondary.pointing.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n  border-bottom: 2px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.pointing.menu .item {\n  border-bottom-color: transparent;\n  border-bottom-style: solid;\n  border-radius: 0em;\n  -ms-flex-item-align: end;\n  align-self: flex-end;\n  margin: 0em 0em -2px;\n  padding: 0.85714286em 1.14285714em;\n  border-bottom-width: 2px;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Item Types */\n\n.ui.secondary.pointing.menu .header.item {\n  color: rgba(0, 0, 0, 0.85) !important;\n}\n\n.ui.secondary.pointing.menu .text.item {\n  box-shadow: none !important;\n}\n\n.ui.secondary.pointing.menu .item:after {\n  display: none;\n}\n\n/* Hover */\n\n.ui.secondary.pointing.menu .dropdown.item:hover,\n.ui.secondary.pointing.menu .link.item:hover,\n.ui.secondary.pointing.menu a.item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Pressed */\n\n.ui.secondary.pointing.menu .dropdown.item:active,\n.ui.secondary.pointing.menu .link.item:active,\n.ui.secondary.pointing.menu a.item:active {\n  background-color: transparent;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Active */\n\n.ui.secondary.pointing.menu .active.item {\n  background-color: transparent;\n  box-shadow: none;\n  border-color: #1B1C1D;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Hover */\n\n.ui.secondary.pointing.menu .active.item:hover {\n  border-color: #1B1C1D;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Dropdown */\n\n.ui.secondary.pointing.menu .active.dropdown.item {\n  border-color: transparent;\n}\n\n/* Vertical Pointing */\n\n.ui.secondary.vertical.pointing.menu {\n  border-bottom-width: 0px;\n  border-right-width: 2px;\n  border-right-style: solid;\n  border-right-color: rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.vertical.pointing.menu .item {\n  border-bottom: none;\n  border-right-style: solid;\n  border-right-color: transparent;\n  border-radius: 0em !important;\n  margin: 0em -2px 0em 0em;\n  border-right-width: 2px;\n}\n\n/* Vertical Active */\n\n.ui.secondary.vertical.pointing.menu .active.item {\n  border-color: #1B1C1D;\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.pointing.menu {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.ui.secondary.inverted.pointing.menu {\n  border-width: 2px;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.inverted.pointing.menu .item {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.secondary.inverted.pointing.menu .header.item {\n  color: #FFFFFF !important;\n}\n\n/* Hover */\n\n.ui.secondary.inverted.pointing.menu .link.item:hover,\n.ui.secondary.inverted.pointing.menu a.item:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n\n.ui.secondary.inverted.pointing.menu .active.item {\n  border-color: #FFFFFF;\n  color: #ffffff;\n}\n\n/*--------------\n    Text Menu\n---------------*/\n\n.ui.text.menu {\n  background: none transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n  margin: 1em -0.5em;\n}\n\n.ui.text.menu .item {\n  border-radius: 0px;\n  box-shadow: none;\n  -ms-flex-item-align: center;\n  -ms-grid-row-align: center;\n  align-self: center;\n  margin: 0em 0em;\n  padding: 0.35714286em 0.5em;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.6);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Border */\n\n.ui.text.menu .item:before,\n.ui.text.menu .menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n\n.ui.text.menu .header.item {\n  background-color: transparent;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.92857143em;\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n/* Image */\n\n.ui.text.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/*--- fluid text ---*/\n\n.ui.text.item.menu .item {\n  margin: 0em;\n}\n\n/*--- vertical text ---*/\n\n.ui.vertical.text.menu {\n  margin: 1em 0em;\n}\n\n.ui.vertical.text.menu:first-child {\n  margin-top: 0rem;\n}\n\n.ui.vertical.text.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n.ui.vertical.text.menu .item {\n  margin: 0.57142857em 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n}\n\n.ui.vertical.text.menu .item > i.icon {\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n.ui.vertical.text.menu .header.item {\n  margin: 0.57142857em 0em 0.71428571em;\n}\n\n/* Vertical Sub Menu */\n\n.ui.vertical.text.menu .item:not(.dropdown) > .menu {\n  margin: 0em;\n}\n\n.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 0em;\n}\n\n/*--- hover ---*/\n\n.ui.text.menu .item:hover {\n  opacity: 1;\n  background-color: transparent;\n}\n\n/*--- active ---*/\n\n.ui.text.menu .active.item {\n  background-color: transparent;\n  border: none;\n  box-shadow: none;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--- active hover ---*/\n\n.ui.text.menu .active.item:hover {\n  background-color: transparent;\n}\n\n/* Disable Bariations */\n\n.ui.text.pointing.menu .active.item:after {\n  box-shadow: none;\n}\n\n.ui.text.attached.menu {\n  box-shadow: none;\n}\n\n/* Inverted */\n\n.ui.inverted.text.menu,\n.ui.inverted.text.menu .item,\n.ui.inverted.text.menu .item:hover,\n.ui.inverted.text.menu .active.item {\n  background-color: transparent !important;\n}\n\n/* Fluid */\n\n.ui.fluid.text.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n/* Vertical Menu */\n\n.ui.vertical.icon.menu {\n  display: inline-block;\n  width: auto;\n}\n\n/* Item */\n\n.ui.icon.menu .item {\n  height: auto;\n  text-align: center;\n  color: #1B1C1D;\n}\n\n/* Icon */\n\n.ui.icon.menu .item > .icon:not(.dropdown) {\n  margin: 0;\n  opacity: 1;\n}\n\n/* Icon Gylph */\n\n.ui.icon.menu .icon:before {\n  opacity: 1;\n}\n\n/* (x) Item Icon */\n\n.ui.menu .icon.item > .icon {\n  width: auto;\n  margin: 0em auto;\n}\n\n/* Vertical Icon */\n\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\n  display: block;\n  opacity: 1;\n  margin: 0em auto;\n  float: none;\n}\n\n/* Inverted */\n\n.ui.inverted.icon.menu .item {\n  color: #FFFFFF;\n}\n\n/*--------------\n   Labeled Icon\n---------------*/\n\n/* Menu */\n\n.ui.labeled.icon.menu {\n  text-align: center;\n}\n\n/* Item */\n\n.ui.labeled.icon.menu .item {\n  min-width: 6em;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n/* Icon */\n\n.ui.labeled.icon.menu .item > .icon:not(.dropdown) {\n  height: 1em;\n  display: block;\n  font-size: 1.71428571em !important;\n  margin: 0em auto 0.5rem !important;\n}\n\n/* Fluid */\n\n.ui.fluid.labeled.icon.menu > .item {\n  min-width: 0em;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.stackable.menu .item {\n    width: 100% !important;\n  }\n\n  .ui.stackable.menu .item:before {\n    position: absolute;\n    content: '';\n    top: auto;\n    bottom: 0px;\n    left: 0px;\n    width: 100%;\n    height: 1px;\n    background: rgba(34, 36, 38, 0.1);\n  }\n\n  .ui.stackable.menu .left.menu,\n  .ui.stackable.menu .left.item {\n    margin-right: 0 !important;\n  }\n\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .right.item {\n    margin-left: 0 !important;\n  }\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/*--- Standard Colors  ---*/\n\n.ui.menu .red.active.item,\n.ui.red.menu .active.item {\n  border-color: #DB2828 !important;\n  color: #DB2828 !important;\n}\n\n.ui.menu .orange.active.item,\n.ui.orange.menu .active.item {\n  border-color: #F2711C !important;\n  color: #F2711C !important;\n}\n\n.ui.menu .yellow.active.item,\n.ui.yellow.menu .active.item {\n  border-color: #FBBD08 !important;\n  color: #FBBD08 !important;\n}\n\n.ui.menu .olive.active.item,\n.ui.olive.menu .active.item {\n  border-color: #B5CC18 !important;\n  color: #B5CC18 !important;\n}\n\n.ui.menu .green.active.item,\n.ui.green.menu .active.item {\n  border-color: #21BA45 !important;\n  color: #21BA45 !important;\n}\n\n.ui.menu .teal.active.item,\n.ui.teal.menu .active.item {\n  border-color: #00B5AD !important;\n  color: #00B5AD !important;\n}\n\n.ui.menu .blue.active.item,\n.ui.blue.menu .active.item {\n  border-color: #2185D0 !important;\n  color: #2185D0 !important;\n}\n\n.ui.menu .violet.active.item,\n.ui.violet.menu .active.item {\n  border-color: #6435C9 !important;\n  color: #6435C9 !important;\n}\n\n.ui.menu .purple.active.item,\n.ui.purple.menu .active.item {\n  border-color: #A333C8 !important;\n  color: #A333C8 !important;\n}\n\n.ui.menu .pink.active.item,\n.ui.pink.menu .active.item {\n  border-color: #E03997 !important;\n  color: #E03997 !important;\n}\n\n.ui.menu .brown.active.item,\n.ui.brown.menu .active.item {\n  border-color: #A5673F !important;\n  color: #A5673F !important;\n}\n\n.ui.menu .grey.active.item,\n.ui.grey.menu .active.item {\n  border-color: #767676 !important;\n  color: #767676 !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.menu {\n  border: 0px solid transparent;\n  background: #1B1C1D;\n  box-shadow: none;\n}\n\n/* Menu Item */\n\n.ui.inverted.menu .item,\n.ui.inverted.menu .item > a:not(.ui) {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.menu .item.menu {\n  background: transparent;\n}\n\n/*--- Border ---*/\n\n.ui.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n.ui.vertical.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n/* Sub Menu */\n\n.ui.vertical.inverted.menu .menu .item,\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/* Header */\n\n.ui.inverted.menu .header.item {\n  margin: 0em;\n  background: transparent;\n  box-shadow: none;\n}\n\n/* Disabled */\n\n.ui.inverted.menu .item.disabled,\n.ui.inverted.menu .item.disabled:hover {\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/*--- Hover ---*/\n\n.ui.link.inverted.menu .item:hover,\n.ui.inverted.menu .dropdown.item:hover,\n.ui.inverted.menu .link.item:hover,\n.ui.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n.ui.vertical.inverted.menu .item .menu a.item:hover,\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\n  background: transparent;\n  color: #ffffff;\n}\n\n/*--- Pressed ---*/\n\n.ui.inverted.menu a.item:active,\n.ui.inverted.menu .link.item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/*--- Active ---*/\n\n.ui.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n.ui.inverted.vertical.menu .item .menu .active.item {\n  background: transparent;\n  color: #FFFFFF;\n}\n\n.ui.inverted.pointing.menu .active.item:after {\n  background: #3D3E3F !important;\n  margin: 0em !important;\n  box-shadow: none !important;\n  border: none !important;\n}\n\n/*--- Active Hover ---*/\n\n.ui.inverted.menu .active.item:hover {\n  background: rgba(255, 255, 255, 0.15);\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.pointing.menu .active.item:hover:after {\n  background: #3D3E3F !important;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.floated.menu {\n  float: left;\n  margin: 0rem 0.5rem 0rem 0rem;\n}\n\n.ui.floated.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.right.floated.menu {\n  float: right;\n  margin: 0rem 0rem 0rem 0.5rem;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Red */\n\n.ui.inverted.menu .red.active.item,\n.ui.inverted.red.menu {\n  background-color: #DB2828;\n}\n\n.ui.inverted.red.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.red.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Orange */\n\n.ui.inverted.menu .orange.active.item,\n.ui.inverted.orange.menu {\n  background-color: #F2711C;\n}\n\n.ui.inverted.orange.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.orange.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Yellow */\n\n.ui.inverted.menu .yellow.active.item,\n.ui.inverted.yellow.menu {\n  background-color: #FBBD08;\n}\n\n.ui.inverted.yellow.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.yellow.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Olive */\n\n.ui.inverted.menu .olive.active.item,\n.ui.inverted.olive.menu {\n  background-color: #B5CC18;\n}\n\n.ui.inverted.olive.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.olive.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Green */\n\n.ui.inverted.menu .green.active.item,\n.ui.inverted.green.menu {\n  background-color: #21BA45;\n}\n\n.ui.inverted.green.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.green.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Teal */\n\n.ui.inverted.menu .teal.active.item,\n.ui.inverted.teal.menu {\n  background-color: #00B5AD;\n}\n\n.ui.inverted.teal.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.teal.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Blue */\n\n.ui.inverted.menu .blue.active.item,\n.ui.inverted.blue.menu {\n  background-color: #2185D0;\n}\n\n.ui.inverted.blue.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.blue.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Violet */\n\n.ui.inverted.menu .violet.active.item,\n.ui.inverted.violet.menu {\n  background-color: #6435C9;\n}\n\n.ui.inverted.violet.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.violet.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Purple */\n\n.ui.inverted.menu .purple.active.item,\n.ui.inverted.purple.menu {\n  background-color: #A333C8;\n}\n\n.ui.inverted.purple.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.purple.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Pink */\n\n.ui.inverted.menu .pink.active.item,\n.ui.inverted.pink.menu {\n  background-color: #E03997;\n}\n\n.ui.inverted.pink.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.pink.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Brown */\n\n.ui.inverted.menu .brown.active.item,\n.ui.inverted.brown.menu {\n  background-color: #A5673F;\n}\n\n.ui.inverted.brown.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.brown.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Grey */\n\n.ui.inverted.menu .grey.active.item,\n.ui.inverted.grey.menu {\n  background-color: #767676;\n}\n\n.ui.inverted.grey.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.grey.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.menu .item,\n.ui.fitted.menu .item .menu .item,\n.ui.menu .fitted.item {\n  padding: 0em;\n}\n\n.ui.horizontally.fitted.menu .item,\n.ui.horizontally.fitted.menu .item .menu .item,\n.ui.menu .horizontally.fitted.item {\n  padding-top: 0.92857143em;\n  padding-bottom: 0.92857143em;\n}\n\n.ui.vertically.fitted.menu .item,\n.ui.vertically.fitted.menu .item .menu .item,\n.ui.menu .vertically.fitted.item {\n  padding-left: 1.14285714em;\n  padding-right: 1.14285714em;\n}\n\n/*--------------\n   Borderless\n---------------*/\n\n.ui.borderless.menu .item:before,\n.ui.borderless.menu .item .menu .item:before,\n.ui.menu .borderless.item:before {\n  background: none !important;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.menu {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin: 0em;\n  vertical-align: middle;\n}\n\n.ui.compact.vertical.menu {\n  display: inline-block;\n}\n\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.compact.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.compact.vertical.menu {\n  width: auto !important;\n}\n\n.ui.compact.vertical.menu .item:last-child::before {\n  display: block;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.menu.fluid,\n.ui.vertical.menu.fluid {\n  width: 100% !important;\n}\n\n/*-------------------\n      Evenly Sized\n--------------------*/\n\n.ui.item.menu,\n.ui.item.menu .item {\n  width: 100%;\n  padding-left: 0em !important;\n  padding-right: 0em !important;\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n  text-align: center;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.item.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.menu.two.item .item {\n  width: 50%;\n}\n\n.ui.menu.three.item .item {\n  width: 33.333%;\n}\n\n.ui.menu.four.item .item {\n  width: 25%;\n}\n\n.ui.menu.five.item .item {\n  width: 20%;\n}\n\n.ui.menu.six.item .item {\n  width: 16.666%;\n}\n\n.ui.menu.seven.item .item {\n  width: 14.285%;\n}\n\n.ui.menu.eight.item .item {\n  width: 12.500%;\n}\n\n.ui.menu.nine.item .item {\n  width: 11.11%;\n}\n\n.ui.menu.ten.item .item {\n  width: 10.0%;\n}\n\n.ui.menu.eleven.item .item {\n  width: 9.09%;\n}\n\n.ui.menu.twelve.item .item {\n  width: 8.333%;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.menu.fixed {\n  position: fixed;\n  z-index: 101;\n  margin: 0em;\n  width: 100%;\n}\n\n.ui.menu.fixed,\n.ui.menu.fixed .item:first-child,\n.ui.menu.fixed .item:last-child {\n  border-radius: 0px !important;\n}\n\n.ui.fixed.menu,\n.ui[class*=\"top fixed\"].menu {\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n}\n\n.ui[class*=\"top fixed\"].menu {\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n\n.ui[class*=\"right fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-right: none;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n.ui[class*=\"bottom fixed\"].menu {\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  bottom: 0px;\n  left: 0px;\n  top: auto;\n  right: auto;\n}\n\n.ui[class*=\"left fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-left: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n/* Coupling with Grid */\n\n.ui.fixed.menu + .ui.grid {\n  padding-top: 2.75rem;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.menu .item:after {\n  visibility: hidden;\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  background: none;\n  margin: 0.5px 0em 0em;\n  width: 0.57142857em;\n  height: 0.57142857em;\n  border: none;\n  border-bottom: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n  z-index: 2;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.vertical.pointing.menu .item:after {\n  position: absolute;\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n  margin: 0em -0.5px 0em 0em;\n  border: none;\n  border-top: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n}\n\n/* Active */\n\n.ui.pointing.menu .active.item:after {\n  visibility: visible;\n}\n\n.ui.pointing.menu .active.dropdown.item:after {\n  visibility: hidden;\n}\n\n/* Don't double up pointers */\n\n.ui.pointing.menu .dropdown.active.item:after,\n.ui.pointing.menu .active.item .menu .active.item:after {\n  display: none;\n}\n\n/* Colors */\n\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n\n.ui.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n\n.ui.vertical.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n\n.ui.vertical.pointing.menu .menu .active.item:after {\n  background-color: #FFFFFF;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* Middle */\n\n.ui.attached.menu {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  box-shadow: none;\n}\n\n.ui.attached + .ui.attached.menu:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].menu {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.menu[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui[class*=\"bottom attached\"].menu {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].menu:last-child {\n  margin-bottom: 0em;\n}\n\n/* Attached Menu Item */\n\n.ui.top.attached.menu > .item:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.bottom.attached.menu > .item:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/* Tabular Attached */\n\n.ui.attached.menu:not(.tabular) {\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached.inverted.menu {\n  border: none;\n}\n\n.ui.attached.tabular.menu {\n  margin-left: 0;\n  margin-right: 0;\n  width: 100%;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n/* Mini */\n\n.ui.mini.menu {\n  font-size: 0.78571429rem;\n}\n\n.ui.mini.vertical.menu {\n  width: 9rem;\n}\n\n/* Tiny */\n\n.ui.tiny.menu {\n  font-size: 0.85714286rem;\n}\n\n.ui.tiny.vertical.menu {\n  width: 11rem;\n}\n\n/* Small */\n\n.ui.small.menu {\n  font-size: 0.92857143rem;\n}\n\n.ui.small.vertical.menu {\n  width: 13rem;\n}\n\n/* Medium */\n\n.ui.menu {\n  font-size: 1rem;\n}\n\n.ui.vertical.menu {\n  width: 15rem;\n}\n\n/* Large */\n\n.ui.large.menu {\n  font-size: 1.07142857rem;\n}\n\n.ui.large.vertical.menu {\n  width: 18rem;\n}\n\n/* Huge */\n\n.ui.huge.menu {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.vertical.menu {\n  width: 20rem;\n}\n\n/* Big */\n\n.ui.big.menu {\n  font-size: 1.21428571rem;\n}\n\n.ui.big.vertical.menu {\n  width: 22rem;\n}\n\n/* Massive */\n\n.ui.massive.menu {\n  font-size: 1.28571429rem;\n}\n\n.ui.massive.vertical.menu {\n  width: 25rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Message\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Message\n*******************************/\n\n.ui.message {\n  position: relative;\n  min-height: 1em;\n  margin: 1em 0em;\n  background: #F8F8F9;\n  padding: 1em 1.5em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.message:first-child {\n  margin-top: 0em;\n}\n\n.ui.message:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n/* Header */\n\n.ui.message .header {\n  display: block;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  margin: -0.14285em 0em 0rem 0em;\n}\n\n/* Default font size */\n\n.ui.message .header:not(.ui) {\n  font-size: 1.14285714em;\n}\n\n/* Paragraph */\n\n.ui.message p {\n  opacity: 0.85;\n  margin: 0.75em 0em;\n}\n\n.ui.message p:first-child {\n  margin-top: 0em;\n}\n\n.ui.message p:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.message .header + p {\n  margin-top: 0.25em;\n}\n\n/* List */\n\n.ui.message .list:not(.ui) {\n  text-align: left;\n  padding: 0em;\n  opacity: 0.85;\n  list-style-position: inside;\n  margin: 0.5em 0em 0em;\n}\n\n.ui.message .list:not(.ui):first-child {\n  margin-top: 0em;\n}\n\n.ui.message .list:not(.ui):last-child {\n  margin-bottom: 0em;\n}\n\n.ui.message .list:not(.ui) li {\n  position: relative;\n  list-style-type: none;\n  margin: 0em 0em 0.3em 1em;\n  padding: 0em;\n}\n\n.ui.message .list:not(.ui) li:before {\n  position: absolute;\n  content: '•';\n  left: -1em;\n  height: 100%;\n  vertical-align: baseline;\n}\n\n.ui.message .list:not(.ui) li:last-child {\n  margin-bottom: 0em;\n}\n\n/* Icon */\n\n.ui.message > .icon {\n  margin-right: 0.6em;\n}\n\n/* Close Icon */\n\n.ui.message > .close.icon {\n  cursor: pointer;\n  position: absolute;\n  margin: 0em;\n  top: 0.78575em;\n  right: 0.5em;\n  opacity: 0.7;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.message > .close.icon:hover {\n  opacity: 1;\n}\n\n/* First / Last Element */\n\n.ui.message > :first-child {\n  margin-top: 0em;\n}\n\n.ui.message > :last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.dropdown .menu > .message {\n  margin: 0px -1px;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Visible\n---------------*/\n\n.ui.visible.visible.visible.visible.message {\n  display: block;\n}\n\n.ui.icon.visible.visible.visible.visible.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n.ui.hidden.hidden.hidden.hidden.message {\n  display: none;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n    Compact\n---------------*/\n\n.ui.compact.message {\n  display: inline-block;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.message {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\n  margin-top: -1px;\n  border-radius: 0em;\n}\n\n.ui.bottom.attached.message {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n.ui.bottom.attached.message:not(:last-child) {\n  margin-bottom: 1em;\n}\n\n.ui.attached.icon.message {\n  width: auto;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.icon.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.icon.message > .icon:not(.close) {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 3em;\n  opacity: 0.8;\n}\n\n.ui.icon.message > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  vertical-align: middle;\n}\n\n.ui.icon.message .icon:not(.close) + .content {\n  padding-left: 0rem;\n}\n\n.ui.icon.message .circular.icon {\n  width: 1em;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.message {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*--------------\n     Types\n---------------*/\n\n/* Positive */\n\n.ui.positive.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n\n.ui.positive.message,\n.ui.attached.positive.message {\n  box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.positive.message .header {\n  color: #1A531B;\n}\n\n/* Negative */\n\n.ui.negative.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n\n.ui.negative.message,\n.ui.attached.negative.message {\n  box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.negative.message .header {\n  color: #912D2B;\n}\n\n/* Info */\n\n.ui.info.message {\n  background-color: #F8FFFF;\n  color: #276F86;\n}\n\n.ui.info.message,\n.ui.attached.info.message {\n  box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.info.message .header {\n  color: #0E566C;\n}\n\n/* Warning */\n\n.ui.warning.message {\n  background-color: #FFFAF3;\n  color: #573A08;\n}\n\n.ui.warning.message,\n.ui.attached.warning.message {\n  box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.warning.message .header {\n  color: #794B02;\n}\n\n/* Error */\n\n.ui.error.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n\n.ui.error.message,\n.ui.attached.error.message {\n  box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.error.message .header {\n  color: #912D2B;\n}\n\n/* Success */\n\n.ui.success.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n\n.ui.success.message,\n.ui.attached.success.message {\n  box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.success.message .header {\n  color: #1A531B;\n}\n\n/* Colors */\n\n.ui.inverted.message,\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.red.message {\n  background-color: #FFE8E6;\n  color: #DB2828;\n  box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.red.message .header {\n  color: #c82121;\n}\n\n.ui.orange.message {\n  background-color: #FFEDDE;\n  color: #F2711C;\n  box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.orange.message .header {\n  color: #e7640d;\n}\n\n.ui.yellow.message {\n  background-color: #FFF8DB;\n  color: #B58105;\n  box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.yellow.message .header {\n  color: #9c6f04;\n}\n\n.ui.olive.message {\n  background-color: #FBFDEF;\n  color: #8ABC1E;\n  box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.olive.message .header {\n  color: #7aa61a;\n}\n\n.ui.green.message {\n  background-color: #E5F9E7;\n  color: #1EBC30;\n  box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.green.message .header {\n  color: #1aa62a;\n}\n\n.ui.teal.message {\n  background-color: #E1F7F7;\n  color: #10A3A3;\n  box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.teal.message .header {\n  color: #0e8c8c;\n}\n\n.ui.blue.message {\n  background-color: #DFF0FF;\n  color: #2185D0;\n  box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.blue.message .header {\n  color: #1e77ba;\n}\n\n.ui.violet.message {\n  background-color: #EAE7FF;\n  color: #6435C9;\n  box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.violet.message .header {\n  color: #5a30b5;\n}\n\n.ui.purple.message {\n  background-color: #F6E7FF;\n  color: #A333C8;\n  box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.purple.message .header {\n  color: #922eb4;\n}\n\n.ui.pink.message {\n  background-color: #FFE3FB;\n  color: #E03997;\n  box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.pink.message .header {\n  color: #dd238b;\n}\n\n.ui.brown.message {\n  background-color: #F1E2D3;\n  color: #A5673F;\n  box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.brown.message .header {\n  color: #935b38;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.message {\n  font-size: 0.78571429em;\n}\n\n.ui.tiny.message {\n  font-size: 0.85714286em;\n}\n\n.ui.small.message {\n  font-size: 0.92857143em;\n}\n\n.ui.message {\n  font-size: 1em;\n}\n\n.ui.large.message {\n  font-size: 1.14285714em;\n}\n\n.ui.big.message {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.message {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.message {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Table\n*******************************/\n\n/* Prototype */\n\n.ui.table {\n  width: 100%;\n  background: #FFFFFF;\n  margin: 1em 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n  border-radius: 0.28571429rem;\n  text-align: left;\n  color: rgba(0, 0, 0, 0.87);\n  border-collapse: separate;\n  border-spacing: 0px;\n}\n\n.ui.table:first-child {\n  margin-top: 0em;\n}\n\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Parts\n*******************************/\n\n/* Table Content */\n\n.ui.table th,\n.ui.table td {\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n/* Headers */\n\n.ui.table thead {\n  box-shadow: none;\n}\n\n.ui.table thead th {\n  cursor: auto;\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.92857143em 0.78571429em;\n  vertical-align: inherit;\n  font-style: none;\n  font-weight: bold;\n  text-transform: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  border-left: none;\n}\n\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Footer */\n\n.ui.table tfoot {\n  box-shadow: none;\n}\n\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429em 0.78571429em;\n  vertical-align: middle;\n  font-style: normal;\n  font-weight: normal;\n  text-transform: none;\n}\n\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Table Row */\n\n.ui.table tr td {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n\n.ui.table td {\n  padding: 0.78571429em 0.78571429em;\n  text-align: inherit;\n}\n\n/* Icons */\n\n.ui.table > .icon {\n  vertical-align: baseline;\n}\n\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n\n.ui.table.segment {\n  padding: 0em;\n}\n\n.ui.table.segment:after {\n  display: none;\n}\n\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n/* Responsive */\n\n@media only screen and (max-width: 767px) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    width: auto !important;\n    display: block !important;\n  }\n\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n\n  .ui.table:not(.unstackable) thead {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tfoot {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em !important;\n    box-shadow: none !important;\n  }\n\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n\n  /* Definition Table */\n\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/* UI Image */\n\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n\n.ui.structured.table thead th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.sortable.table thead th {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.structured.basic.table th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: -1px -1px 0px 1px #FFFFFF;\n}\n\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: rgba(0, 0, 0, 0.4);\n  color: normal;\n  box-shadow: 1px 1px 0px 1px #FFFFFF;\n}\n\n/* Remove Border */\n\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  box-shadow: 0px -1px 0px 1px #FFFFFF;\n}\n\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  box-shadow: 0px 1px 0px 1px #FFFFFF;\n}\n\n/* Highlight Defining Column */\n\n.ui.definition.table tr td:first-child:not(.ignored),\n.ui.definition.table tr td.definition {\n  background: rgba(0, 0, 0, 0.03);\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  text-transform: '';\n  box-shadow: '';\n  text-align: '';\n  font-size: 1em;\n  padding-left: '';\n  padding-right: '';\n}\n\n/* Fix 2nd Column */\n\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table td:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  box-shadow: 0px 0px 0px #A3C293 inset;\n}\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: #FCFFF5 !important;\n  color: #2C662D !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n\n.ui.table tr.error,\n.ui.table td.error {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  box-shadow: 0px 0px 0px #C9BA9B inset;\n}\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: #FFFAF3 !important;\n  color: #573A08 !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n}\n\n.ui.table tr.active,\n.ui.table td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    width: 100% !important;\n    display: block !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em;\n    box-shadow: none !important;\n  }\n\n  /* Definition Table */\n\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.table {\n  table-layout: fixed;\n}\n\n.ui.fixed.table th,\n.ui.fixed.table td {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n/*--------------\n   Selectable\n---------------*/\n\n.ui.selectable.table tbody tr:hover,\n.ui.table tbody tr td.selectable:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.selectable.inverted.table tbody tr:hover,\n.ui.inverted.table tbody tr td.selectable:hover {\n  background: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n}\n\n/* Selectable Cell Link */\n\n.ui.table tbody tr td.selectable {\n  padding: 0em;\n}\n\n.ui.table tbody tr td.selectable > a:not(.ui) {\n  display: block;\n  color: inherit;\n  padding: 0.78571429em 0.78571429em;\n}\n\n/* Other States */\n\n.ui.selectable.table tr.error:hover,\n.ui.table tr td.selectable.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n.ui.selectable.table tr.warning:hover,\n.ui.table tr td.selectable.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: #fff4e4 !important;\n  color: #493107 !important;\n}\n\n.ui.selectable.table tr.active:hover,\n.ui.table tr td.selectable.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n.ui.selectable.table tr.positive:hover,\n.ui.table tr td.selectable.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: #f7ffe6 !important;\n  color: #275b28 !important;\n}\n\n.ui.selectable.table tr.negative:hover,\n.ui.table tr td.selectable.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n/* Middle */\n\n.ui.attached.table {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached + .ui.attached.table:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].table {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui[class*=\"bottom attached\"].table {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1em;\n  box-shadow: none, none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].table:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n/* Table Striping */\n\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 50, 0.02);\n}\n\n/* Stripes */\n\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n/* Allow striped active hover */\n\n.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {\n  background: #EFEFEF !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.table {\n  border-top: 0.2em solid #DB2828;\n}\n\n.ui.inverted.red.table {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n\n.ui.orange.table {\n  border-top: 0.2em solid #F2711C;\n}\n\n.ui.inverted.orange.table {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n\n.ui.yellow.table {\n  border-top: 0.2em solid #FBBD08;\n}\n\n.ui.inverted.yellow.table {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n\n.ui.olive.table {\n  border-top: 0.2em solid #B5CC18;\n}\n\n.ui.inverted.olive.table {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n\n.ui.green.table {\n  border-top: 0.2em solid #21BA45;\n}\n\n.ui.inverted.green.table {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n\n.ui.teal.table {\n  border-top: 0.2em solid #00B5AD;\n}\n\n.ui.inverted.teal.table {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n\n.ui.blue.table {\n  border-top: 0.2em solid #2185D0;\n}\n\n.ui.inverted.blue.table {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n\n.ui.violet.table {\n  border-top: 0.2em solid #6435C9;\n}\n\n.ui.inverted.violet.table {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n\n.ui.purple.table {\n  border-top: 0.2em solid #A333C8;\n}\n\n.ui.inverted.purple.table {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n\n.ui.pink.table {\n  border-top: 0.2em solid #E03997;\n}\n\n.ui.inverted.pink.table {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n\n.ui.brown.table {\n  border-top: 0.2em solid #A5673F;\n}\n\n.ui.inverted.brown.table {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n\n.ui.grey.table {\n  border-top: 0.2em solid #767676;\n}\n\n.ui.inverted.grey.table {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n\n.ui.black.table {\n  border-top: 0.2em solid #1B1C1D;\n}\n\n.ui.inverted.black.table {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n  Column Count\n---------------*/\n\n/* Grid Based */\n\n.ui.one.column.table td {\n  width: 100%;\n}\n\n.ui.two.column.table td {\n  width: 50%;\n}\n\n.ui.three.column.table td {\n  width: 33.33333333%;\n}\n\n.ui.four.column.table td {\n  width: 25%;\n}\n\n.ui.five.column.table td {\n  width: 20%;\n}\n\n.ui.six.column.table td {\n  width: 16.66666667%;\n}\n\n.ui.seven.column.table td {\n  width: 14.28571429%;\n}\n\n.ui.eight.column.table td {\n  width: 12.5%;\n}\n\n.ui.nine.column.table td {\n  width: 11.11111111%;\n}\n\n.ui.ten.column.table td {\n  width: 10%;\n}\n\n.ui.eleven.column.table td {\n  width: 9.09090909%;\n}\n\n.ui.twelve.column.table td {\n  width: 8.33333333%;\n}\n\n.ui.thirteen.column.table td {\n  width: 7.69230769%;\n}\n\n.ui.fourteen.column.table td {\n  width: 7.14285714%;\n}\n\n.ui.fifteen.column.table td {\n  width: 6.66666667%;\n}\n\n.ui.sixteen.column.table td {\n  width: 6.25%;\n}\n\n/* Column Width */\n\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: 6.25%;\n}\n\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: 12.5%;\n}\n\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: 18.75%;\n}\n\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: 25%;\n}\n\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: 31.25%;\n}\n\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: 37.5%;\n}\n\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: 43.75%;\n}\n\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: 50%;\n}\n\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: 56.25%;\n}\n\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: 62.5%;\n}\n\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: 68.75%;\n}\n\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: 75%;\n}\n\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: 81.25%;\n}\n\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: 87.5%;\n}\n\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: 93.75%;\n}\n\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: 100%;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: auto;\n  opacity: 0.8;\n  margin: 0em 0em 0em 0.5em;\n  font-family: 'Icons';\n}\n\n.ui.sortable.table thead th.ascending:after {\n  content: '\\f0d8';\n}\n\n.ui.sortable.table thead th.descending:after {\n  content: '\\f0d7';\n}\n\n/* Hover */\n\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n.ui.sortable.table thead th:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Sorted */\n\n.ui.sortable.table thead th.sorted {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n\n.ui.sortable.table thead th.sorted:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.sortable.table thead th.sorted {\n  background: rgba(255, 255, 255, 0.15) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th:hover {\n  background: rgba(255, 255, 255, 0.08) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Text Color */\n\n.ui.inverted.table {\n  background: #333333;\n  color: rgba(255, 255, 255, 0.9);\n  border: none;\n}\n\n.ui.inverted.table th {\n  background-color: rgba(0, 0, 0, 0.15);\n  border-color: rgba(255, 255, 255, 0.1) !important;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.table tr td {\n  border-color: rgba(255, 255, 255, 0.1) !important;\n}\n\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/* Definition */\n\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: #FFFFFF;\n}\n\n.ui.inverted.definition.table tr td:first-child {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: transparent;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  box-shadow: none;\n}\n\n.ui.basic.table th {\n  background: transparent;\n  border-left: none;\n}\n\n.ui.basic.table tbody tr {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.basic.table td {\n  background: transparent;\n}\n\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n/* Very Basic */\n\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: '';\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: 1em;\n  padding-right: 1em;\n}\n\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: 1em 1em;\n}\n\n/* Very */\n\n.ui[class*=\"very padded\"].table th {\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n}\n\n.ui[class*=\"very padded\"].table td {\n  padding: 1.5em 1.5em;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: 0.7em;\n  padding-right: 0.7em;\n}\n\n.ui.compact.table td {\n  padding: 0.5em 0.7em;\n}\n\n/* Very */\n\n.ui[class*=\"very compact\"].table th {\n  padding-left: 0.6em;\n  padding-right: 0.6em;\n}\n\n.ui[class*=\"very compact\"].table td {\n  padding: 0.4em 0.6em;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n/* Small */\n\n.ui.small.table {\n  font-size: 0.9em;\n}\n\n/* Standard */\n\n.ui.table {\n  font-size: 1em;\n}\n\n/* Large */\n\n.ui.large.table {\n  font-size: 1.1em;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n         Advertisement\n*******************************/\n\n.ui.ad {\n  display: block;\n  overflow: hidden;\n  margin: 1em 0em;\n}\n\n.ui.ad:first-child {\n  margin: 0em;\n}\n\n.ui.ad:last-child {\n  margin: 0em;\n}\n\n.ui.ad iframe {\n  margin: 0em;\n  padding: 0em;\n  border: none;\n  overflow: hidden;\n}\n\n/*--------------\n     Common\n---------------*/\n\n/* Leaderboard */\n\n.ui.leaderboard.ad {\n  width: 728px;\n  height: 90px;\n}\n\n/* Medium Rectangle */\n\n.ui[class*=\"medium rectangle\"].ad {\n  width: 300px;\n  height: 250px;\n}\n\n/* Large Rectangle */\n\n.ui[class*=\"large rectangle\"].ad {\n  width: 336px;\n  height: 280px;\n}\n\n/* Half Page */\n\n.ui[class*=\"half page\"].ad {\n  width: 300px;\n  height: 600px;\n}\n\n/*--------------\n     Square\n---------------*/\n\n/* Square */\n\n.ui.square.ad {\n  width: 250px;\n  height: 250px;\n}\n\n/* Small Square */\n\n.ui[class*=\"small square\"].ad {\n  width: 200px;\n  height: 200px;\n}\n\n/*--------------\n    Rectangle\n---------------*/\n\n/* Small Rectangle */\n\n.ui[class*=\"small rectangle\"].ad {\n  width: 180px;\n  height: 150px;\n}\n\n/* Vertical Rectangle */\n\n.ui[class*=\"vertical rectangle\"].ad {\n  width: 240px;\n  height: 400px;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.button.ad {\n  width: 120px;\n  height: 90px;\n}\n\n.ui[class*=\"square button\"].ad {\n  width: 125px;\n  height: 125px;\n}\n\n.ui[class*=\"small button\"].ad {\n  width: 120px;\n  height: 60px;\n}\n\n/*--------------\n   Skyscrapers\n---------------*/\n\n/* Skyscraper */\n\n.ui.skyscraper.ad {\n  width: 120px;\n  height: 600px;\n}\n\n/* Wide Skyscraper */\n\n.ui[class*=\"wide skyscraper\"].ad {\n  width: 160px;\n}\n\n/*--------------\n     Banners\n---------------*/\n\n/* Banner */\n\n.ui.banner.ad {\n  width: 468px;\n  height: 60px;\n}\n\n/* Vertical Banner */\n\n.ui[class*=\"vertical banner\"].ad {\n  width: 120px;\n  height: 240px;\n}\n\n/* Top Banner */\n\n.ui[class*=\"top banner\"].ad {\n  width: 930px;\n  height: 180px;\n}\n\n/* Half Banner */\n\n.ui[class*=\"half banner\"].ad {\n  width: 234px;\n  height: 60px;\n}\n\n/*--------------\n    Boards\n---------------*/\n\n/* Leaderboard */\n\n.ui[class*=\"large leaderboard\"].ad {\n  width: 970px;\n  height: 90px;\n}\n\n/* Billboard */\n\n.ui.billboard.ad {\n  width: 970px;\n  height: 250px;\n}\n\n/*--------------\n    Panorama\n---------------*/\n\n/* Panorama */\n\n.ui.panorama.ad {\n  width: 980px;\n  height: 120px;\n}\n\n/*--------------\n     Netboard\n---------------*/\n\n/* Netboard */\n\n.ui.netboard.ad {\n  width: 580px;\n  height: 400px;\n}\n\n/*--------------\n     Mobile\n---------------*/\n\n/* Large Mobile Banner */\n\n.ui[class*=\"large mobile banner\"].ad {\n  width: 320px;\n  height: 100px;\n}\n\n/* Mobile Leaderboard */\n\n.ui[class*=\"mobile leaderboard\"].ad {\n  width: 320px;\n  height: 50px;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/* Mobile Sizes */\n\n.ui.mobile.ad {\n  display: none;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.mobile.ad {\n    display: block;\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.centered.ad {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.ui.test.ad {\n  position: relative;\n  background: #545454;\n}\n\n.ui.test.ad:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  text-align: center;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  content: 'Ad';\n  color: #FFFFFF;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n.ui.mobile.test.ad:after {\n  font-size: 0.85714286em;\n}\n\n.ui.test.ad[data-text]:after {\n  content: attr(data-text);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Card\n---------------*/\n\n.ui.cards > .card,\n.ui.card {\n  max-width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 290px;\n  min-height: 0px;\n  background: #FFFFFF;\n  padding: 0em;\n  border: none;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transition: box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease, -webkit-transform 0.1s ease;\n  z-index: '';\n}\n\n.ui.card {\n  margin: 1em 0em;\n}\n\n.ui.cards > .card a,\n.ui.card a {\n  cursor: pointer;\n}\n\n.ui.card:first-child {\n  margin-top: 0em;\n}\n\n.ui.card:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Cards\n---------------*/\n\n.ui.cards {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: -0.875em -0.5em;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n}\n\n.ui.cards > .card {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0.875em 0.5em;\n  float: none;\n}\n\n/* Clearing */\n\n.ui.cards:after,\n.ui.card:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/* Consecutive Card Groups Preserve Row Spacing */\n\n.ui.cards ~ .ui.cards {\n  margin-top: 0.875em;\n}\n\n/*--------------\n  Rounded Edges\n---------------*/\n\n.ui.cards > .card > :first-child,\n.ui.card > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n  border-top: none !important;\n}\n\n.ui.cards > .card > :last-child,\n.ui.card > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n.ui.cards > .card > :only-child,\n.ui.card > :only-child {\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.cards > .card > .image,\n.ui.card > .image {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  padding: 0em;\n  background: rgba(0, 0, 0, 0.05);\n}\n\n.ui.cards > .card > .image > img,\n.ui.card > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: inherit;\n}\n\n.ui.cards > .card > .image:not(.ui) > img,\n.ui.card > .image:not(.ui) > img {\n  border: none;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.cards > .card > .content,\n.ui.card > .content {\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  background: none;\n  margin: 0em;\n  padding: 1em 1em;\n  box-shadow: none;\n  font-size: 1em;\n  border-radius: 0em;\n}\n\n.ui.cards > .card > .content:after,\n.ui.card > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.cards > .card > .content > .header,\n.ui.card > .content > .header {\n  display: block;\n  margin: '';\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n\n.ui.cards > .card > .content > .header:not(.ui),\n.ui.card > .content > .header:not(.ui) {\n  font-weight: bold;\n  font-size: 1.28571429em;\n  margin-top: -0.21425em;\n  line-height: 1.2857em;\n}\n\n.ui.cards > .card > .content > .meta + .description,\n.ui.cards > .card > .content > .header + .description,\n.ui.card > .content > .meta + .description,\n.ui.card > .content > .header + .description {\n  margin-top: 0.5em;\n}\n\n/*----------------\n Floated Content\n-----------------*/\n\n.ui.cards > .card [class*=\"left floated\"],\n.ui.card [class*=\"left floated\"] {\n  float: left;\n}\n\n.ui.cards > .card [class*=\"right floated\"],\n.ui.card [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n     Aligned\n---------------*/\n\n.ui.cards > .card [class*=\"left aligned\"],\n.ui.card [class*=\"left aligned\"] {\n  text-align: left;\n}\n\n.ui.cards > .card [class*=\"center aligned\"],\n.ui.card [class*=\"center aligned\"] {\n  text-align: center;\n}\n\n.ui.cards > .card [class*=\"right aligned\"],\n.ui.card [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.cards > .card .content img,\n.ui.card .content img {\n  display: inline-block;\n  vertical-align: middle;\n  width: '';\n}\n\n.ui.cards > .card img.avatar,\n.ui.cards > .card .avatar img,\n.ui.card img.avatar,\n.ui.card .avatar img {\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.cards > .card > .content > .description,\n.ui.card > .content > .description {\n  clear: both;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.cards > .card > .content p,\n.ui.card > .content p {\n  margin: 0em 0em 0.5em;\n}\n\n.ui.cards > .card > .content p:last-child,\n.ui.card > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.cards > .card .meta,\n.ui.card .meta {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card .meta *,\n.ui.card .meta * {\n  margin-right: 0.3em;\n}\n\n.ui.cards > .card .meta :last-child,\n.ui.card .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.cards > .card .meta [class*=\"right floated\"],\n.ui.card .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n\n.ui.cards > .card > .content a:not(.ui),\n.ui.card > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content a:not(.ui):hover,\n.ui.card > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n\n.ui.cards > .card > .content > a.header,\n.ui.card > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.cards > .card > .content > a.header:hover,\n.ui.card > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n\n.ui.cards > .card .meta > a:not(.ui),\n.ui.card .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card .meta > a:not(.ui):hover,\n.ui.card .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Buttons\n---------------*/\n\n.ui.cards > .card > .buttons,\n.ui.card > .buttons,\n.ui.cards > .card > .button,\n.ui.card > .button {\n  margin: 0px -1px;\n  width: calc(100% +  2px );\n}\n\n/*--------------\n      Dimmer\n---------------*/\n\n.ui.cards > .card .dimmer,\n.ui.card .dimmer {\n  background-color: '';\n  z-index: 10;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n\n.ui.cards > .card > .content .star.icon,\n.ui.card > .content .star.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content .star.icon:hover,\n.ui.card > .content .star.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n\n.ui.cards > .card > .content .active.star.icon,\n.ui.card > .content .active.star.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n/* Icon */\n\n.ui.cards > .card > .content .like.icon,\n.ui.card > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content .like.icon:hover,\n.ui.card > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n\n.ui.cards > .card > .content .active.like.icon,\n.ui.card > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.cards > .card > .extra,\n.ui.card > .extra {\n  max-width: 100%;\n  min-height: 0em !important;\n  -webkit-box-flex: 0;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;\n  position: static;\n  background: none;\n  width: auto;\n  margin: 0em 0em;\n  padding: 0.75em 1em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .extra a:not(.ui),\n.ui.card > .extra a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card > .extra a:not(.ui):hover,\n.ui.card > .extra a:not(.ui):hover {\n  color: #1e70bf;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.raised.cards a.card:hover,\n.ui.link.cards .raised.card:hover,\na.ui.raised.card:hover,\n.ui.link.raised.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n}\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*-------------------\n       Centered\n--------------------*/\n\n.ui.centered.cards {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.centered.card {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.card {\n  width: 100%;\n  max-width: 9999px;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.cards a.card,\n.ui.link.cards .card,\na.ui.card,\n.ui.link.card {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.ui.cards a.card:hover,\n.ui.link.cards .card:hover,\na.ui.card:hover,\n.ui.link.card:hover {\n  cursor: pointer;\n  z-index: 5;\n  background: #FFFFFF;\n  border: none;\n  box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transform: translateY(-3px);\n  transform: translateY(-3px);\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.cards > .card,\n.ui.cards > .red.card,\n.ui.red.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.red.cards > .card:hover,\n.ui.cards > .red.card:hover,\n.ui.red.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Orange */\n\n.ui.orange.cards > .card,\n.ui.cards > .orange.card,\n.ui.orange.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.orange.cards > .card:hover,\n.ui.cards > .orange.card:hover,\n.ui.orange.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Yellow */\n\n.ui.yellow.cards > .card,\n.ui.cards > .yellow.card,\n.ui.yellow.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.yellow.cards > .card:hover,\n.ui.cards > .yellow.card:hover,\n.ui.yellow.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Olive */\n\n.ui.olive.cards > .card,\n.ui.cards > .olive.card,\n.ui.olive.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.olive.cards > .card:hover,\n.ui.cards > .olive.card:hover,\n.ui.olive.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Green */\n\n.ui.green.cards > .card,\n.ui.cards > .green.card,\n.ui.green.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.green.cards > .card:hover,\n.ui.cards > .green.card:hover,\n.ui.green.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Teal */\n\n.ui.teal.cards > .card,\n.ui.cards > .teal.card,\n.ui.teal.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.teal.cards > .card:hover,\n.ui.cards > .teal.card:hover,\n.ui.teal.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Blue */\n\n.ui.blue.cards > .card,\n.ui.cards > .blue.card,\n.ui.blue.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.blue.cards > .card:hover,\n.ui.cards > .blue.card:hover,\n.ui.blue.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Violet */\n\n.ui.violet.cards > .card,\n.ui.cards > .violet.card,\n.ui.violet.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.violet.cards > .card:hover,\n.ui.cards > .violet.card:hover,\n.ui.violet.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Purple */\n\n.ui.purple.cards > .card,\n.ui.cards > .purple.card,\n.ui.purple.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.purple.cards > .card:hover,\n.ui.cards > .purple.card:hover,\n.ui.purple.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Pink */\n\n.ui.pink.cards > .card,\n.ui.cards > .pink.card,\n.ui.pink.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.pink.cards > .card:hover,\n.ui.cards > .pink.card:hover,\n.ui.pink.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Brown */\n\n.ui.brown.cards > .card,\n.ui.cards > .brown.card,\n.ui.brown.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.brown.cards > .card:hover,\n.ui.cards > .brown.card:hover,\n.ui.brown.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Grey */\n\n.ui.grey.cards > .card,\n.ui.cards > .grey.card,\n.ui.grey.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.grey.cards > .card:hover,\n.ui.cards > .grey.card:hover,\n.ui.grey.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Black */\n\n.ui.black.cards > .card,\n.ui.cards > .black.card,\n.ui.black.card {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.black.cards > .card:hover,\n.ui.cards > .black.card:hover,\n.ui.black.card:hover {\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n}\n\n/*--------------\n   Card Count\n---------------*/\n\n.ui.one.cards {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n.ui.one.cards > .card {\n  width: 100%;\n}\n\n.ui.two.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n\n.ui.two.cards > .card {\n  width: calc( 50%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\n.ui.three.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n\n.ui.three.cards > .card {\n  width: calc( 33.33333333%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\n.ui.four.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.four.cards > .card {\n  width: calc( 25%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.five.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.five.cards > .card {\n  width: calc( 20%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.six.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.six.cards > .card {\n  width: calc( 16.66666667%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.seven.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.seven.cards > .card {\n  width: calc( 14.28571429%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.ui.eight.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.eight.cards > .card {\n  width: calc( 12.5%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 11px;\n}\n\n.ui.nine.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.nine.cards > .card {\n  width: calc( 11.11111111%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 10px;\n}\n\n.ui.ten.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.ten.cards > .card {\n  width: calc( 10%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Mobile Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.two.doubling.cards .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.three.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.four.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.five.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.six.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.seven.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.seven.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.eight.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.nine.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.nine.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.ten.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.ten.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n}\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.two.doubling.cards .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.three.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.four.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.five.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.six.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.eight.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.eight.doubling.cards .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n\n  .ui.nine.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.nine.doubling.cards .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n\n  .ui.ten.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.ten.doubling.cards .card {\n    width: calc( 20%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.cards {\n    display: block !important;\n  }\n\n  .ui.stackable.cards .card:first-child {\n    margin-top: 0em !important;\n  }\n\n  .ui.stackable.cards > .card {\n    display: block !important;\n    height: auto !important;\n    margin: 1em 1em;\n    padding: 0 !important;\n    width: calc( 100%  -  2em ) !important;\n  }\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.cards > .card {\n  font-size: 1em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Comment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n    Comments\n---------------*/\n\n.ui.comments {\n  margin: 1.5em 0em;\n  max-width: 650px;\n}\n\n.ui.comments:first-child {\n  margin-top: 0em;\n}\n\n.ui.comments:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Comment\n---------------*/\n\n.ui.comments .comment {\n  position: relative;\n  background: none;\n  margin: 0.5em 0em 0em;\n  padding: 0.5em 0em 0em;\n  border: none;\n  border-top: none;\n  line-height: 1.2;\n}\n\n.ui.comments .comment:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\n/*--------------------\n    Nested Comments\n---------------------*/\n\n.ui.comments .comment .comments {\n  margin: 0em 0em 0.5em 0.5em;\n  padding: 1em 0em 1em 1em;\n}\n\n.ui.comments .comment .comments:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n}\n\n.ui.comments .comment .comments .comment {\n  border: none;\n  border-top: none;\n  background: none;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.comments .comment .avatar {\n  display: block;\n  width: 2.5em;\n  height: auto;\n  float: left;\n  margin: 0.2em 0em 0em;\n}\n\n.ui.comments .comment img.avatar,\n.ui.comments .comment .avatar img {\n  display: block;\n  margin: 0em auto;\n  width: 100%;\n  height: 100%;\n  border-radius: 0.25rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.comments .comment > .content {\n  display: block;\n}\n\n/* If there is an avatar move content over */\n\n.ui.comments .comment > .avatar ~ .content {\n  margin-left: 3.5em;\n}\n\n/*--------------\n     Author\n---------------*/\n\n.ui.comments .comment .author {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n}\n\n.ui.comments .comment a.author {\n  cursor: pointer;\n}\n\n.ui.comments .comment a.author:hover {\n  color: #1e70bf;\n}\n\n/*--------------\n     Metadata\n---------------*/\n\n.ui.comments .comment .metadata {\n  display: inline-block;\n  margin-left: 0.5em;\n  color: rgba(0, 0, 0, 0.4);\n  font-size: 0.875em;\n}\n\n.ui.comments .comment .metadata > * {\n  display: inline-block;\n  margin: 0em 0.5em 0em 0em;\n}\n\n.ui.comments .comment .metadata > :last-child {\n  margin-right: 0em;\n}\n\n/*--------------------\n     Comment Text\n---------------------*/\n\n.ui.comments .comment .text {\n  margin: 0.25em 0em 0.5em;\n  font-size: 1em;\n  word-wrap: break-word;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.3;\n}\n\n/*--------------------\n     User Actions\n---------------------*/\n\n.ui.comments .comment .actions {\n  font-size: 0.875em;\n}\n\n.ui.comments .comment .actions a {\n  cursor: pointer;\n  display: inline-block;\n  margin: 0em 0.75em 0em 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.comments .comment .actions a:last-child {\n  margin-right: 0em;\n}\n\n.ui.comments .comment .actions a.active,\n.ui.comments .comment .actions a:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------------\n      Reply Form\n---------------------*/\n\n.ui.comments > .reply.form {\n  margin-top: 1em;\n}\n\n.ui.comments .comment .reply.form {\n  width: 100%;\n  margin-top: 1em;\n}\n\n.ui.comments .reply.form textarea {\n  font-size: 1em;\n  height: 12em;\n}\n\n/*******************************\n            State\n*******************************/\n\n.ui.collapsed.comments,\n.ui.comments .collapsed.comments,\n.ui.comments .collapsed.comment {\n  display: none;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n        Threaded\n---------------------*/\n\n.ui.threaded.comments .comment .comments {\n  margin: -1.5em 0 -1em 1.25em;\n  padding: 3em 0em 2em 2.25em;\n  box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------------\n        Minimal\n---------------------*/\n\n.ui.minimal.comments .comment .actions {\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n  -webkit-transition-delay: 0.1s;\n  transition-delay: 0.1s;\n}\n\n.ui.minimal.comments .comment > .content:hover > .actions {\n  opacity: 1;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.comments {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.comments {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.comments {\n  font-size: 0.9em;\n}\n\n.ui.comments {\n  font-size: 1em;\n}\n\n.ui.large.comments {\n  font-size: 1.1em;\n}\n\n.ui.big.comments {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.comments {\n  font-size: 1.2em;\n}\n\n.ui.massive.comments {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Feed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n         Activity Feed\n*******************************/\n\n.ui.feed {\n  margin: 1em 0em;\n}\n\n.ui.feed:first-child {\n  margin-top: 0em;\n}\n\n.ui.feed:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Event */\n\n.ui.feed > .event {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  width: 100%;\n  padding: 0.21428571rem 0em;\n  margin: 0em;\n  background: none;\n  border-top: none;\n}\n\n.ui.feed > .event:first-child {\n  border-top: 0px;\n  padding-top: 0em;\n}\n\n.ui.feed > .event:last-child {\n  padding-bottom: 0em;\n}\n\n/* Event Label */\n\n.ui.feed > .event > .label {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 2.5em;\n  height: auto;\n  -ms-flex-item-align: stretch;\n  -ms-grid-row-align: stretch;\n  align-self: stretch;\n  text-align: left;\n}\n\n.ui.feed > .event > .label .icon {\n  opacity: 1;\n  font-size: 1.5em;\n  width: 100%;\n  padding: 0.25em;\n  background: none;\n  border: none;\n  border-radius: none;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.feed > .event > .label img {\n  width: 100%;\n  height: auto;\n  border-radius: 500rem;\n}\n\n.ui.feed > .event > .label + .content {\n  margin: 0.5em 0em 0.35714286em 1.14285714em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n/* Content */\n\n.ui.feed > .event > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-item-align: stretch;\n  -ms-grid-row-align: stretch;\n  align-self: stretch;\n  text-align: left;\n  word-wrap: break-word;\n}\n\n.ui.feed > .event:last-child > .content {\n  padding-bottom: 0em;\n}\n\n/* Link */\n\n.ui.feed > .event > .content a {\n  cursor: pointer;\n}\n\n/*--------------\n      Date\n---------------*/\n\n.ui.feed > .event > .content .date {\n  margin: -0.5rem 0em 0em;\n  padding: 0em;\n  font-weight: normal;\n  font-size: 1em;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n     Summary\n---------------*/\n\n.ui.feed > .event > .content .summary {\n  margin: 0em;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Summary Image */\n\n.ui.feed > .event > .content .summary img {\n  display: inline-block;\n  width: auto;\n  height: 10em;\n  margin: -0.25em 0.25em 0em 0em;\n  border-radius: 0.25em;\n  vertical-align: middle;\n}\n\n/*--------------\n      User\n---------------*/\n\n.ui.feed > .event > .content .user {\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 0em;\n  vertical-align: baseline;\n}\n\n.ui.feed > .event > .content .user img {\n  margin: -0.25em 0.25em 0em 0em;\n  width: auto;\n  height: 10em;\n  vertical-align: middle;\n}\n\n/*--------------\n   Inline Date\n---------------*/\n\n/* Date inside Summary */\n\n.ui.feed > .event > .content .summary > .date {\n  display: inline-block;\n  float: none;\n  font-weight: normal;\n  font-size: 0.85714286em;\n  font-style: normal;\n  margin: 0em 0em 0em 0.5em;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n  Extra Summary\n---------------*/\n\n.ui.feed > .event > .content .extra {\n  margin: 0.5em 0em 0em;\n  background: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Images */\n\n.ui.feed > .event > .content .extra.images img {\n  display: inline-block;\n  margin: 0em 0.25em 0em 0em;\n  width: 6em;\n}\n\n/* Text */\n\n.ui.feed > .event > .content .extra.text {\n  padding: 0em;\n  border-left: none;\n  font-size: 1em;\n  max-width: 500px;\n  line-height: 1.4285em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.feed > .event > .content .meta {\n  display: inline-block;\n  font-size: 0.85714286em;\n  margin: 0.5em 0em 0em;\n  background: none;\n  border: none;\n  border-radius: 0;\n  box-shadow: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.feed > .event > .content .meta > * {\n  position: relative;\n  margin-left: 0.75em;\n}\n\n.ui.feed > .event > .content .meta > *:after {\n  content: '';\n  color: rgba(0, 0, 0, 0.2);\n  top: 0em;\n  left: -1em;\n  opacity: 1;\n  position: absolute;\n  vertical-align: top;\n}\n\n.ui.feed > .event > .content .meta .like {\n  color: '';\n  -webkit-transition: 0.2s color ease;\n  transition: 0.2s color ease;\n}\n\n.ui.feed > .event > .content .meta .like:hover .icon {\n  color: #FF2733;\n}\n\n.ui.feed > .event > .content .meta .active.like .icon {\n  color: #EF404A;\n}\n\n/* First element */\n\n.ui.feed > .event > .content .meta > :first-child {\n  margin-left: 0em;\n}\n\n.ui.feed > .event > .content .meta > :first-child::after {\n  display: none;\n}\n\n/* Action */\n\n.ui.feed > .event > .content .meta a,\n.ui.feed > .event > .content .meta > .icon {\n  cursor: pointer;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.5);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.feed > .event > .content .meta a:hover,\n.ui.feed > .event > .content .meta a:hover .icon,\n.ui.feed > .event > .content .meta > .icon:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*******************************\n            Variations\n*******************************/\n\n.ui.small.feed {\n  font-size: 0.92857143rem;\n}\n\n.ui.feed {\n  font-size: 1rem;\n}\n\n.ui.large.feed {\n  font-size: 1.14285714rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em 0em;\n  width: 100%;\n  min-height: 0px;\n  background: transparent;\n  padding: 0em;\n  border: none;\n  border-radius: 0rem;\n  box-shadow: none;\n  -webkit-transition: box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease;\n  z-index: '';\n}\n\n.ui.items > .item a {\n  cursor: pointer;\n}\n\n/*--------------\n      Items\n---------------*/\n\n.ui.items {\n  margin: 1.5em 0em;\n}\n\n.ui.items:first-child {\n  margin-top: 0em !important;\n}\n\n.ui.items:last-child {\n  margin-bottom: 0em !important;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.items > .item:first-child {\n  margin-top: 0em;\n}\n\n.ui.items > .item:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.items > .item > .image {\n  position: relative;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  display: block;\n  float: none;\n  margin: 0em;\n  padding: 0em;\n  max-height: '';\n  -ms-flex-item-align: top;\n  -ms-grid-row-align: top;\n  align-self: top;\n}\n\n.ui.items > .item > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: 0.125rem;\n  border: none;\n}\n\n.ui.items > .item > .image:only-child > img {\n  border-radius: 0rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.items > .item > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  background: none;\n  margin: 0em;\n  padding: 0em;\n  box-shadow: none;\n  font-size: 1em;\n  border: none;\n  border-radius: 0em;\n}\n\n.ui.items > .item > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.items > .item > .image + .content {\n  min-width: 0;\n  width: auto;\n  display: block;\n  margin-left: 0em;\n  -ms-flex-item-align: top;\n  -ms-grid-row-align: top;\n  align-self: top;\n  padding-left: 1.5em;\n}\n\n.ui.items > .item > .content > .header {\n  display: inline-block;\n  margin: -0.21425em 0em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n\n.ui.items > .item > .content > .header:not(.ui) {\n  font-size: 1.28571429em;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.items > .item [class*=\"left floated\"] {\n  float: left;\n}\n\n.ui.items > .item [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.items > .item .content img {\n  -ms-flex-item-align: middle;\n  -ms-grid-row-align: middle;\n  align-self: middle;\n  width: '';\n}\n\n.ui.items > .item img.avatar,\n.ui.items > .item .avatar img {\n  width: '';\n  height: '';\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.items > .item > .content > .description {\n  margin-top: 0.6em;\n  max-width: auto;\n  font-size: 1em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.items > .item > .content p {\n  margin: 0em 0em 0.5em;\n}\n\n.ui.items > .item > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.items > .item .meta {\n  margin: 0.5em 0em 0.5em;\n  font-size: 1em;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.items > .item .meta * {\n  margin-right: 0.3em;\n}\n\n.ui.items > .item .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.items > .item .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n\n.ui.items > .item > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n\n.ui.items > .item > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.items > .item > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n\n.ui.items > .item .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.items > .item .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n\n.ui.items > .item > .content .favorite.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content .favorite.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n\n.ui.items > .item > .content .active.favorite.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n/* Icon */\n\n.ui.items > .item > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n\n.ui.items > .item > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.items > .item .extra {\n  display: block;\n  position: relative;\n  background: none;\n  margin: 0.5rem 0em 0em;\n  width: 100%;\n  padding: 0em 0em 0em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-top: none;\n}\n\n.ui.items > .item .extra > * {\n  margin: 0.25rem 0.5rem 0.25rem 0em;\n}\n\n.ui.items > .item .extra > [class*=\"right floated\"] {\n  margin: 0.25rem 0em 0.25rem 0.5rem;\n}\n\n.ui.items > .item .extra:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/*******************************\n          Responsive\n*******************************/\n\n/* Default Image Width */\n\n.ui.items > .item > .image:not(.ui) {\n  width: 175px;\n}\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.items > .item {\n    margin: 1em 0em;\n  }\n\n  .ui.items > .item > .image:not(.ui) {\n    width: 150px;\n  }\n\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 0em 0em 0em 1em;\n  }\n}\n\n/* Mobile Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.items > .item {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin: 2em 0em;\n  }\n\n  .ui.items > .item > .image {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  .ui.items > .item > .image,\n  .ui.items > .item > .image > img {\n    max-width: 100% !important;\n    width: auto !important;\n    max-height: 250px !important;\n  }\n\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 1.5em 0em 0em;\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.items > .item > .image + [class*=\"top aligned\"].content {\n  -ms-flex-item-align: start;\n  align-self: flex-start;\n}\n\n.ui.items > .item > .image + [class*=\"middle aligned\"].content {\n  -ms-flex-item-align: center;\n  -ms-grid-row-align: center;\n  align-self: center;\n}\n\n.ui.items > .item > .image + [class*=\"bottom aligned\"].content {\n  -ms-flex-item-align: end;\n  align-self: flex-end;\n}\n\n/*--------------\n     Relaxed\n---------------*/\n\n.ui.relaxed.items > .item {\n  margin: 1.5em 0em;\n}\n\n.ui[class*=\"very relaxed\"].items > .item {\n  margin: 2em 0em;\n}\n\n/*-------------------\n      Divided\n--------------------*/\n\n.ui.divided.items > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding: 1em 0em;\n}\n\n.ui.divided.items > .item:first-child {\n  border-top: none;\n  margin-top: 0em !important;\n  padding-top: 0em !important;\n}\n\n.ui.divided.items > .item:last-child {\n  margin-bottom: 0em !important;\n  padding-bottom: 0em !important;\n}\n\n/* Relaxed Divided */\n\n.ui.relaxed.divided.items > .item {\n  margin: 0em;\n  padding: 1.5em 0em;\n}\n\n.ui[class*=\"very relaxed\"].divided.items > .item {\n  margin: 0em;\n  padding: 2em 0em;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.items a.item:hover,\n.ui.link.items > .item:hover {\n  cursor: pointer;\n}\n\n.ui.items a.item:hover .content .header,\n.ui.link.items > .item:hover .content .header {\n  color: #1e70bf;\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.items > .item {\n  font-size: 1em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Statistic\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Statistic\n*******************************/\n\n/* Standalone */\n\n.ui.statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 1em 0em;\n  max-width: auto;\n}\n\n.ui.statistic + .ui.statistic {\n  margin: 0em 0em 0em 1.5em;\n}\n\n.ui.statistic:first-child {\n  margin-top: 0em;\n}\n\n.ui.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Group\n*******************************/\n\n/* Grouped */\n\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n}\n\n.ui.statistics > .statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 0em 1.5em 2em;\n  max-width: auto;\n}\n\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em -1.5em -2em;\n}\n\n/* Clearing */\n\n.ui.statistics:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.statistics:first-child {\n  margin-top: 0em;\n}\n\n.ui.statistics:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n      Value\n---------------*/\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 4rem;\n  font-weight: normal;\n  line-height: 1em;\n  color: #1B1C1D;\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/*--------------\n     Label\n---------------*/\n\n.ui.statistics .statistic > .label,\n.ui.statistic > .label {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/* Top Label */\n\n.ui.statistics .statistic > .label ~ .value,\n.ui.statistic > .label ~ .value {\n  margin-top: 0rem;\n}\n\n/* Bottom Label */\n\n.ui.statistics .statistic > .value ~ .label,\n.ui.statistic > .value ~ .label {\n  margin-top: 0rem;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n   Icon Value\n---------------*/\n\n.ui.statistics .statistic > .value .icon,\n.ui.statistic > .value .icon {\n  opacity: 1;\n  width: auto;\n  margin: 0em;\n}\n\n/*--------------\n   Text Value\n---------------*/\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  line-height: 1em;\n  min-height: 2em;\n  font-weight: bold;\n  text-align: center;\n}\n\n.ui.statistics .statistic > .text.value + .label,\n.ui.statistic > .text.value + .label {\n  text-align: center;\n}\n\n/*--------------\n   Image Value\n---------------*/\n\n.ui.statistics .statistic > .value img,\n.ui.statistic > .value img {\n  max-height: 3rem;\n  vertical-align: baseline;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n      Count\n---------------*/\n\n.ui.ten.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.ten.statistics .statistic {\n  min-width: 10%;\n  margin: 0em 0em 2em;\n}\n\n.ui.nine.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.nine.statistics .statistic {\n  min-width: 11.11111111%;\n  margin: 0em 0em 2em;\n}\n\n.ui.eight.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.eight.statistics .statistic {\n  min-width: 12.5%;\n  margin: 0em 0em 2em;\n}\n\n.ui.seven.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.seven.statistics .statistic {\n  min-width: 14.28571429%;\n  margin: 0em 0em 2em;\n}\n\n.ui.six.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.six.statistics .statistic {\n  min-width: 16.66666667%;\n  margin: 0em 0em 2em;\n}\n\n.ui.five.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.five.statistics .statistic {\n  min-width: 20%;\n  margin: 0em 0em 2em;\n}\n\n.ui.four.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.four.statistics .statistic {\n  min-width: 25%;\n  margin: 0em 0em 2em;\n}\n\n.ui.three.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.three.statistics .statistic {\n  min-width: 33.33333333%;\n  margin: 0em 0em 2em;\n}\n\n.ui.two.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.two.statistics .statistic {\n  min-width: 50%;\n  margin: 0em 0em 2em;\n}\n\n.ui.one.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.one.statistics .statistic {\n  min-width: 100%;\n  margin: 0em 0em 2em;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.horizontal.statistics {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 0em;\n  max-width: none;\n}\n\n.ui.horizontal.statistics .statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  max-width: none;\n  margin: 1em 0em;\n}\n\n.ui.horizontal.statistic > .text.value,\n.ui.horizontal.statistics > .statistic > .text.value {\n  min-height: 0em !important;\n}\n\n.ui.horizontal.statistics .statistic > .value .icon,\n.ui.horizontal.statistic > .value .icon {\n  width: 1.18em;\n}\n\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ui.horizontal.statistics .statistic > .label,\n.ui.horizontal.statistic > .label {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0em 0em 0em 0.75em;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.red.statistics .statistic > .value,\n.ui.statistics .red.statistic > .value,\n.ui.red.statistic > .value {\n  color: #DB2828;\n}\n\n.ui.orange.statistics .statistic > .value,\n.ui.statistics .orange.statistic > .value,\n.ui.orange.statistic > .value {\n  color: #F2711C;\n}\n\n.ui.yellow.statistics .statistic > .value,\n.ui.statistics .yellow.statistic > .value,\n.ui.yellow.statistic > .value {\n  color: #FBBD08;\n}\n\n.ui.olive.statistics .statistic > .value,\n.ui.statistics .olive.statistic > .value,\n.ui.olive.statistic > .value {\n  color: #B5CC18;\n}\n\n.ui.green.statistics .statistic > .value,\n.ui.statistics .green.statistic > .value,\n.ui.green.statistic > .value {\n  color: #21BA45;\n}\n\n.ui.teal.statistics .statistic > .value,\n.ui.statistics .teal.statistic > .value,\n.ui.teal.statistic > .value {\n  color: #00B5AD;\n}\n\n.ui.blue.statistics .statistic > .value,\n.ui.statistics .blue.statistic > .value,\n.ui.blue.statistic > .value {\n  color: #2185D0;\n}\n\n.ui.violet.statistics .statistic > .value,\n.ui.statistics .violet.statistic > .value,\n.ui.violet.statistic > .value {\n  color: #6435C9;\n}\n\n.ui.purple.statistics .statistic > .value,\n.ui.statistics .purple.statistic > .value,\n.ui.purple.statistic > .value {\n  color: #A333C8;\n}\n\n.ui.pink.statistics .statistic > .value,\n.ui.statistics .pink.statistic > .value,\n.ui.pink.statistic > .value {\n  color: #E03997;\n}\n\n.ui.brown.statistics .statistic > .value,\n.ui.statistics .brown.statistic > .value,\n.ui.brown.statistic > .value {\n  color: #A5673F;\n}\n\n.ui.grey.statistics .statistic > .value,\n.ui.statistics .grey.statistic > .value,\n.ui.grey.statistic > .value {\n  color: #767676;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.statistics .statistic > .value,\n.ui.inverted.statistic .value {\n  color: #FFFFFF;\n}\n\n.ui.inverted.statistics .statistic > .label,\n.ui.inverted.statistic .label {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.red.statistics .statistic > .value,\n.ui.statistics .inverted.red.statistic > .value,\n.ui.inverted.red.statistic > .value {\n  color: #FF695E;\n}\n\n.ui.inverted.orange.statistics .statistic > .value,\n.ui.statistics .inverted.orange.statistic > .value,\n.ui.inverted.orange.statistic > .value {\n  color: #FF851B;\n}\n\n.ui.inverted.yellow.statistics .statistic > .value,\n.ui.statistics .inverted.yellow.statistic > .value,\n.ui.inverted.yellow.statistic > .value {\n  color: #FFE21F;\n}\n\n.ui.inverted.olive.statistics .statistic > .value,\n.ui.statistics .inverted.olive.statistic > .value,\n.ui.inverted.olive.statistic > .value {\n  color: #D9E778;\n}\n\n.ui.inverted.green.statistics .statistic > .value,\n.ui.statistics .inverted.green.statistic > .value,\n.ui.inverted.green.statistic > .value {\n  color: #2ECC40;\n}\n\n.ui.inverted.teal.statistics .statistic > .value,\n.ui.statistics .inverted.teal.statistic > .value,\n.ui.inverted.teal.statistic > .value {\n  color: #6DFFFF;\n}\n\n.ui.inverted.blue.statistics .statistic > .value,\n.ui.statistics .inverted.blue.statistic > .value,\n.ui.inverted.blue.statistic > .value {\n  color: #54C8FF;\n}\n\n.ui.inverted.violet.statistics .statistic > .value,\n.ui.statistics .inverted.violet.statistic > .value,\n.ui.inverted.violet.statistic > .value {\n  color: #A291FB;\n}\n\n.ui.inverted.purple.statistics .statistic > .value,\n.ui.statistics .inverted.purple.statistic > .value,\n.ui.inverted.purple.statistic > .value {\n  color: #DC73FF;\n}\n\n.ui.inverted.pink.statistics .statistic > .value,\n.ui.statistics .inverted.pink.statistic > .value,\n.ui.inverted.pink.statistic > .value {\n  color: #FF8EDF;\n}\n\n.ui.inverted.brown.statistics .statistic > .value,\n.ui.statistics .inverted.brown.statistic > .value,\n.ui.inverted.brown.statistic > .value {\n  color: #D67C1C;\n}\n\n.ui.inverted.grey.statistics .statistic > .value,\n.ui.statistics .inverted.grey.statistic > .value,\n.ui.inverted.grey.statistic > .value {\n  color: #DCDDDE;\n}\n\n/*--------------\n    Floated\n---------------*/\n\n.ui[class*=\"left floated\"].statistic {\n  float: left;\n  margin: 0em 2em 1em 0em;\n}\n\n.ui[class*=\"right floated\"].statistic {\n  float: right;\n  margin: 0em 0em 1em 2em;\n}\n\n.ui.floated.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n/* Mini */\n\n.ui.mini.statistics .statistic > .value,\n.ui.mini.statistic > .value {\n  font-size: 1.5rem !important;\n}\n\n.ui.mini.horizontal.statistics .statistic > .value,\n.ui.mini.horizontal.statistic > .value {\n  font-size: 1.5rem !important;\n}\n\n.ui.mini.statistics .statistic > .text.value,\n.ui.mini.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Tiny */\n\n.ui.tiny.statistics .statistic > .value,\n.ui.tiny.statistic > .value {\n  font-size: 2rem !important;\n}\n\n.ui.tiny.horizontal.statistics .statistic > .value,\n.ui.tiny.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n\n.ui.tiny.statistics .statistic > .text.value,\n.ui.tiny.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Small */\n\n.ui.small.statistics .statistic > .value,\n.ui.small.statistic > .value {\n  font-size: 3rem !important;\n}\n\n.ui.small.horizontal.statistics .statistic > .value,\n.ui.small.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n\n.ui.small.statistics .statistic > .text.value,\n.ui.small.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Medium */\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-size: 4rem !important;\n}\n\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  font-size: 3rem !important;\n}\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  font-size: 2rem !important;\n}\n\n/* Large */\n\n.ui.large.statistics .statistic > .value,\n.ui.large.statistic > .value {\n  font-size: 5rem !important;\n}\n\n.ui.large.horizontal.statistics .statistic > .value,\n.ui.large.horizontal.statistic > .value {\n  font-size: 4rem !important;\n}\n\n.ui.large.statistics .statistic > .text.value,\n.ui.large.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n/* Huge */\n\n.ui.huge.statistics .statistic > .value,\n.ui.huge.statistic > .value {\n  font-size: 6rem !important;\n}\n\n.ui.huge.horizontal.statistics .statistic > .value,\n.ui.huge.horizontal.statistic > .value {\n  font-size: 5rem !important;\n}\n\n.ui.huge.statistics .statistic > .text.value,\n.ui.huge.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Accordion\n*******************************/\n\n.ui.accordion,\n.ui.accordion .accordion {\n  max-width: 100%;\n}\n\n.ui.accordion .accordion {\n  margin: 1em 0em 0em;\n  padding: 0em;\n}\n\n/* Title */\n\n.ui.accordion .title,\n.ui.accordion .accordion .title {\n  cursor: pointer;\n}\n\n/* Default Styling */\n\n.ui.accordion .title:not(.ui) {\n  padding: 0.5em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Content */\n\n.ui.accordion .title ~ .content,\n.ui.accordion .accordion .title ~ .content {\n  display: none;\n}\n\n/* Default Styling */\n\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\n  margin: '';\n  padding: 0.5em 0em 1em;\n}\n\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\n  padding-bottom: 0em;\n}\n\n/* Arrow */\n\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  display: inline-block;\n  float: none;\n  opacity: 1;\n  width: 1.25em;\n  height: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n  padding: 0em;\n  font-size: 1em;\n  -webkit-transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease;\n  vertical-align: baseline;\n  -webkit-transform: none;\n  transform: none;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n/* Menu */\n\n.ui.accordion.menu .item .title {\n  display: block;\n  padding: 0em;\n}\n\n.ui.accordion.menu .item .title > .dropdown.icon {\n  float: right;\n  margin: 0.21425em 0em 0em 1em;\n  -webkit-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n\n/* Header */\n\n.ui.accordion .ui.header .dropdown.icon {\n  font-size: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.accordion .active.title .dropdown.icon,\n.ui.accordion .accordion .active.title .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n.ui.accordion.menu .item .active.title > .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Styled\n---------------*/\n\n.ui.styled.accordion {\n  width: 600px;\n}\n\n.ui.styled.accordion,\n.ui.styled.accordion .accordion {\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n}\n\n.ui.styled.accordion .title,\n.ui.styled.accordion .accordion .title {\n  margin: 0em;\n  padding: 0.75em 1em;\n  color: rgba(0, 0, 0, 0.4);\n  font-weight: bold;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n.ui.styled.accordion > .title:first-child,\n.ui.styled.accordion .accordion .title:first-child {\n  border-top: none;\n}\n\n/* Content */\n\n.ui.styled.accordion .content,\n.ui.styled.accordion .accordion .content {\n  margin: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n.ui.styled.accordion .accordion .content {\n  padding: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n/* Hover */\n\n.ui.styled.accordion .title:hover,\n.ui.styled.accordion .active.title,\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Active */\n\n.ui.styled.accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Active\n---------------*/\n\n.ui.accordion .active.content,\n.ui.accordion .accordion .active.content {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.accordion,\n.ui.fluid.accordion .accordion {\n  width: 100%;\n}\n\n/*--------------\n     Inverted\n---------------*/\n\n.ui.inverted.accordion .title:not(.ui) {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Accordion';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* Dropdown Icon */\n\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  font-family: Accordion;\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.accordion .title .dropdown.icon:before,\n.ui.accordion .accordion .title .dropdown.icon:before {\n  content: '\\f0da' ;\n}\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Checkbox\n*******************************/\n\n/*--------------\n    Content\n---------------*/\n\n.ui.checkbox {\n  position: relative;\n  display: inline-block;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  outline: none;\n  vertical-align: baseline;\n  font-style: normal;\n  min-height: 17px;\n  font-size: 1rem;\n  line-height: 17px;\n  min-width: 17px;\n}\n\n/* HTML Checkbox */\n\n.ui.checkbox input[type=\"checkbox\"],\n.ui.checkbox input[type=\"radio\"] {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  opacity: 0 !important;\n  outline: none;\n  z-index: 3;\n  width: 17px;\n  height: 17px;\n}\n\n/*--------------\n      Box\n---------------*/\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  cursor: auto;\n  position: relative;\n  display: block;\n  padding-left: 1.85714em;\n  outline: none;\n  font-size: 1em;\n}\n\n.ui.checkbox .box:before,\n.ui.checkbox label:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  content: '';\n  background: #FFFFFF;\n  border-radius: 0.21428571rem;\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  border: 1px solid #D4D4D5;\n}\n\n/*--------------\n    Checkmark\n---------------*/\n\n.ui.checkbox .box:after,\n.ui.checkbox label:after {\n  position: absolute;\n  font-size: 14px;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  text-align: center;\n  opacity: 0;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Inside */\n\n.ui.checkbox label,\n.ui.checkbox + label {\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Outside */\n\n.ui.checkbox + label {\n  vertical-align: middle;\n}\n\n/*******************************\n           States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.checkbox .box:hover::before,\n.ui.checkbox label:hover::before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox label:hover,\n.ui.checkbox + label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.checkbox .box:active::before,\n.ui.checkbox label:active::before {\n  background: #F9FAFB;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox .box:active::after,\n.ui.checkbox label:active::after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.checkbox input:active ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Focus\n---------------*/\n\n.ui.checkbox input:focus ~ .box:before,\n.ui.checkbox input:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n\n.ui.checkbox input:focus ~ .box:after,\n.ui.checkbox input:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.checkbox input:focus ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.checkbox input:checked ~ .box:before,\n.ui.checkbox input:checked ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Indeterminate\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Active Focus\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,\n.ui.checkbox input:checked:focus ~ .box:before,\n.ui.checkbox input:checked:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,\n.ui.checkbox input:checked:focus ~ .box:after,\n.ui.checkbox input:checked:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n    Read-Only\n---------------*/\n\n.ui.read-only.checkbox,\n.ui.read-only.checkbox label {\n  cursor: default;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.disabled.checkbox .box:after,\n.ui.disabled.checkbox label,\n.ui.checkbox input[disabled] ~ .box:after,\n.ui.checkbox input[disabled] ~ label {\n  cursor: default !important;\n  opacity: 0.5;\n  color: #000000;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n/* Initialized checkbox moves input below element\n to prevent manually triggering */\n\n.ui.checkbox input.hidden {\n  z-index: -1;\n}\n\n/* Selectable Label */\n\n.ui.checkbox input.hidden + label {\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n     Radio\n---------------*/\n\n.ui.radio.checkbox {\n  min-height: 15px;\n}\n\n.ui.radio.checkbox .box,\n.ui.radio.checkbox label {\n  padding-left: 1.85714em;\n}\n\n/* Box */\n\n.ui.radio.checkbox .box:before,\n.ui.radio.checkbox label:before {\n  content: '';\n  -webkit-transform: none;\n  transform: none;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  top: 1px;\n  left: 0px;\n}\n\n/* Bullet */\n\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  border: none;\n  content: '' !important;\n  width: 15px;\n  height: 15px;\n  line-height: 15px;\n}\n\n/* Radio Checkbox */\n\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  top: 1px;\n  left: 0px;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  -webkit-transform: scale(0.46666667);\n  transform: scale(0.46666667);\n  background-color: rgba(0, 0, 0, 0.87);\n}\n\n/* Focus */\n\n.ui.radio.checkbox input:focus ~ .box:before,\n.ui.radio.checkbox input:focus ~ label:before {\n  background-color: #FFFFFF;\n}\n\n.ui.radio.checkbox input:focus ~ .box:after,\n.ui.radio.checkbox input:focus ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Indeterminate */\n\n.ui.radio.checkbox input:indeterminate ~ .box:after,\n.ui.radio.checkbox input:indeterminate ~ label:after {\n  opacity: 0;\n}\n\n/* Active */\n\n.ui.radio.checkbox input:checked ~ .box:before,\n.ui.radio.checkbox input:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n\n.ui.radio.checkbox input:checked ~ .box:after,\n.ui.radio.checkbox input:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Focus */\n\n.ui.radio.checkbox input:focus:checked ~ .box:before,\n.ui.radio.checkbox input:focus:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n\n.ui.radio.checkbox input:focus:checked ~ .box:after,\n.ui.radio.checkbox input:focus:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Slider\n---------------*/\n\n.ui.slider.checkbox {\n  min-height: 1.25rem;\n}\n\n/* Input */\n\n.ui.slider.checkbox input {\n  width: 3.5rem;\n  height: 1.25rem;\n}\n\n/* Label */\n\n.ui.slider.checkbox .box,\n.ui.slider.checkbox label {\n  padding-left: 4.5rem;\n  line-height: 1rem;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Line */\n\n.ui.slider.checkbox .box:before,\n.ui.slider.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  border: none !important;\n  left: 0em;\n  z-index: 1;\n  top: 0.4rem;\n  background-color: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 0.21428571rem;\n  -webkit-transform: none;\n  transform: none;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease;\n  transition: background 0.3s ease;\n}\n\n/* Handle */\n\n.ui.slider.checkbox .box:after,\n.ui.slider.checkbox label:after {\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: -0.25rem;\n  left: 0em;\n  -webkit-transform: none;\n  transform: none;\n  border-radius: 500rem;\n  -webkit-transition: left 0.3s ease;\n  transition: left 0.3s ease;\n}\n\n/* Focus */\n\n.ui.slider.checkbox input:focus ~ .box:before,\n.ui.slider.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n\n.ui.slider.checkbox .box:hover,\n.ui.slider.checkbox label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.slider.checkbox .box:hover::before,\n.ui.slider.checkbox label:hover::before {\n  background: rgba(0, 0, 0, 0.15);\n}\n\n/* Active */\n\n.ui.slider.checkbox input:checked ~ .box,\n.ui.slider.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.slider.checkbox input:checked ~ .box:before,\n.ui.slider.checkbox input:checked ~ label:before {\n  background-color: #545454 !important;\n}\n\n.ui.slider.checkbox input:checked ~ .box:after,\n.ui.slider.checkbox input:checked ~ label:after {\n  left: 2rem;\n}\n\n/* Active Focus */\n\n.ui.slider.checkbox input:focus:checked ~ .box,\n.ui.slider.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.slider.checkbox input:focus:checked ~ .box:before,\n.ui.slider.checkbox input:focus:checked ~ label:before {\n  background-color: #000000 !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n.ui.toggle.checkbox {\n  min-height: 1.5rem;\n}\n\n/* Input */\n\n.ui.toggle.checkbox input {\n  width: 3.5rem;\n  height: 1.5rem;\n}\n\n/* Label */\n\n.ui.toggle.checkbox .box,\n.ui.toggle.checkbox label {\n  min-height: 1.5rem;\n  padding-left: 4.5rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.toggle.checkbox label {\n  padding-top: 0.15em;\n}\n\n/* Switch */\n\n.ui.toggle.checkbox .box:before,\n.ui.toggle.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  z-index: 1;\n  -webkit-transform: none;\n  transform: none;\n  border: none;\n  top: 0rem;\n  background: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 1.5rem;\n  border-radius: 500rem;\n}\n\n/* Handle */\n\n.ui.toggle.checkbox .box:after,\n.ui.toggle.checkbox label:after {\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: 0rem;\n  left: 0em;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease, left 0.3s ease;\n  transition: background 0.3s ease, left 0.3s ease;\n}\n\n.ui.toggle.checkbox input ~ .box:after,\n.ui.toggle.checkbox input ~ label:after {\n  left: -0.05rem;\n}\n\n/* Focus */\n\n.ui.toggle.checkbox input:focus ~ .box:before,\n.ui.toggle.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n\n.ui.toggle.checkbox .box:hover::before,\n.ui.toggle.checkbox label:hover::before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Active */\n\n.ui.toggle.checkbox input:checked ~ .box,\n.ui.toggle.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.toggle.checkbox input:checked ~ .box:before,\n.ui.toggle.checkbox input:checked ~ label:before {\n  background-color: #2185D0 !important;\n}\n\n.ui.toggle.checkbox input:checked ~ .box:after,\n.ui.toggle.checkbox input:checked ~ label:after {\n  left: 2.15rem;\n}\n\n/* Active Focus */\n\n.ui.toggle.checkbox input:focus:checked ~ .box,\n.ui.toggle.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.toggle.checkbox input:focus:checked ~ .box:before,\n.ui.toggle.checkbox input:focus:checked ~ label:before {\n  background-color: #0d71bb !important;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.checkbox .box,\n.ui.fitted.checkbox label {\n  padding-left: 0em !important;\n}\n\n.ui.fitted.toggle.checkbox,\n.ui.fitted.toggle.checkbox {\n  width: 3.5rem;\n}\n\n.ui.fitted.slider.checkbox,\n.ui.fitted.slider.checkbox {\n  width: 3.5rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Checkbox';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype');\n}\n\n/* Checkmark */\n\n.ui.checkbox label:after,\n.ui.checkbox .box:after {\n  font-family: 'Checkbox';\n}\n\n/* Checked */\n\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  content: '\\e800';\n}\n\n/* Indeterminate */\n\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  font-size: 12px;\n  content: '\\e801';\n}\n\n/*  UTF Reference\n.check:before { content: '\\e800'; }\n.dash:before  { content: '\\e801'; }\n.plus:before { content: '\\e802'; }\n*/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Dimmer\n*******************************/\n\n.dimmable:not(.body) {\n  position: relative;\n}\n\n.ui.dimmer {\n  display: none;\n  position: absolute;\n  top: 0em !important;\n  left: 0em !important;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  vertical-align: middle;\n  background-color: rgba(0, 0, 0, 0.85);\n  opacity: 0;\n  line-height: 1;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n  -webkit-animation-duration: 0.5s;\n  animation-duration: 0.5s;\n  -webkit-transition: background-color 0.5s linear;\n  transition: background-color 0.5s linear;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/* Dimmer Content */\n\n.ui.dimmer > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n}\n\n.ui.dimmer > .content > * {\n  display: table-cell;\n  vertical-align: middle;\n  color: #FFFFFF;\n}\n\n/* Loose Coupling */\n\n.ui.segment > .ui.dimmer {\n  border-radius: inherit !important;\n}\n\n/*******************************\n            States\n*******************************/\n\n.animating.dimmable:not(body),\n.dimmed.dimmable:not(body) {\n  overflow: hidden;\n}\n\n.dimmed.dimmable > .ui.animating.dimmer,\n.dimmed.dimmable > .ui.visible.dimmer,\n.ui.active.dimmer {\n  display: block;\n  opacity: 1;\n}\n\n.ui.disabled.dimmer {\n  width: 0 !important;\n  height: 0 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n      Page\n---------------*/\n\n.ui.page.dimmer {\n  position: fixed;\n  -webkit-transform-style: '';\n  transform-style: '';\n  -webkit-perspective: 2000px;\n  perspective: 2000px;\n  -webkit-transform-origin: center center;\n  transform-origin: center center;\n}\n\nbody.animating.in.dimmable,\nbody.dimmed.dimmable {\n  overflow: hidden;\n}\n\nbody.dimmable > .dimmer {\n  position: fixed;\n}\n\n/*--------------\n    Blurring\n---------------*/\n\n.blurring.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(0px) grayscale(0);\n  filter: blur(0px) grayscale(0);\n  -webkit-transition: 800ms -webkit-filter ease;\n  transition: 800ms -webkit-filter ease;\n  transition: 800ms filter ease;\n  transition: 800ms filter ease, 800ms -webkit-filter ease;\n}\n\n.blurring.dimmed.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(5px) grayscale(0.7);\n  filter: blur(5px) grayscale(0.7);\n}\n\n/* Dimmer Color */\n\n.blurring.dimmable > .dimmer {\n  background-color: rgba(0, 0, 0, 0.6);\n}\n\n.blurring.dimmable > .inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.6);\n}\n\n/*--------------\n    Aligned\n---------------*/\n\n.ui.dimmer > .top.aligned.content > * {\n  vertical-align: top;\n}\n\n.ui.dimmer > .bottom.aligned.content > * {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n.ui.inverted.dimmer > .content > * {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n\n.ui.simple.dimmer {\n  display: block;\n  overflow: hidden;\n  opacity: 1;\n  width: 0%;\n  height: 0%;\n  z-index: -100;\n  background-color: rgba(0, 0, 0, 0);\n}\n\n.dimmed.dimmable > .ui.simple.dimmer {\n  overflow: visible;\n  opacity: 1;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.85);\n  z-index: 1;\n}\n\n.ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0);\n}\n\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Dropdown\n*******************************/\n\n.ui.dropdown {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  outline: none;\n  text-align: left;\n  -webkit-transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.dropdown .menu {\n  cursor: auto;\n  position: absolute;\n  display: none;\n  outline: none;\n  top: 100%;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  margin: 0em;\n  padding: 0em 0em;\n  background: #FFFFFF;\n  font-size: 1em;\n  text-shadow: none;\n  text-align: left;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  z-index: 11;\n  will-change: transform, opacity;\n}\n\n.ui.dropdown .menu > * {\n  white-space: nowrap;\n}\n\n/*--------------\n  Hidden Input\n---------------*/\n\n.ui.dropdown > input:not(.search):first-child,\n.ui.dropdown > select {\n  display: none !important;\n}\n\n/*--------------\n Dropdown Icon\n---------------*/\n\n.ui.dropdown > .dropdown.icon {\n  position: relative;\n  width: auto;\n  font-size: 0.85714286em;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.dropdown .menu > .item .dropdown.icon {\n  width: auto;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.dropdown .menu > .item .dropdown.icon + .text {\n  margin-right: 1em;\n}\n\n/*--------------\n      Text\n---------------*/\n\n.ui.dropdown > .text {\n  display: inline-block;\n  -webkit-transition: none;\n  transition: none;\n}\n\n/*--------------\n    Menu Item\n---------------*/\n\n.ui.dropdown .menu > .item {\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: none;\n  height: auto;\n  text-align: left;\n  border-top: none;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429rem 1.14285714rem !important;\n  font-size: 1rem;\n  text-transform: none;\n  font-weight: normal;\n  box-shadow: none;\n  -webkit-touch-callout: none;\n}\n\n.ui.dropdown .menu > .item:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Floated Content\n---------------*/\n\n.ui.dropdown > .text > [class*=\"right floated\"],\n.ui.dropdown .menu .item > [class*=\"right floated\"] {\n  float: right !important;\n  margin-right: 0em !important;\n  margin-left: 1em !important;\n}\n\n.ui.dropdown > .text > [class*=\"left floated\"],\n.ui.dropdown .menu .item > [class*=\"left floated\"] {\n  float: left !important;\n  margin-left: 0em !important;\n  margin-right: 1em !important;\n}\n\n.ui.dropdown .menu .item > .icon.floated,\n.ui.dropdown .menu .item > .flag.floated,\n.ui.dropdown .menu .item > .image.floated,\n.ui.dropdown .menu .item > img.floated {\n  margin-top: 0em;\n}\n\n/*--------------\n  Menu Divider\n---------------*/\n\n.ui.dropdown .menu > .header {\n  margin: 1rem 0rem 0.75rem;\n  padding: 0em 1.14285714rem;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.78571429em;\n  font-weight: bold;\n  text-transform: uppercase;\n}\n\n.ui.dropdown .menu > .divider {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  height: 0em;\n  margin: 0.5em 0em;\n}\n\n.ui.dropdown .menu > .input {\n  width: auto;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1.14285714rem 0.78571429rem;\n  min-width: 10rem;\n}\n\n.ui.dropdown .menu > .header + .input {\n  margin-top: 0em;\n}\n\n.ui.dropdown .menu > .input:not(.transparent) input {\n  padding: 0.5em 1em;\n}\n\n.ui.dropdown .menu > .input:not(.transparent) .button,\n.ui.dropdown .menu > .input:not(.transparent) .icon,\n.ui.dropdown .menu > .input:not(.transparent) .label {\n  padding-top: 0.5em;\n  padding-bottom: 0.5em;\n}\n\n/*-----------------\n  Item Description\n-------------------*/\n\n.ui.dropdown > .text > .description,\n.ui.dropdown .menu > .item > .description {\n  float: right;\n  margin: 0em 0em 0em 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*-----------------\n       Message\n-------------------*/\n\n.ui.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n  font-weight: normal;\n}\n\n.ui.dropdown .menu > .message:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n    Sub Menu\n---------------*/\n\n.ui.dropdown .menu .menu {\n  top: 0% !important;\n  left: 100% !important;\n  right: auto !important;\n  margin: 0em 0em 0em -0.5em !important;\n  border-radius: 0.28571429rem !important;\n  z-index: 21 !important;\n}\n\n/* Hide Arrow */\n\n.ui.dropdown .menu .menu:after {\n  display: none;\n}\n\n/*--------------\n   Sub Elements\n---------------*/\n\n/* Icons / Flags / Labels / Image */\n\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image {\n  margin-top: 0em;\n}\n\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-top: 0em;\n}\n\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-left: 0em;\n  float: none;\n  margin-right: 0.78571429rem;\n}\n\n/*--------------\n     Image\n---------------*/\n\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  display: inline-block;\n  vertical-align: middle;\n  width: auto;\n  max-height: 2em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n/* Remove Menu Item Divider */\n\n.ui.dropdown .ui.menu > .item:before,\n.ui.menu .ui.dropdown .menu > .item:before {\n  display: none;\n}\n\n/* Prevent Menu Item Border */\n\n.ui.menu .ui.dropdown .menu .active.item {\n  border-left: none;\n}\n\n/* Automatically float dropdown menu right on last menu item */\n\n.ui.menu .right.menu .dropdown:last-child .menu,\n.ui.menu .right.dropdown.item .menu,\n.ui.buttons > .ui.dropdown:last-child .menu {\n  left: auto;\n  right: 0em;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Dropdown Menu */\n\n.ui.label.dropdown .menu {\n  min-width: 100%;\n}\n\n/*--------------\n     Button\n---------------*/\n\n/* No Margin On Icon Button */\n\n.ui.dropdown.icon.button > .dropdown.icon {\n  margin: 0em;\n}\n\n.ui.button.dropdown .menu {\n  min-width: 100%;\n}\n\n/*******************************\n              Types\n*******************************/\n\n/*--------------\n    Selection\n---------------*/\n\n/* Displays like a select box */\n\n.ui.selection.dropdown {\n  cursor: pointer;\n  word-wrap: break-word;\n  line-height: 1em;\n  white-space: normal;\n  outline: 0;\n  -webkit-transform: rotateZ(0deg);\n  transform: rotateZ(0deg);\n  min-width: 14em;\n  min-height: 2.7142em;\n  background: #FFFFFF;\n  display: inline-block;\n  padding: 0.78571429em 2.1em 0.78571429em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n}\n\n.ui.selection.dropdown.visible,\n.ui.selection.dropdown.active {\n  z-index: 10;\n}\n\nselect.ui.dropdown {\n  height: 38px;\n  padding: 0.5em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  visibility: visible;\n}\n\n.ui.selection.dropdown > .search.icon,\n.ui.selection.dropdown > .delete.icon,\n.ui.selection.dropdown > .dropdown.icon {\n  cursor: pointer;\n  position: absolute;\n  width: auto;\n  height: auto;\n  line-height: 1.2142em;\n  top: 0.78571429em;\n  right: 1em;\n  z-index: 3;\n  margin: -0.78571429em;\n  padding: 0.78571429em;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Compact */\n\n.ui.compact.selection.dropdown {\n  min-width: 0px;\n}\n\n/*  Selection Menu */\n\n.ui.selection.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  border-top-width: 0px !important;\n  width: auto;\n  outline: none;\n  margin: 0px -1px;\n  min-width: calc(100% +  2px );\n  width: calc(100% +  2px );\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.selection.dropdown .menu:after,\n.ui.selection.dropdown .menu:before {\n  display: none;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.selection.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.selection.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.selection.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.selection.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.selection.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/* Menu Item */\n\n.ui.selection.dropdown .menu > .item {\n  border-top: 1px solid #FAFAFA;\n  padding: 0.78571429rem 1.14285714rem !important;\n  white-space: normal;\n  word-wrap: normal;\n}\n\n/* User Item */\n\n.ui.selection.dropdown .menu > .hidden.addition.item {\n  display: none;\n}\n\n/* Hover */\n\n.ui.selection.dropdown:hover {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: none;\n}\n\n/* Active */\n\n.ui.selection.active.dropdown {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.selection.active.dropdown .menu {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Focus */\n\n.ui.selection.dropdown:focus {\n  border-color: #96C8DA;\n  box-shadow: none;\n}\n\n.ui.selection.dropdown:focus .menu {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible */\n\n.ui.selection.visible.dropdown > .text:not(.default) {\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Visible Hover */\n\n.ui.selection.active.dropdown:hover {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.selection.active.dropdown:hover .menu {\n  border-color: #96C8DA;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Dropdown Icon */\n\n.ui.active.selection.dropdown > .dropdown.icon,\n.ui.visible.selection.dropdown > .dropdown.icon {\n  opacity: 1;\n  z-index: 3;\n}\n\n/* Connecting Border */\n\n.ui.active.selection.dropdown {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n/* Empty Connecting Border */\n\n.ui.active.empty.selection.dropdown {\n  border-radius: 0.28571429rem !important;\n  box-shadow: none !important;\n}\n\n.ui.active.empty.selection.dropdown .menu {\n  border: none !important;\n  box-shadow: none !important;\n}\n\n/*--------------\n   Searchable\n---------------*/\n\n/* Search Selection */\n\n.ui.search.dropdown {\n  min-width: '';\n}\n\n/* Search Dropdown */\n\n.ui.search.dropdown > input.search {\n  background: none transparent !important;\n  border: none !important;\n  box-shadow: none !important;\n  cursor: text;\n  top: 0em;\n  left: 1px;\n  width: 100%;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: inherit;\n}\n\n/* Text Layering */\n\n.ui.search.dropdown > input.search {\n  position: absolute;\n  z-index: 2;\n}\n\n.ui.search.dropdown > .text {\n  cursor: text;\n  position: relative;\n  left: 1px;\n  z-index: 3;\n}\n\n/* Search Selection */\n\n.ui.search.selection.dropdown > input.search {\n  line-height: 1.2142em;\n  padding: 0.67861429em 2.1em 0.67861429em 1em;\n}\n\n/* Used to size multi select input to character width */\n\n.ui.search.selection.dropdown > span.sizer {\n  line-height: 1.2142em;\n  padding: 0.67861429em 2.1em 0.67861429em 1em;\n  display: none;\n  white-space: pre;\n}\n\n/* Active/Visible Search */\n\n.ui.search.dropdown.active > input.search,\n.ui.search.dropdown.visible > input.search {\n  cursor: auto;\n}\n\n.ui.search.dropdown.active > .text,\n.ui.search.dropdown.visible > .text {\n  pointer-events: none;\n}\n\n/* Filtered Text */\n\n.ui.active.search.dropdown input.search:focus + .text .icon,\n.ui.active.search.dropdown input.search:focus + .text .flag {\n  opacity: 0.45;\n}\n\n.ui.active.search.dropdown input.search:focus + .text {\n  color: rgba(115, 115, 115, 0.87) !important;\n}\n\n/* Search Menu */\n\n.ui.search.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.search.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.search.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.search.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.search.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/*--------------\n    Multiple\n---------------*/\n\n/* Multiple Selection */\n\n.ui.multiple.dropdown {\n  padding: 0.22620476em 2.1em 0.22620476em 0.35714286em;\n}\n\n.ui.multiple.dropdown .menu {\n  cursor: auto;\n}\n\n/* Multiple Search Selection */\n\n.ui.multiple.search.dropdown,\n.ui.multiple.search.dropdown > input.search {\n  cursor: text;\n}\n\n/* Selection Label */\n\n.ui.multiple.dropdown > .label {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  display: inline-block;\n  vertical-align: top;\n  white-space: normal;\n  font-size: 1em;\n  padding: 0.35714286em 0.78571429em;\n  margin: 0.14285714rem 0.28571429rem 0.14285714rem 0em;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n/* Dropdown Icon */\n\n.ui.multiple.dropdown .dropdown.icon {\n  margin: '';\n  padding: '';\n}\n\n/* Text */\n\n.ui.multiple.dropdown > .text {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45240952em 0em 0.45240952em 0.64285714em;\n  line-height: 1.21428571em;\n}\n\n.ui.multiple.dropdown > .label ~ input.search {\n  margin-left: 0.14285714em !important;\n}\n\n.ui.multiple.dropdown > .label ~ .text {\n  display: none;\n}\n\n/*-----------------\n  Multiple Search\n-----------------*/\n\n/* Prompt Text */\n\n.ui.multiple.search.dropdown > .text {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: inherit;\n  margin: 0.45240952em 0em 0.45240952em 0.64285714em;\n  line-height: 1.21428571em;\n}\n\n.ui.multiple.search.dropdown > .label ~ .text {\n  display: none;\n}\n\n/* Search */\n\n.ui.multiple.search.dropdown > input.search {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45240952em 0em 0.45240952em 0.64285714em;\n  width: 2.2em;\n  line-height: 1.21428571em;\n}\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.dropdown {\n  cursor: pointer;\n  display: inline-block;\n  color: inherit;\n}\n\n.ui.inline.dropdown .dropdown.icon {\n  margin: 0em 0.5em 0em 0.21428571em;\n  vertical-align: baseline;\n}\n\n.ui.inline.dropdown > .text {\n  font-weight: bold;\n}\n\n.ui.inline.dropdown .menu {\n  cursor: auto;\n  margin-top: 0.21428571em;\n  border-radius: 0.28571429rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n        Active\n----------------------*/\n\n/* Menu Item Active */\n\n.ui.dropdown .menu .active.item {\n  background: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: none;\n  z-index: 12;\n}\n\n/*--------------------\n        Hover\n----------------------*/\n\n/* Menu Item Hover */\n\n.ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.dropdown > i.icon {\n  height: 1em !important;\n  padding: 1.14285714em 1.07142857em !important;\n}\n\n.ui.loading.dropdown > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.dropdown > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  box-shadow: 0px 0px 0px 1px transparent;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: dropdown-spin 0.6s linear;\n  animation: dropdown-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n}\n\n/* Coupling */\n\n.ui.loading.dropdown.button > i.icon:before,\n.ui.loading.dropdown.button > i.icon:after {\n  display: none;\n}\n\n@-webkit-keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*--------------------\n     Default Text\n----------------------*/\n\n.ui.dropdown:not(.button) > .default.text,\n.ui.default.dropdown:not(.button) > .text {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.dropdown:not(.button) > input:focus + .default.text,\n.ui.default.dropdown:not(.button) > input:focus + .text {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Loading\n----------------------*/\n\n.ui.loading.dropdown > .text {\n  -webkit-transition: none;\n  transition: none;\n}\n\n/* Used To Check Position */\n\n.ui.dropdown .loading.menu {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n\n/*--------------------\n    Keyboard Select\n----------------------*/\n\n/* Selected Item */\n\n.ui.dropdown.selected,\n.ui.dropdown .menu .selected.item {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n    Search Filtered\n----------------------*/\n\n/* Filtered Item */\n\n.ui.dropdown > .filtered.text {\n  visibility: hidden;\n}\n\n.ui.dropdown .filtered.item {\n  display: none !important;\n}\n\n/*--------------------\n        Error\n----------------------*/\n\n.ui.dropdown.error,\n.ui.dropdown.error > .text,\n.ui.dropdown.error > .default.text {\n  color: #9F3A38;\n}\n\n.ui.selection.dropdown.error {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n\n.ui.selection.dropdown.error:hover {\n  border-color: #E0B4B4;\n}\n\n.ui.dropdown.error > .menu,\n.ui.dropdown.error > .menu .menu {\n  border-color: #E0B4B4;\n}\n\n.ui.dropdown.error > .menu > .item {\n  color: #9F3A38;\n}\n\n.ui.multiple.selection.error.dropdown > .label {\n  border-color: #E0B4B4;\n}\n\n/* Item Hover */\n\n.ui.dropdown.error > .menu > .item:hover {\n  background-color: #FFF2F2;\n}\n\n/* Item Active */\n\n.ui.dropdown.error > .menu .active.item {\n  background-color: #FDCFCF;\n}\n\n/*--------------------\n        Disabled\n----------------------*/\n\n/* Disabled */\n\n.ui.disabled.dropdown,\n.ui.dropdown .menu > .disabled.item {\n  cursor: default;\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Direction\n---------------*/\n\n/* Flyout Direction */\n\n.ui.dropdown .menu {\n  left: 0px;\n}\n\n/* Default Side (Right) */\n\n.ui.dropdown .right.menu > .menu,\n.ui.dropdown .menu .right.menu {\n  left: 100% !important;\n  right: auto !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/* Left Flyout Menu */\n\n.ui.dropdown > .left.menu .menu,\n.ui.dropdown .menu .left.menu {\n  left: auto !important;\n  right: 100% !important;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0.78571429rem 0em 0em;\n}\n\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0.78571429rem 0em 0em;\n}\n\n.ui.dropdown .item .left.dropdown.icon + .text,\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\n  margin-left: 1em;\n}\n\n/*--------------\n     Upward\n---------------*/\n\n/* Upward Main Menu */\n\n.ui.upward.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Upward Sub Menu */\n\n.ui.dropdown .upward.menu {\n  top: auto !important;\n  bottom: 0 !important;\n}\n\n/* Active Upward */\n\n.ui.simple.upward.active.dropdown,\n.ui.simple.upward.dropdown:hover {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n}\n\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Selection */\n\n.ui.upward.selection.dropdown .menu {\n  border-top-width: 1px !important;\n  border-bottom-width: 0px !important;\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n.ui.upward.selection.dropdown:hover {\n  box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n}\n\n/* Active Upward */\n\n.ui.active.upward.selection.dropdown {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Upward */\n\n.ui.upward.selection.dropdown.visible {\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Hover Upward */\n\n.ui.upward.active.selection.dropdown:hover {\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n}\n\n.ui.upward.active.selection.dropdown:hover .menu {\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/*  Selection Menu */\n\n.ui.scrolling.dropdown .menu,\n.ui.dropdown .scrolling.menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.ui.scrolling.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  min-width: 100% !important;\n  width: auto !important;\n}\n\n.ui.dropdown .scrolling.menu {\n  position: static;\n  overflow-y: auto;\n  border: none;\n  box-shadow: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  min-width: 100% !important;\n  width: auto !important;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.scrolling.dropdown .menu .item.item.item,\n.ui.dropdown .scrolling.menu > .item.item.item {\n  border-top: none;\n  padding-right: calc( 1.14285714rem  +  17px ) !important;\n}\n\n.ui.scrolling.dropdown .menu .item:first-child,\n.ui.dropdown .scrolling.menu .item:first-child {\n  border-top: none;\n}\n\n.ui.dropdown > .animating.menu .scrolling.menu,\n.ui.dropdown > .visible.menu .scrolling.menu {\n  display: block;\n}\n\n/* Scrollbar in IE */\n\n@media all and (-ms-high-contrast: none) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    min-width: calc(100% -  17px );\n  }\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 10.28571429rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 15.42857143rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n\n.ui.simple.dropdown .menu:before,\n.ui.simple.dropdown .menu:after {\n  display: none;\n}\n\n.ui.simple.dropdown .menu {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  top: -9999px !important;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.simple.active.dropdown,\n.ui.simple.dropdown:hover {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n.ui.simple.active.dropdown > .menu,\n.ui.simple.dropdown:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 100% !important;\n  opacity: 1;\n}\n\n.ui.simple.dropdown > .menu > .item:active > .menu,\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 0% !important;\n  left: 100% !important;\n  opacity: 1;\n}\n\n.ui.simple.disabled.dropdown:hover .menu {\n  display: none;\n  height: 0px;\n  width: 0px;\n  overflow: hidden;\n}\n\n/* Visible */\n\n.ui.simple.visible.dropdown > .menu {\n  display: block;\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n.ui.fluid.dropdown {\n  display: block;\n  width: 100%;\n  min-width: 0em;\n}\n\n.ui.fluid.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.dropdown .menu {\n  left: 0;\n  right: auto;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.floating.dropdown > .menu {\n  margin-top: 0.5em !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Pointing\n---------------*/\n\n.ui.pointing.dropdown > .menu {\n  top: 100%;\n  margin-top: 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  display: block;\n  position: absolute;\n  pointer-events: none;\n  content: '';\n  visibility: visible;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  width: 0.5em;\n  height: 0.5em;\n  box-shadow: -1px -1px 0px 1px rgba(34, 36, 38, 0.15);\n  background: #FFFFFF;\n  z-index: 2;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 50%;\n  margin: 0em 0em 0em -0.25em;\n}\n\n/* Top Left Pointing */\n\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.left.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 1em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n/* Top Right  Pointing */\n\n.ui.top.right.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  right: 0%;\n  left: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.right.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: auto;\n  right: 1em;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n/* Left Pointing */\n\n.ui.left.pointing.dropdown > .menu {\n  top: 0%;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.left.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n\n/* Right Pointing */\n\n.ui.right.pointing.dropdown > .menu {\n  top: 0%;\n  left: auto;\n  right: 100%;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.right.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n  transform: rotate(135deg);\n}\n\n/* Bottom Pointing */\n\n.ui.bottom.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  left: 0%;\n  right: auto;\n  margin: 0em 0em 1em;\n}\n\n.ui.bottom.pointing.dropdown > .menu:after {\n  top: auto;\n  bottom: -0.25em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(-135deg);\n  transform: rotate(-135deg);\n}\n\n/* Reverse Sub-Menu Direction */\n\n.ui.bottom.pointing.dropdown > .menu .menu {\n  top: auto !important;\n  bottom: 0px !important;\n}\n\n/* Bottom Left */\n\n.ui.bottom.left.pointing.dropdown > .menu {\n  left: 0%;\n  right: auto;\n}\n\n.ui.bottom.left.pointing.dropdown > .menu:after {\n  left: 1em;\n  right: auto;\n}\n\n/* Bottom Right */\n\n.ui.bottom.right.pointing.dropdown > .menu {\n  right: 0%;\n  left: auto;\n}\n\n.ui.bottom.right.pointing.dropdown > .menu:after {\n  left: auto;\n  right: 1em;\n}\n\n/* Upward pointing */\n\n.ui.upward.pointing.dropdown > .menu,\n.ui.upward.top.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  margin: 0em 0em 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n\n.ui.upward.pointing.dropdown > .menu:after,\n.ui.upward.top.pointing.dropdown > .menu:after {\n  top: 100%;\n  bottom: auto;\n  box-shadow: 1px 1px 0px 1px rgba(34, 36, 38, 0.15);\n  margin: -0.25em 0em 0em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/* Dropdown Carets */\n\n@font-face {\n  font-family: 'Dropdown';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da' ;\n}\n\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\" ;\n}\n\n/* Vertical Menu Dropdown */\n\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\" ;\n}\n\n/* Icons for Reference\n.dropdown.down.icon {\n  content: \"\\f0d7\";\n}\n.dropdown.up.icon {\n  content: \"\\f0d8\";\n}\n.dropdown.left.icon {\n  content: \"\\f0d9\";\n}\n.dropdown.icon.icon {\n  content: \"\\f0da\";\n}\n*/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Types\n*******************************/\n\n.ui.embed {\n  position: relative;\n  max-width: 100%;\n  height: 0px;\n  overflow: hidden;\n  background: #DCDDDE;\n  padding-bottom: 56.25%;\n}\n\n/*-----------------\n  Embedded Content\n------------------*/\n\n.ui.embed iframe,\n.ui.embed embed,\n.ui.embed object {\n  position: absolute;\n  border: none;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  margin: 0em;\n  padding: 0em;\n}\n\n/*-----------------\n      Embed\n------------------*/\n\n.ui.embed > .embed {\n  display: none;\n}\n\n/*--------------\n   Placeholder\n---------------*/\n\n.ui.embed > .placeholder {\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.embed > .icon {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n}\n\n.ui.embed > .icon:after {\n  position: absolute;\n  top: 0%;\n  left: 0%;\n  width: 100%;\n  height: 100%;\n  z-index: 3;\n  content: '';\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 0.5;\n  -webkit-transition: opacity 0.5s ease;\n  transition: opacity 0.5s ease;\n}\n\n.ui.embed > .icon:before {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 4;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  color: #FFFFFF;\n  font-size: 6rem;\n  text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);\n  -webkit-transition: opacity 0.5s ease, color 0.5s ease;\n  transition: opacity 0.5s ease, color 0.5s ease;\n  z-index: 10;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Hover\n---------------*/\n\n.ui.embed .icon:hover:after {\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 1;\n}\n\n.ui.embed .icon:hover:before {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.embed > .icon,\n.ui.active.embed > .placeholder {\n  display: none;\n}\n\n.ui.active.embed > .embed {\n  display: block;\n}\n\n/*******************************\n        Video Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.square.embed {\n  padding-bottom: 100%;\n}\n\n.ui[class*=\"4:3\"].embed {\n  padding-bottom: 75%;\n}\n\n.ui[class*=\"16:9\"].embed {\n  padding-bottom: 56.25%;\n}\n\n.ui[class*=\"21:9\"].embed {\n  padding-bottom: 42.85714286%;\n}\n/*!\n * # Semantic UI 2.2.4 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Modal\n*******************************/\n\n.ui.modal {\n  display: none;\n  position: fixed;\n  z-index: 1001;\n  top: 50%;\n  left: 50%;\n  text-align: left;\n  background: #FFFFFF;\n  border: none;\n  box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n  -webkit-transform-origin: 50% 25%;\n  transform-origin: 50% 25%;\n  border-radius: 0.28571429rem;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n  will-change: top, left, margin, transform, opacity;\n}\n\n.ui.modal > :first-child:not(.icon),\n.ui.modal > .icon:first-child + * {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n\n.ui.modal > :last-child {\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n     Close\n---------------*/\n\n.ui.modal > .close {\n  cursor: pointer;\n  position: absolute;\n  top: -2.5rem;\n  right: -2.5rem;\n  z-index: 1;\n  opacity: 0.8;\n  font-size: 1.25em;\n  color: #FFFFFF;\n  width: 2.25rem;\n  height: 2.25rem;\n  padding: 0.625rem 0rem 0rem 0rem;\n}\n\n.ui.modal > .close:hover {\n  opacity: 1;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.modal > .header {\n  display: block;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  margin: 0em;\n  padding: 1.25rem 1.5rem;\n  box-shadow: none;\n  color: rgba(0, 0, 0, 0.85);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.modal > .header:not(.ui) {\n  font-size: 1.42857143rem;\n  line-height: 1.2857em;\n  font-weight: bold;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.modal > .content {\n  display: block;\n  width: 100%;\n  font-size: 1em;\n  line-height: 1.4;\n  padding: 1.5rem;\n  background: #FFFFFF;\n}\n\n.ui.modal > .image.content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n/* Image */\n\n.ui.modal > .content > .image {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: '';\n  -ms-flex-item-align: top;\n  -ms-grid-row-align: top;\n  align-self: top;\n}\n\n.ui.modal > [class*=\"top aligned\"] {\n  -ms-flex-item-align: top;\n  -ms-grid-row-align: top;\n  align-self: top;\n}\n\n.ui.modal > [class*=\"middle aligned\"] {\n  -ms-flex-item-align: middle;\n  -ms-grid-row-align: middle;\n  align-self: middle;\n}\n\n.ui.modal > [class*=\"stretched\"] {\n  -ms-flex-item-align: stretch;\n  -ms-grid-row-align: stretch;\n  align-self: stretch;\n}\n\n/* Description */\n\n.ui.modal > .content > .description {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  min-width: 0px;\n  -ms-flex-item-align: top;\n  -ms-grid-row-align: top;\n  align-self: top;\n}\n\n.ui.modal > .content > .icon + .description,\n.ui.modal > .content > .image + .description {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  min-width: '';\n  width: auto;\n  padding-left: 2em;\n}\n\n/*rtl:ignore*/\n\n.ui.modal > .content > .image > i.icon {\n  margin: 0em;\n  opacity: 1;\n  width: auto;\n  line-height: 1;\n  font-size: 8rem;\n}\n\n/*--------------\n     Actions\n---------------*/\n\n.ui.modal > .actions {\n  background: #F9FAFB;\n  padding: 1rem 1rem;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  text-align: right;\n}\n\n.ui.modal .actions > .button {\n  margin-left: 0.75em;\n}\n\n/*-------------------\n       Responsive\n--------------------*/\n\n/* Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.modal {\n    width: 850px;\n    margin: 0em 0em 0em -425px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.modal {\n    width: 900px;\n    margin: 0em 0em 0em -450px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.modal {\n    width: 950px;\n    margin: 0em 0em 0em -475px;\n  }\n}\n\n/* Tablet and Mobile */\n\n@media only screen and (max-width: 991px) {\n  .ui.modal > .header {\n    padding-right: 2.25rem;\n  }\n\n  .ui.modal > .close {\n    top: 1.0535rem;\n    right: 1rem;\n    color: rgba(0, 0, 0, 0.87);\n  }\n}\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.modal > .header {\n    padding: 0.75rem 1rem !important;\n    padding-right: 2.25rem !important;\n  }\n\n  .ui.modal > .content {\n    display: block;\n    padding: 1rem !important;\n  }\n\n  .ui.modal > .close {\n    top: 0.5rem !important;\n    right: 0.5rem !important;\n  }\n\n  /*rtl:ignore*/\n\n  .ui.modal .image.content {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.modal .content > .image {\n    display: block;\n    max-width: 100%;\n    margin: 0em auto !important;\n    text-align: center;\n    padding: 0rem 0rem 1rem !important;\n  }\n\n  .ui.modal > .content > .image > i.icon {\n    font-size: 5rem;\n    text-align: center;\n  }\n\n  /*rtl:ignore*/\n\n  .ui.modal .content > .description {\n    display: block;\n    width: 100% !important;\n    margin: 0em !important;\n    padding: 1rem 0rem !important;\n    box-shadow: none;\n  }\n\n  /* Let Buttons Stack */\n\n  .ui.modal > .actions {\n    padding: 1rem 1rem 0rem !important;\n  }\n\n  .ui.modal .actions > .buttons,\n  .ui.modal .actions > .button {\n    margin-bottom: 1rem;\n  }\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.inverted.dimmer > .ui.modal {\n  box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.basic.modal {\n  background-color: transparent;\n  border: none;\n  border-radius: 0em;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.basic.modal > .header,\n.ui.basic.modal > .content,\n.ui.basic.modal > .actions {\n  background-color: transparent;\n}\n\n.ui.basic.modal > .header {\n  color: #FFFFFF;\n}\n\n.ui.basic.modal > .close {\n  top: 1rem;\n  right: 1.5rem;\n}\n\n.ui.inverted.dimmer > .basic.modal {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.dimmer > .ui.basic.modal > .header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Tablet and Mobile */\n\n@media only screen and (max-width: 991px) {\n  .ui.basic.modal > .close {\n    color: #FFFFFF;\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n.ui.active.modal {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Scrolling\n---------------*/\n\n/* A modal that cannot fit on the page */\n\n.scrolling.dimmable.dimmed {\n  overflow: hidden;\n}\n\n.scrolling.dimmable.dimmed > .dimmer {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.scrolling.dimmable > .dimmer {\n  position: fixed;\n}\n\n.modals.dimmer .ui.scrolling.modal {\n  position: static !important;\n  margin: 3.5rem auto !important;\n}\n\n/* undetached scrolling */\n\n.scrolling.undetached.dimmable.dimmed {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.scrolling.undetached.dimmable.dimmed > .dimmer {\n  overflow: hidden;\n}\n\n.scrolling.undetached.dimmable .ui.scrolling.modal {\n  position: absolute;\n  left: 50%;\n  margin-top: 3.5rem !important;\n}\n\n/* Coupling with Sidebar */\n\n.undetached.dimmable.dimmed > .pusher {\n  z-index: auto;\n}\n\n@media only screen and (max-width: 991px) {\n  .modals.dimmer .ui.scrolling.modal {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n}\n\n/*--------------\n   Full Screen\n---------------*/\n\n.ui.fullscreen.modal {\n  width: 95% !important;\n  left: 2.5% !important;\n  margin: 1em auto;\n}\n\n.ui.fullscreen.scrolling.modal {\n  left: 0em !important;\n}\n\n.ui.fullscreen.modal > .header {\n  padding-right: 2.25rem;\n}\n\n.ui.fullscreen.modal > .close {\n  top: 1.0535rem;\n  right: 1rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.modal {\n  font-size: 1rem;\n}\n\n/* Small */\n\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Small Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.small.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.small.modal {\n    width: 70.4%;\n    margin: 0em 0em 0em -35.2%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.small.modal {\n    width: 680px;\n    margin: 0em 0em 0em -340px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.small.modal {\n    width: 720px;\n    margin: 0em 0em 0em -360px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.small.modal {\n    width: 760px;\n    margin: 0em 0em 0em -380px;\n  }\n}\n\n/* Large Modal Width */\n\n.ui.large.modal > .header {\n  font-size: 1.6em;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.large.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.large.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.large.modal {\n    width: 1020px;\n    margin: 0em 0em 0em -510px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.large.modal {\n    width: 1080px;\n    margin: 0em 0em 0em -540px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.large.modal {\n    width: 1140px;\n    margin: 0em 0em 0em -570px;\n  }\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Nag\n*******************************/\n\n.ui.nag {\n  display: none;\n  opacity: 0.95;\n  position: relative;\n  top: 0em;\n  left: 0px;\n  z-index: 999;\n  min-height: 0em;\n  width: 100%;\n  margin: 0em;\n  padding: 0.75em 1em;\n  background: #555555;\n  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n  font-size: 1rem;\n  text-align: center;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-transition: 0.2s background ease;\n  transition: 0.2s background ease;\n}\n\na.ui.nag {\n  cursor: pointer;\n}\n\n.ui.nag > .title {\n  display: inline-block;\n  margin: 0em 0.5em;\n  color: #FFFFFF;\n}\n\n.ui.nag > .close.icon {\n  cursor: pointer;\n  opacity: 0.4;\n  position: absolute;\n  top: 50%;\n  right: 1em;\n  font-size: 1em;\n  margin: -0.5em 0em 0em;\n  color: #FFFFFF;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n}\n\n/*******************************\n             States\n*******************************/\n\n/* Hover */\n\n.ui.nag:hover {\n  background: #555555;\n  opacity: 1;\n}\n\n.ui.nag .close:hover {\n  opacity: 1;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Static\n---------------*/\n\n.ui.overlay.nag {\n  position: absolute;\n  display: block;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.nag {\n  position: fixed;\n}\n\n/*--------------\n     Bottom\n---------------*/\n\n.ui.bottom.nags,\n.ui.bottom.nag {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  top: auto;\n  bottom: 0em;\n}\n\n/*--------------\n     White\n---------------*/\n\n.ui.inverted.nags .nag,\n.ui.inverted.nag {\n  background-color: #F3F4F5;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.inverted.nags .nag .close,\n.ui.inverted.nags .nag .title,\n.ui.inverted.nag .close,\n.ui.inverted.nag .title {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*******************************\n           Groups\n*******************************/\n\n.ui.nags .nag {\n  border-radius: 0em !important;\n}\n\n.ui.nags .nag:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.bottom.nags .nag:last-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Popup\n*******************************/\n\n.ui.popup {\n  display: none;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  /* Fixes content being squished when inline (moz only) */\n  min-width: -webkit-min-content;\n  min-width: -moz-min-content;\n  min-width: min-content;\n  z-index: 1900;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: 250px;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.popup > .header {\n  padding: 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  line-height: 1.2;\n  font-weight: bold;\n}\n\n.ui.popup > .header + .content {\n  padding-top: 0.5em;\n}\n\n.ui.popup:before {\n  position: absolute;\n  content: '';\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  z-index: 2;\n  box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n    Tooltip\n---------------*/\n\n/* Content */\n\n[data-tooltip] {\n  position: relative;\n}\n\n/* Arrow */\n\n[data-tooltip]:before {\n  pointer-events: none;\n  position: absolute;\n  content: '';\n  font-size: 1rem;\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  z-index: 2;\n  box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/* Popup */\n\n[data-tooltip]:after {\n  pointer-events: none;\n  content: attr(data-tooltip);\n  position: absolute;\n  text-transform: none;\n  text-align: left;\n  white-space: nowrap;\n  font-size: 1rem;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: none;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  z-index: 1;\n}\n\n/* Default Position (Top Center) */\n\n[data-tooltip]:not([data-position]):before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n[data-tooltip]:not([data-position]):after {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n/* Animation */\n\n[data-tooltip]:before,\n[data-tooltip]:after {\n  pointer-events: none;\n  visibility: hidden;\n}\n\n[data-tooltip]:before {\n  opacity: 0;\n  -webkit-transform: rotate(45deg) scale(0) !important;\n  transform: rotate(45deg) scale(0) !important;\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n\n[data-tooltip]:after {\n  opacity: 1;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n\n[data-tooltip]:hover:before,\n[data-tooltip]:hover:after {\n  visibility: visible;\n  pointer-events: auto;\n}\n\n[data-tooltip]:hover:before {\n  -webkit-transform: rotate(45deg) scale(1) !important;\n  transform: rotate(45deg) scale(1) !important;\n  opacity: 1;\n}\n\n/* Animation Position */\n\n[data-tooltip]:after,\n[data-tooltip][data-position=\"top center\"]:after,\n[data-tooltip][data-position=\"bottom center\"]:after {\n  -webkit-transform: translateX(-50%) scale(0) !important;\n  transform: translateX(-50%) scale(0) !important;\n}\n\n[data-tooltip]:hover:after,\n[data-tooltip][data-position=\"bottom center\"]:hover:after {\n  -webkit-transform: translateX(-50%) scale(1) !important;\n  transform: translateX(-50%) scale(1) !important;\n}\n\n[data-tooltip][data-position=\"left center\"]:after,\n[data-tooltip][data-position=\"right center\"]:after {\n  -webkit-transform: translateY(-50%) scale(0) !important;\n  transform: translateY(-50%) scale(0) !important;\n}\n\n[data-tooltip][data-position=\"left center\"]:hover:after,\n[data-tooltip][data-position=\"right center\"]:hover:after {\n  -webkit-transform: translateY(-50%) scale(1) !important;\n  transform: translateY(-50%) scale(1) !important;\n}\n\n[data-tooltip][data-position=\"top left\"]:after,\n[data-tooltip][data-position=\"top right\"]:after,\n[data-tooltip][data-position=\"bottom left\"]:after,\n[data-tooltip][data-position=\"bottom right\"]:after {\n  -webkit-transform: scale(0) !important;\n  transform: scale(0) !important;\n}\n\n[data-tooltip][data-position=\"top left\"]:hover:after,\n[data-tooltip][data-position=\"top right\"]:hover:after,\n[data-tooltip][data-position=\"bottom left\"]:hover:after,\n[data-tooltip][data-position=\"bottom right\"]:hover:after {\n  -webkit-transform: scale(1) !important;\n  transform: scale(1) !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Arrow */\n\n[data-tooltip][data-inverted]:before {\n  box-shadow: none !important;\n}\n\n/* Arrow Position */\n\n[data-tooltip][data-inverted]:before {\n  background: #1B1C1D;\n}\n\n/* Popup  */\n\n[data-tooltip][data-inverted]:after {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  box-shadow: none;\n}\n\n[data-tooltip][data-inverted]:after .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n\n/*--------------\n    Position\n---------------*/\n\n/* Top Center */\n\n[data-position=\"top center\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 50%;\n  bottom: 100%;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n  margin-bottom: 0.5em;\n}\n\n[data-position=\"top center\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Left */\n\n[data-position=\"top left\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n[data-position=\"top left\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Right */\n\n[data-position=\"top right\"][data-tooltip]:after {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n[data-position=\"top right\"][data-tooltip]:before {\n  top: auto;\n  left: auto;\n  bottom: 100%;\n  right: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Bottom Center */\n\n[data-position=\"bottom center\"][data-tooltip]:after {\n  bottom: auto;\n  right: auto;\n  left: 50%;\n  top: 100%;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n  margin-top: 0.5em;\n}\n\n[data-position=\"bottom center\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 50%;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Left */\n\n[data-position=\"bottom left\"][data-tooltip]:after {\n  left: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n\n[data-position=\"bottom left\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Right */\n\n[data-position=\"bottom right\"][data-tooltip]:after {\n  right: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n\n[data-position=\"bottom right\"][data-tooltip]:before {\n  bottom: auto;\n  left: auto;\n  top: 100%;\n  right: 1em;\n  margin-left: -0.14285714rem;\n  margin-top: 0.07142857rem;\n}\n\n/* Left Center */\n\n[data-position=\"left center\"][data-tooltip]:after {\n  right: 100%;\n  top: 50%;\n  margin-right: 0.5em;\n  -webkit-transform: translateY(-50%);\n  transform: translateY(-50%);\n}\n\n[data-position=\"left center\"][data-tooltip]:before {\n  right: 100%;\n  top: 50%;\n  margin-top: -0.14285714rem;\n  margin-right: -0.07142857rem;\n}\n\n/* Right Center */\n\n[data-position=\"right center\"][data-tooltip]:after {\n  left: 100%;\n  top: 50%;\n  margin-left: 0.5em;\n  -webkit-transform: translateY(-50%);\n  transform: translateY(-50%);\n}\n\n[data-position=\"right center\"][data-tooltip]:before {\n  left: 100%;\n  top: 50%;\n  margin-top: -0.07142857rem;\n  margin-left: 0.14285714rem;\n}\n\n/* Arrow */\n\n[data-position~=\"bottom\"][data-tooltip]:before {\n  background: #FFFFFF;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n[data-position=\"left center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n[data-position=\"right center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n[data-position~=\"top\"][data-tooltip]:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n\n[data-inverted][data-position~=\"bottom\"][data-tooltip]:before {\n  background: #1B1C1D;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n[data-inverted][data-position=\"left center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n[data-inverted][data-position=\"right center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n[data-inverted][data-position~=\"top\"][data-tooltip]:before {\n  background: #1B1C1D;\n}\n\n[data-position~=\"bottom\"][data-tooltip]:before {\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n}\n\n[data-position~=\"bottom\"][data-tooltip]:after {\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n}\n\n[data-position=\"left center\"][data-tooltip]:before {\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n[data-position=\"left center\"][data-tooltip]:after {\n  -webkit-transform-origin: right center;\n  transform-origin: right center;\n}\n\n[data-position=\"right center\"][data-tooltip]:before {\n  -webkit-transform-origin: right center;\n  transform-origin: right center;\n}\n\n[data-position=\"right center\"][data-tooltip]:after {\n  -webkit-transform-origin: left center;\n  transform-origin: left center;\n}\n\n/*--------------\n     Spacing\n---------------*/\n\n.ui.popup {\n  margin: 0em;\n}\n\n/* Extending from Top */\n\n.ui.top.popup {\n  margin: 0em 0em 0.71428571em;\n}\n\n.ui.top.left.popup {\n  -webkit-transform-origin: left bottom;\n  transform-origin: left bottom;\n}\n\n.ui.top.center.popup {\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n}\n\n.ui.top.right.popup {\n  -webkit-transform-origin: right bottom;\n  transform-origin: right bottom;\n}\n\n/* Extending from Vertical Center */\n\n.ui.left.center.popup {\n  margin: 0em 0.71428571em 0em 0em;\n  -webkit-transform-origin: right 50%;\n  transform-origin: right 50%;\n}\n\n.ui.right.center.popup {\n  margin: 0em 0em 0em 0.71428571em;\n  -webkit-transform-origin: left 50%;\n  transform-origin: left 50%;\n}\n\n/* Extending from Bottom */\n\n.ui.bottom.popup {\n  margin: 0.71428571em 0em 0em;\n}\n\n.ui.bottom.left.popup {\n  -webkit-transform-origin: left top;\n  transform-origin: left top;\n}\n\n.ui.bottom.center.popup {\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n}\n\n.ui.bottom.right.popup {\n  -webkit-transform-origin: right top;\n  transform-origin: right top;\n}\n\n/*--------------\n     Pointer\n---------------*/\n\n/*--- Below ---*/\n\n.ui.bottom.center.popup:before {\n  margin-left: -0.30714286em;\n  top: -0.30714286em;\n  left: 50%;\n  right: auto;\n  bottom: auto;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n.ui.bottom.left.popup {\n  margin-left: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.bottom.left.popup:before {\n  top: -0.30714286em;\n  left: 1em;\n  right: auto;\n  bottom: auto;\n  margin-left: 0em;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n.ui.bottom.right.popup {\n  margin-right: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.bottom.right.popup:before {\n  top: -0.30714286em;\n  right: 1em;\n  bottom: auto;\n  left: auto;\n  margin-left: 0em;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n/*--- Above ---*/\n\n.ui.top.center.popup:before {\n  top: auto;\n  right: auto;\n  bottom: -0.30714286em;\n  left: 50%;\n  margin-left: -0.30714286em;\n}\n\n.ui.top.left.popup {\n  margin-left: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.top.left.popup:before {\n  bottom: -0.30714286em;\n  left: 1em;\n  top: auto;\n  right: auto;\n  margin-left: 0em;\n}\n\n.ui.top.right.popup {\n  margin-right: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.top.right.popup:before {\n  bottom: -0.30714286em;\n  right: 1em;\n  top: auto;\n  left: auto;\n  margin-left: 0em;\n}\n\n/*--- Left Center ---*/\n\n/*rtl:rename*/\n\n.ui.left.center.popup:before {\n  top: 50%;\n  right: -0.30714286em;\n  bottom: auto;\n  left: auto;\n  margin-top: -0.30714286em;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n/*--- Right Center  ---*/\n\n/*rtl:rename*/\n\n.ui.right.center.popup:before {\n  top: 50%;\n  left: -0.30714286em;\n  bottom: auto;\n  right: auto;\n  margin-top: -0.30714286em;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n/* Arrow Color By Location */\n\n.ui.bottom.popup:before {\n  background: #FFFFFF;\n}\n\n.ui.right.center.popup:before,\n.ui.left.center.popup:before {\n  background: #FFFFFF;\n}\n\n.ui.top.popup:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n\n.ui.inverted.bottom.popup:before {\n  background: #1B1C1D;\n}\n\n.ui.inverted.right.center.popup:before,\n.ui.inverted.left.center.popup:before {\n  background: #1B1C1D;\n}\n\n.ui.inverted.top.popup:before {\n  background: #1B1C1D;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/* Immediate Nested Grid */\n\n.ui.popup > .ui.grid:not(.padded) {\n  width: calc(100% + 1.75rem);\n  margin: -0.7rem -0.875rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.loading.popup {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n\n.ui.animating.popup,\n.ui.visible.popup {\n  display: block;\n}\n\n.ui.visible.popup {\n  -webkit-transform: translateZ(0px);\n  transform: translateZ(0px);\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Basic\n---------------*/\n\n.ui.basic.popup:before {\n  display: none;\n}\n\n/*--------------\n     Wide\n---------------*/\n\n.ui.wide.popup {\n  max-width: 350px;\n}\n\n.ui[class*=\"very wide\"].popup {\n  max-width: 550px;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.wide.popup,\n  .ui[class*=\"very wide\"].popup {\n    max-width: 250px;\n  }\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.popup {\n  width: 100%;\n  max-width: none;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/* Inverted colors  */\n\n.ui.inverted.popup {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  box-shadow: none;\n}\n\n.ui.inverted.popup .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n\n.ui.inverted.popup:before {\n  background-color: #1B1C1D;\n  box-shadow: none !important;\n}\n\n/*--------------\n     Flowing\n---------------*/\n\n.ui.flowing.popup {\n  max-width: none;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.popup {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.popup {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.popup {\n  font-size: 0.92857143rem;\n}\n\n.ui.popup {\n  font-size: 1rem;\n}\n\n.ui.large.popup {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.popup {\n  font-size: 1.42857143rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Progress Bar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Progress\n*******************************/\n\n.ui.progress {\n  position: relative;\n  display: block;\n  max-width: 100%;\n  border: none;\n  margin: 1em 0em 2.5em;\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.1);\n  padding: 0em;\n  border-radius: 0.28571429rem;\n}\n\n.ui.progress:first-child {\n  margin: 0em 0em 2.5em;\n}\n\n.ui.progress:last-child {\n  margin: 0em 0em 1.5em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Activity Bar */\n\n.ui.progress .bar {\n  display: block;\n  line-height: 1;\n  position: relative;\n  width: 0%;\n  min-width: 2em;\n  background: #888888;\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, background-color 0.1s ease;\n  transition: width 0.1s ease, background-color 0.1s ease;\n}\n\n/* Percent Complete */\n\n.ui.progress .bar > .progress {\n  white-space: nowrap;\n  position: absolute;\n  width: auto;\n  font-size: 0.92857143em;\n  top: 50%;\n  right: 0.5em;\n  left: auto;\n  bottom: auto;\n  color: rgba(255, 255, 255, 0.7);\n  text-shadow: none;\n  margin-top: -0.5em;\n  font-weight: bold;\n  text-align: left;\n}\n\n/* Label */\n\n.ui.progress > .label {\n  position: absolute;\n  width: 100%;\n  font-size: 1em;\n  top: 100%;\n  right: auto;\n  left: 0%;\n  bottom: auto;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-shadow: none;\n  margin-top: 0.2em;\n  text-align: center;\n  -webkit-transition: color 0.4s ease;\n  transition: color 0.4s ease;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/* Indicating */\n\n.ui.indicating.progress[data-percent^=\"1\"] .bar,\n.ui.indicating.progress[data-percent^=\"2\"] .bar {\n  background-color: #D95C5C;\n}\n\n.ui.indicating.progress[data-percent^=\"3\"] .bar {\n  background-color: #EFBC72;\n}\n\n.ui.indicating.progress[data-percent^=\"4\"] .bar,\n.ui.indicating.progress[data-percent^=\"5\"] .bar {\n  background-color: #E6BB48;\n}\n\n.ui.indicating.progress[data-percent^=\"6\"] .bar {\n  background-color: #DDC928;\n}\n\n.ui.indicating.progress[data-percent^=\"7\"] .bar,\n.ui.indicating.progress[data-percent^=\"8\"] .bar {\n  background-color: #B4D95C;\n}\n\n.ui.indicating.progress[data-percent^=\"9\"] .bar,\n.ui.indicating.progress[data-percent^=\"100\"] .bar {\n  background-color: #66DA81;\n}\n\n/* Indicating Label */\n\n.ui.indicating.progress[data-percent^=\"1\"] .label,\n.ui.indicating.progress[data-percent^=\"2\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"3\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"4\"] .label,\n.ui.indicating.progress[data-percent^=\"5\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"6\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"7\"] .label,\n.ui.indicating.progress[data-percent^=\"8\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"9\"] .label,\n.ui.indicating.progress[data-percent^=\"100\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Single Digits */\n\n.ui.indicating.progress[data-percent=\"1\"] .bar,\n.ui.indicating.progress[data-percent=\"2\"] .bar,\n.ui.indicating.progress[data-percent=\"3\"] .bar,\n.ui.indicating.progress[data-percent=\"4\"] .bar,\n.ui.indicating.progress[data-percent=\"5\"] .bar,\n.ui.indicating.progress[data-percent=\"6\"] .bar,\n.ui.indicating.progress[data-percent=\"7\"] .bar,\n.ui.indicating.progress[data-percent=\"8\"] .bar,\n.ui.indicating.progress[data-percent=\"9\"] .bar {\n  background-color: #D95C5C;\n}\n\n.ui.indicating.progress[data-percent=\"1\"] .label,\n.ui.indicating.progress[data-percent=\"2\"] .label,\n.ui.indicating.progress[data-percent=\"3\"] .label,\n.ui.indicating.progress[data-percent=\"4\"] .label,\n.ui.indicating.progress[data-percent=\"5\"] .label,\n.ui.indicating.progress[data-percent=\"6\"] .label,\n.ui.indicating.progress[data-percent=\"7\"] .label,\n.ui.indicating.progress[data-percent=\"8\"] .label,\n.ui.indicating.progress[data-percent=\"9\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Indicating Success */\n\n.ui.indicating.progress.success .label {\n  color: #1A531B;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n     Success\n---------------*/\n\n.ui.progress.success .bar {\n  background-color: #21BA45 !important;\n}\n\n.ui.progress.success .bar,\n.ui.progress.success .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.success > .label {\n  color: #1A531B;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.progress.warning .bar {\n  background-color: #F2C037 !important;\n}\n\n.ui.progress.warning .bar,\n.ui.progress.warning .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.warning > .label {\n  color: #794B02;\n}\n\n/*--------------\n     Error\n---------------*/\n\n.ui.progress.error .bar {\n  background-color: #DB2828 !important;\n}\n\n.ui.progress.error .bar,\n.ui.progress.error .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.error > .label {\n  color: #912D2B;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.progress .bar {\n  position: relative;\n  min-width: 2em;\n}\n\n.ui.active.progress .bar::after {\n  content: '';\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  right: 0px;\n  bottom: 0px;\n  background: #FFFFFF;\n  border-radius: 0.28571429rem;\n  -webkit-animation: progress-active 2s ease infinite;\n  animation: progress-active 2s ease infinite;\n}\n\n@-webkit-keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n@keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.progress {\n  opacity: 0.35;\n}\n\n.ui.disabled.progress .bar,\n.ui.disabled.progress .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.progress {\n  background: rgba(255, 255, 255, 0.08);\n  border: none;\n}\n\n.ui.inverted.progress .bar {\n  background: #888888;\n}\n\n.ui.inverted.progress .bar > .progress {\n  color: #F9FAFB;\n}\n\n.ui.inverted.progress > .label {\n  color: #FFFFFF;\n}\n\n.ui.inverted.progress.success > .label {\n  color: #21BA45;\n}\n\n.ui.inverted.progress.warning > .label {\n  color: #F2C037;\n}\n\n.ui.inverted.progress.error > .label {\n  color: #DB2828;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* bottom attached */\n\n.ui.progress.attached {\n  background: transparent;\n  position: relative;\n  border: none;\n  margin: 0em;\n}\n\n.ui.progress.attached,\n.ui.progress.attached .bar {\n  display: block;\n  height: 0.2rem;\n  padding: 0px;\n  overflow: hidden;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.progress.attached .bar {\n  border-radius: 0em;\n}\n\n/* top attached */\n\n.ui.progress.top.attached,\n.ui.progress.top.attached .bar {\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.progress.top.attached .bar {\n  border-radius: 0em;\n}\n\n/* Coupling */\n\n.ui.segment > .ui.attached.progress,\n.ui.card > .ui.attached.progress {\n  position: absolute;\n  top: auto;\n  left: 0;\n  bottom: 100%;\n  width: 100%;\n}\n\n.ui.segment > .ui.bottom.attached.progress,\n.ui.card > .ui.bottom.attached.progress {\n  top: 100%;\n  bottom: auto;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/* Red */\n\n.ui.red.progress .bar {\n  background-color: #DB2828;\n}\n\n.ui.red.inverted.progress .bar {\n  background-color: #FF695E;\n}\n\n/* Orange */\n\n.ui.orange.progress .bar {\n  background-color: #F2711C;\n}\n\n.ui.orange.inverted.progress .bar {\n  background-color: #FF851B;\n}\n\n/* Yellow */\n\n.ui.yellow.progress .bar {\n  background-color: #FBBD08;\n}\n\n.ui.yellow.inverted.progress .bar {\n  background-color: #FFE21F;\n}\n\n/* Olive */\n\n.ui.olive.progress .bar {\n  background-color: #B5CC18;\n}\n\n.ui.olive.inverted.progress .bar {\n  background-color: #D9E778;\n}\n\n/* Green */\n\n.ui.green.progress .bar {\n  background-color: #21BA45;\n}\n\n.ui.green.inverted.progress .bar {\n  background-color: #2ECC40;\n}\n\n/* Teal */\n\n.ui.teal.progress .bar {\n  background-color: #00B5AD;\n}\n\n.ui.teal.inverted.progress .bar {\n  background-color: #6DFFFF;\n}\n\n/* Blue */\n\n.ui.blue.progress .bar {\n  background-color: #2185D0;\n}\n\n.ui.blue.inverted.progress .bar {\n  background-color: #54C8FF;\n}\n\n/* Violet */\n\n.ui.violet.progress .bar {\n  background-color: #6435C9;\n}\n\n.ui.violet.inverted.progress .bar {\n  background-color: #A291FB;\n}\n\n/* Purple */\n\n.ui.purple.progress .bar {\n  background-color: #A333C8;\n}\n\n.ui.purple.inverted.progress .bar {\n  background-color: #DC73FF;\n}\n\n/* Pink */\n\n.ui.pink.progress .bar {\n  background-color: #E03997;\n}\n\n.ui.pink.inverted.progress .bar {\n  background-color: #FF8EDF;\n}\n\n/* Brown */\n\n.ui.brown.progress .bar {\n  background-color: #A5673F;\n}\n\n.ui.brown.inverted.progress .bar {\n  background-color: #D67C1C;\n}\n\n/* Grey */\n\n.ui.grey.progress .bar {\n  background-color: #767676;\n}\n\n.ui.grey.inverted.progress .bar {\n  background-color: #DCDDDE;\n}\n\n/* Black */\n\n.ui.black.progress .bar {\n  background-color: #1B1C1D;\n}\n\n.ui.black.inverted.progress .bar {\n  background-color: #545454;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.tiny.progress {\n  font-size: 0.85714286rem;\n}\n\n.ui.tiny.progress .bar {\n  height: 0.5em;\n}\n\n.ui.small.progress {\n  font-size: 0.92857143rem;\n}\n\n.ui.small.progress .bar {\n  height: 1em;\n}\n\n.ui.progress {\n  font-size: 1rem;\n}\n\n.ui.progress .bar {\n  height: 1.75em;\n}\n\n.ui.large.progress {\n  font-size: 1.14285714rem;\n}\n\n.ui.large.progress .bar {\n  height: 2.5em;\n}\n\n.ui.big.progress {\n  font-size: 1.28571429rem;\n}\n\n.ui.big.progress .bar {\n  height: 3.5em;\n}\n\n/*******************************\n            Progress\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Rating\n*******************************/\n\n.ui.rating {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n\n.ui.rating:last-child {\n  margin-right: 0em;\n}\n\n/* Icon */\n\n.ui.rating .icon {\n  padding: 0em;\n  margin: 0em;\n  text-align: center;\n  font-weight: normal;\n  font-style: normal;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  cursor: pointer;\n  width: 1.25em;\n  height: auto;\n  -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n  transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n      Standard\n--------------------*/\n\n/* Inactive Icon */\n\n.ui.rating .icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n}\n\n/* Active Icon */\n\n.ui.rating .active.icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Selected Icon */\n\n.ui.rating .icon.selected,\n.ui.rating .icon.selected.active {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Inactive */\n\n.ui.star.rating .icon {\n  width: 1.25em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none;\n}\n\n/* Active Star */\n\n.ui.star.rating .active.icon {\n  background: transparent !important;\n  color: #FFE623 !important;\n  text-shadow: 0px -1px 0px #DDC507, -1px 0px 0px #DDC507, 0px 1px 0px #DDC507, 1px 0px 0px #DDC507 !important;\n}\n\n/* Selected Star */\n\n.ui.star.rating .icon.selected,\n.ui.star.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FFCC00 !important;\n  text-shadow: 0px -1px 0px #E6A200, -1px 0px 0px #E6A200, 0px 1px 0px #E6A200, 1px 0px 0px #E6A200 !important;\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n.ui.heart.rating .icon {\n  width: 1.4em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none !important;\n}\n\n/* Active Heart */\n\n.ui.heart.rating .active.icon {\n  background: transparent !important;\n  color: #FF6D75 !important;\n  text-shadow: 0px -1px 0px #CD0707, -1px 0px 0px #CD0707, 0px 1px 0px #CD0707, 1px 0px 0px #CD0707 !important;\n}\n\n/* Selected Heart */\n\n.ui.heart.rating .icon.selected,\n.ui.heart.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FF3000 !important;\n  text-shadow: 0px -1px 0px #AA0101, -1px 0px 0px #AA0101, 0px 1px 0px #AA0101, 1px 0px 0px #AA0101 !important;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n/* disabled rating */\n\n.ui.disabled.rating .icon {\n  cursor: default;\n}\n\n/*-------------------\n   User Interactive\n--------------------*/\n\n/* Selected Rating */\n\n.ui.rating.selected .active.icon {\n  opacity: 1;\n}\n\n.ui.rating.selected .icon.selected,\n.ui.rating .icon.selected {\n  opacity: 1;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.mini.rating {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.rating {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.rating {\n  font-size: 0.92857143rem;\n}\n\n.ui.rating {\n  font-size: 1rem;\n}\n\n.ui.large.rating {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.rating {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.rating {\n  font-size: 2rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Rating';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDAwEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBhUABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhUPCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFBw4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAcwCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGmImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJWWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.rating .icon {\n  font-family: 'Rating';\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n/* Empty Star */\n\n.ui.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n\n.ui.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Unfilled Star */\n\n.ui.star.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n\n.ui.star.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/* Partial */\n\n.ui.star.rating .partial.icon:before {\n  content: '\\f006';\n}\n\n.ui.star.rating .partial.icon {\n  content: '\\f005';\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n/* Empty Heart\n.ui.heart.rating .icon:before {\n  content: '\\f08a';\n}\n*/\n\n.ui.heart.rating .icon:before {\n  content: '\\f004';\n}\n\n/* Active */\n\n.ui.heart.rating .active.icon:before {\n  content: '\\f004';\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Search\n*******************************/\n\n.ui.search {\n  position: relative;\n}\n\n.ui.search > .prompt {\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-shadow: none;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.2142em;\n  padding: 0.67861429em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n}\n\n.ui.search .prompt {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.search .prompt ~ .search.icon {\n  cursor: pointer;\n}\n\n/*--------------\n    Results\n---------------*/\n\n.ui.search > .results {\n  display: none;\n  position: absolute;\n  top: 100%;\n  left: 0%;\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n  white-space: normal;\n  background: #FFFFFF;\n  margin-top: 0.5em;\n  width: 18em;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid #D4D4D5;\n  z-index: 998;\n}\n\n.ui.search > .results > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.search > .results > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/*--------------\n    Result\n---------------*/\n\n.ui.search > .results .result {\n  cursor: pointer;\n  display: block;\n  overflow: hidden;\n  font-size: 1em;\n  padding: 0.85714286em 1.14285714em;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.33;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.search > .results .result:last-child {\n  border-bottom: none !important;\n}\n\n/* Image */\n\n.ui.search > .results .result .image {\n  float: right;\n  overflow: hidden;\n  background: none;\n  width: 5em;\n  height: 3em;\n  border-radius: 0.25em;\n}\n\n.ui.search > .results .result .image img {\n  display: block;\n  width: auto;\n  height: 100%;\n}\n\n/*--------------\n      Info\n---------------*/\n\n.ui.search > .results .result .image + .content {\n  margin: 0em 6em 0em 0em;\n}\n\n.ui.search > .results .result .title {\n  margin: -0.14285em 0em 0em;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.search > .results .result .description {\n  margin-top: 0;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.search > .results .result .price {\n  float: right;\n  color: #21BA45;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.search > .results > .message {\n  padding: 1em 1em;\n}\n\n.ui.search > .results > .message .header {\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1rem;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.search > .results > .message .description {\n  margin-top: 0.25rem;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* View All Results */\n\n.ui.search > .results > .action {\n  display: block;\n  border-top: none;\n  background: #F3F4F5;\n  padding: 0.92857143em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-align: center;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n       Focus\n---------------------*/\n\n.ui.search > .prompt:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.search .input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.search .input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.search > .results .result:hover,\n.ui.category.search > .results .category .result:hover {\n  background: #F9FAFB;\n}\n\n.ui.search .action:hover {\n  background: #E0E0E0;\n}\n\n/*--------------\n      Active\n---------------*/\n\n.ui.category.search > .results .category.active {\n  background: #F3F4F5;\n}\n\n.ui.category.search > .results .category.active > .name {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.search > .results .result.active,\n.ui.category.search > .results .category .result.active {\n  position: relative;\n  border-left-color: rgba(34, 36, 38, 0.1);\n  background: #F3F4F5;\n  box-shadow: none;\n}\n\n.ui.search > .results .result.active .title {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.search > .results .result.active .description {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/*******************************\n           Types\n*******************************/\n\n/*--------------\n    Selection\n---------------*/\n\n.ui.search.selection .prompt {\n  border-radius: 0.28571429rem;\n}\n\n/* Remove input */\n\n.ui.search.selection > .icon.input > .remove.icon {\n  pointer-events: none;\n  position: absolute;\n  left: auto;\n  opacity: 0;\n  color: '';\n  top: 0em;\n  right: 0em;\n  -webkit-transition: color 0.1s ease, opacity 0.1s ease;\n  transition: color 0.1s ease, opacity 0.1s ease;\n}\n\n.ui.search.selection > .icon.input > .active.remove.icon {\n  cursor: pointer;\n  opacity: 0.8;\n  pointer-events: auto;\n}\n\n.ui.search.selection > .icon.input:not([class*=\"left icon\"]) > .icon ~ .remove.icon {\n  right: 1.85714em;\n}\n\n.ui.search.selection > .icon.input > .remove.icon:hover {\n  opacity: 1;\n  color: #DB2828;\n}\n\n/*--------------\n    Category\n---------------*/\n\n.ui.category.search .results {\n  width: 28em;\n}\n\n/* Category */\n\n.ui.category.search > .results .category {\n  background: #F3F4F5;\n  box-shadow: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n}\n\n/* Last Category */\n\n.ui.category.search > .results .category:last-child {\n  border-bottom: none;\n}\n\n/* First / Last */\n\n.ui.category.search > .results .category:first-child .name + .result {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Category Result */\n\n.ui.category.search > .results .category .result {\n  background: #FFFFFF;\n  margin-left: 100px;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n  padding: 0.85714286em 1.14285714em;\n}\n\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-bottom: none;\n}\n\n/* Category Result Name */\n\n.ui.category.search > .results .category > .name {\n  width: 100px;\n  background: transparent;\n  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  float: 1em;\n  float: left;\n  padding: 0.4em 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n     Left / Right\n--------------------*/\n\n.ui[class*=\"left aligned\"].search > .results {\n  right: auto;\n  left: 0%;\n}\n\n.ui[class*=\"right aligned\"].search > .results {\n  right: 0%;\n  left: auto;\n}\n\n/*--------------\n    Fluid\n---------------*/\n\n.ui.fluid.search .results {\n  width: 100%;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n.ui.mini.search {\n  font-size: 0.78571429em;\n}\n\n.ui.small.search {\n  font-size: 0.92857143em;\n}\n\n.ui.search {\n  font-size: 1em;\n}\n\n.ui.large.search {\n  font-size: 1.14285714em;\n}\n\n.ui.big.search {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.search {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.search {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n              Shape\n*******************************/\n\n.ui.shape {\n  position: relative;\n  vertical-align: top;\n  display: inline-block;\n  -webkit-perspective: 2000px;\n  perspective: 2000px;\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n.ui.shape .sides {\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.ui.shape .side {\n  opacity: 1;\n  width: 100%;\n  margin: 0em !important;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n.ui.shape .side {\n  display: none;\n}\n\n.ui.shape .side * {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.cube.shape .side {\n  min-width: 15em;\n  height: 15em;\n  padding: 2em;\n  background-color: #E6E6E6;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n}\n\n.ui.cube.shape .side > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  text-align: center;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n}\n\n.ui.cube.shape .side > .content > div {\n  display: table-cell;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.text.shape.animating .sides {\n  position: static;\n}\n\n.ui.text.shape .side {\n  white-space: nowrap;\n}\n\n.ui.text.shape .side > * {\n  white-space: normal;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.shape {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.shape .animating.side {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  display: block;\n  z-index: 100;\n}\n\n.ui.shape .hidden.side {\n  opacity: 0.6;\n}\n\n/*--------------\n      CSS\n---------------*/\n\n.ui.shape.animating .sides {\n  position: absolute;\n}\n\n.ui.shape.animating .sides {\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n.ui.shape.animating .side {\n  -webkit-transition: opacity 0.6s ease-in-out;\n  transition: opacity 0.6s ease-in-out;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.shape .active.side {\n  display: block;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Sidebar\n*******************************/\n\n/* Sidebar Menu */\n\n.ui.sidebar {\n  position: fixed;\n  top: 0;\n  left: 0;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-transition: none;\n  transition: none;\n  will-change: transform;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  height: 100% !important;\n  max-height: 100%;\n  border-radius: 0em !important;\n  margin: 0em !important;\n  overflow-y: auto !important;\n  z-index: 102;\n}\n\n/* GPU Layers for Child Elements */\n\n.ui.sidebar > * {\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/*--------------\n   Direction\n---------------*/\n\n.ui.left.sidebar {\n  right: auto;\n  left: 0px;\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.sidebar {\n  right: 0px !important;\n  left: auto !important;\n  -webkit-transform: translate3d(100%, 0%, 0);\n  transform: translate3d(100%, 0%, 0);\n}\n\n.ui.top.sidebar,\n.ui.bottom.sidebar {\n  width: 100% !important;\n  height: auto !important;\n}\n\n.ui.top.sidebar {\n  top: 0px !important;\n  bottom: auto !important;\n  -webkit-transform: translate3d(0, -100%, 0);\n  transform: translate3d(0, -100%, 0);\n}\n\n.ui.bottom.sidebar {\n  top: auto !important;\n  bottom: 0px !important;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0);\n}\n\n/*--------------\n     Pushable\n---------------*/\n\n.pushable {\n  height: 100%;\n  overflow-x: hidden;\n  padding: 0em !important;\n}\n\n/* Whole Page */\n\nbody.pushable {\n  background: #545454 !important;\n}\n\n/* Page Context */\n\n.pushable:not(body) {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n.pushable:not(body) > .ui.sidebar,\n.pushable:not(body) > .fixed,\n.pushable:not(body) > .pusher:after {\n  position: absolute;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.pushable > .fixed {\n  position: fixed;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  will-change: transform;\n  z-index: 101;\n}\n\n/*--------------\n     Page\n---------------*/\n\n.pushable > .pusher {\n  position: relative;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  overflow: hidden;\n  min-height: 100%;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 2;\n}\n\nbody.pushable > .pusher {\n  background: #FFFFFF;\n}\n\n/* Pusher should inherit background from context */\n\n.pushable > .pusher {\n  background: inherit;\n}\n\n/*--------------\n     Dimmer\n---------------*/\n\n.pushable > .pusher:after {\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  content: '';\n  background-color: rgba(0, 0, 0, 0.4);\n  overflow: hidden;\n  opacity: 0;\n  -webkit-transition: opacity 500ms;\n  transition: opacity 500ms;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.sidebar.menu .item {\n  border-radius: 0em !important;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Dimmed\n---------------*/\n\n.pushable > .pusher.dimmed:after {\n  width: 100% !important;\n  height: 100% !important;\n  opacity: 1 !important;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.animating.sidebar {\n  visibility: visible;\n}\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.sidebar {\n  visibility: visible;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n/* Shadow Direction */\n\n.ui.left.visible.sidebar,\n.ui.right.visible.sidebar {\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n.ui.top.visible.sidebar,\n.ui.bottom.visible.sidebar {\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible On Load */\n\n.ui.visible.left.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(260px, 0, 0);\n  transform: translate3d(260px, 0, 0);\n}\n\n.ui.visible.right.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-260px, 0, 0);\n  transform: translate3d(-260px, 0, 0);\n}\n\n.ui.visible.top.sidebar ~ .fixed,\n.ui.visible.top.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 36px, 0);\n  transform: translate3d(0, 36px, 0);\n}\n\n.ui.visible.bottom.sidebar ~ .fixed,\n.ui.visible.bottom.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, -36px, 0);\n  transform: translate3d(0, -36px, 0);\n}\n\n/* opposite sides visible forces content overlay */\n\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n/*--------------\n       iOS\n---------------*/\n\n/*\n  iOS incorrectly sizes document when content\n  is presented outside of view with 2Dtranslate\n*/\n\nhtml.ios {\n  overflow-x: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n\nhtml.ios,\nhtml.ios body {\n  height: initial !important;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n     Width\n---------------*/\n\n/* Left / Right */\n\n.ui.thin.left.sidebar,\n.ui.thin.right.sidebar {\n  width: 150px;\n}\n\n.ui[class*=\"very thin\"].left.sidebar,\n.ui[class*=\"very thin\"].right.sidebar {\n  width: 60px;\n}\n\n.ui.left.sidebar,\n.ui.right.sidebar {\n  width: 260px;\n}\n\n.ui.wide.left.sidebar,\n.ui.wide.right.sidebar {\n  width: 350px;\n}\n\n.ui[class*=\"very wide\"].left.sidebar,\n.ui[class*=\"very wide\"].right.sidebar {\n  width: 475px;\n}\n\n/* Left Visible */\n\n.ui.visible.thin.left.sidebar ~ .fixed,\n.ui.visible.thin.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(150px, 0, 0);\n  transform: translate3d(150px, 0, 0);\n}\n\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(60px, 0, 0);\n  transform: translate3d(60px, 0, 0);\n}\n\n.ui.visible.wide.left.sidebar ~ .fixed,\n.ui.visible.wide.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(350px, 0, 0);\n  transform: translate3d(350px, 0, 0);\n}\n\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(475px, 0, 0);\n  transform: translate3d(475px, 0, 0);\n}\n\n/* Right Visible */\n\n.ui.visible.thin.right.sidebar ~ .fixed,\n.ui.visible.thin.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-150px, 0, 0);\n  transform: translate3d(-150px, 0, 0);\n}\n\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-60px, 0, 0);\n  transform: translate3d(-60px, 0, 0);\n}\n\n.ui.visible.wide.right.sidebar ~ .fixed,\n.ui.visible.wide.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-350px, 0, 0);\n  transform: translate3d(-350px, 0, 0);\n}\n\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-475px, 0, 0);\n  transform: translate3d(-475px, 0, 0);\n}\n\n/*******************************\n          Animations\n*******************************/\n\n/*--------------\n    Overlay\n---------------*/\n\n/* Set-up */\n\n.ui.overlay.sidebar {\n  z-index: 102;\n}\n\n/* Initial */\n\n.ui.left.overlay.sidebar {\n  -webkit-transform: translate3d(-100%, 0%, 0);\n  transform: translate3d(-100%, 0%, 0);\n}\n\n.ui.right.overlay.sidebar {\n  -webkit-transform: translate3d(100%, 0%, 0);\n  transform: translate3d(100%, 0%, 0);\n}\n\n.ui.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Animation */\n\n.animating.ui.overlay.sidebar,\n.ui.visible.overlay.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End - Sidebar */\n\n.ui.visible.left.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.right.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n/* End - Pusher */\n\n.ui.visible.overlay.sidebar ~ .fixed,\n.ui.visible.overlay.sidebar ~ .pusher {\n  -webkit-transform: none !important;\n  transform: none !important;\n}\n\n/*--------------\n      Push\n---------------*/\n\n/* Initial */\n\n.ui.push.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.push.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.push.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n}\n\n.ui.top.push.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.push.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* End */\n\n.ui.visible.push.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n    Uncover\n---------------*/\n\n/* Initial */\n\n.ui.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 1;\n}\n\n/* End */\n\n.ui.visible.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/*--------------\n   Slide Along\n---------------*/\n\n/* Initial */\n\n.ui.slide.along.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.slide.along.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0);\n}\n\n.ui.right.slide.along.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n  transform: translate3d(50%, 0, 0);\n}\n\n.ui.top.slide.along.sidebar {\n  -webkit-transform: translate3d(0, -50%, 0);\n  transform: translate3d(0, -50%, 0);\n}\n\n.ui.bottom.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n  transform: translate3d(0%, 50%, 0);\n}\n\n/* Animation */\n\n.ui.animating.slide.along.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n\n.ui.visible.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Slide Out\n---------------*/\n\n/* Initial */\n\n.ui.slide.out.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.slide.out.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n  transform: translate3d(50%, 0, 0);\n}\n\n.ui.right.slide.out.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0);\n}\n\n.ui.top.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n  transform: translate3d(0%, 50%, 0);\n}\n\n.ui.bottom.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, -50%, 0);\n  transform: translate3d(0%, -50%, 0);\n}\n\n/* Animation */\n\n.ui.animating.slide.out.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n\n.ui.visible.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Scale Down\n---------------*/\n\n/* Initial */\n\n.ui.scale.down.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial  */\n\n.ui.left.scale.down.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.scale.down.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n}\n\n.ui.top.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Pusher - Initial */\n\n.ui.scale.down.left.sidebar ~ .pusher {\n  -webkit-transform-origin: 75% 50%;\n  transform-origin: 75% 50%;\n}\n\n.ui.scale.down.right.sidebar ~ .pusher {\n  -webkit-transform-origin: 25% 50%;\n  transform-origin: 25% 50%;\n}\n\n.ui.scale.down.top.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 75%;\n  transform-origin: 50% 75%;\n}\n\n.ui.scale.down.bottom.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 25%;\n  transform-origin: 50% 25%;\n}\n\n/* Animation */\n\n.ui.animating.scale.down > .visible.ui.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n.ui.visible.scale.down.sidebar ~ .pusher,\n.ui.animating.scale.down.sidebar ~ .pusher {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  overflow: hidden !important;\n}\n\n/* End */\n\n.ui.visible.scale.down.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n.ui.visible.scale.down.sidebar ~ .pusher {\n  -webkit-transform: scale(0.75);\n  transform: scale(0.75);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Sticky\n*******************************/\n\n.ui.sticky {\n  position: static;\n  -webkit-transition: none;\n  transition: none;\n  z-index: 800;\n}\n\n/*******************************\n            States\n*******************************/\n\n/* Bound */\n\n.ui.sticky.bound {\n  position: absolute;\n  left: auto;\n  right: auto;\n}\n\n/* Fixed */\n\n.ui.sticky.fixed {\n  position: fixed;\n  left: auto;\n  right: auto;\n}\n\n/* Bound/Fixed Position */\n\n.ui.sticky.bound.top,\n.ui.sticky.fixed.top {\n  top: 0px;\n  bottom: auto;\n}\n\n.ui.sticky.bound.bottom,\n.ui.sticky.fixed.bottom {\n  top: auto;\n  bottom: 0px;\n}\n\n/*******************************\n            Types\n*******************************/\n\n.ui.native.sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           UI Tabs\n*******************************/\n\n.ui.tab {\n  display: none;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------------\n       Active\n---------------------*/\n\n.ui.tab.active,\n.ui.tab.open {\n  display: block;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.tab.loading {\n  position: relative;\n  overflow: hidden;\n  display: block;\n  min-height: 250px;\n}\n\n.ui.tab.loading * {\n  position: relative !important;\n  left: -10000px !important;\n}\n\n.ui.tab.loading:before,\n.ui.tab.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.tab.loading:after,\n.ui.tab.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*******************************\n         Tab Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.4 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n          Transitions\n*******************************/\n\n.transition {\n  -webkit-animation-iteration-count: 1;\n  animation-iteration-count: 1;\n  -webkit-animation-duration: 300ms;\n  animation-duration: 300ms;\n  -webkit-animation-timing-function: ease;\n  animation-timing-function: ease;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n/*******************************\n            States\n*******************************/\n\n/* Animating */\n\n.animating.transition {\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  visibility: visible !important;\n}\n\n/* Loading */\n\n.loading.transition {\n  position: absolute;\n  top: -99999px;\n  left: -99999px;\n}\n\n/* Hidden */\n\n.hidden.transition {\n  display: none;\n  visibility: hidden;\n}\n\n/* Visible */\n\n.visible.transition {\n  display: block !important;\n  visibility: visible !important;\n  /*  backface-visibility: @backfaceVisibility;\n  transform: @use3DAcceleration;*/\n}\n\n/* Disabled */\n\n.disabled.transition {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.looping.transition {\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n}\n\n/*******************************\n          Transitions\n*******************************/\n\n/*\n  Some transitions adapted from Animate CSS\n  https://github.com/daneden/animate.css\n\n  Additional transitions adapted from Glide\n  by Nick Pettit - https://github.com/nickpettit/glide\n*/\n\n/*--------------\n     Browse\n---------------*/\n\n.transition.browse {\n  -webkit-animation-duration: 500ms;\n  animation-duration: 500ms;\n}\n\n.transition.browse.in {\n  -webkit-animation-name: browseIn;\n  animation-name: browseIn;\n}\n\n.transition.browse.out,\n.transition.browse.left.out {\n  -webkit-animation-name: browseOutLeft;\n  animation-name: browseOutLeft;\n}\n\n.transition.browse.right.out {\n  -webkit-animation-name: browseOutRight;\n  animation-name: browseOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n    transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n    transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n@keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n    transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n    transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n/*--------------\n     Drop\n---------------*/\n\n.drop.transition {\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-duration: 400ms;\n  animation-duration: 400ms;\n  -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n  animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n}\n\n.drop.transition.in {\n  -webkit-animation-name: dropIn;\n  animation-name: dropIn;\n}\n\n.drop.transition.out {\n  -webkit-animation-name: dropOut;\n  animation-name: dropOut;\n}\n\n/* Drop */\n\n@-webkit-keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@-webkit-keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n@keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.transition.fade.in {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn;\n}\n\n.transition[class*=\"fade up\"].in {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n\n.transition[class*=\"fade down\"].in {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n\n.transition[class*=\"fade left\"].in {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\n\n.transition[class*=\"fade right\"].in {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n\n.transition.fade.out {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut;\n}\n\n.transition[class*=\"fade up\"].out {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp;\n}\n\n.transition[class*=\"fade down\"].out {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown;\n}\n\n.transition[class*=\"fade left\"].out {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft;\n}\n\n.transition[class*=\"fade right\"].out {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n    transform: translateY(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n    transform: translateY(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n    transform: translateY(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n    transform: translateY(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n    transform: translateX(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n    transform: translateX(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n    transform: translateX(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n    transform: translateX(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n    transform: translateY(5%);\n  }\n}\n\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n    transform: translateY(5%);\n  }\n}\n\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n    transform: translateY(-5%);\n  }\n}\n\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n    transform: translateY(-5%);\n  }\n}\n\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n    transform: translateX(5%);\n  }\n}\n\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n    transform: translateX(5%);\n  }\n}\n\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n    transform: translateX(-5%);\n  }\n}\n\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n    transform: translateX(-5%);\n  }\n}\n\n/*--------------\n     Flips\n---------------*/\n\n.flip.transition.in,\n.flip.transition.out {\n  -webkit-animation-duration: 600ms;\n  animation-duration: 600ms;\n}\n\n.horizontal.flip.transition.in {\n  -webkit-animation-name: horizontalFlipIn;\n  animation-name: horizontalFlipIn;\n}\n\n.horizontal.flip.transition.out {\n  -webkit-animation-name: horizontalFlipOut;\n  animation-name: horizontalFlipOut;\n}\n\n.vertical.flip.transition.in {\n  -webkit-animation-name: verticalFlipIn;\n  animation-name: verticalFlipIn;\n}\n\n.vertical.flip.transition.out {\n  -webkit-animation-name: verticalFlipOut;\n  animation-name: verticalFlipOut;\n}\n\n/* In */\n\n@-webkit-keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n    transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n    transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@-webkit-keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n    transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n    transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n/*--------------\n      Scale\n---------------*/\n\n.scale.transition.in {\n  -webkit-animation-name: scaleIn;\n  animation-name: scaleIn;\n}\n\n.scale.transition.out {\n  -webkit-animation-name: scaleOut;\n  animation-name: scaleOut;\n}\n\n@-webkit-keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n    transform: scale(0.8);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n    transform: scale(0.8);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n  }\n}\n\n@keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n  }\n}\n\n/*--------------\n      Fly\n---------------*/\n\n/* Inward */\n\n.transition.fly {\n  -webkit-animation-duration: 0.6s;\n  animation-duration: 0.6s;\n  -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n.transition.fly.in {\n  -webkit-animation-name: flyIn;\n  animation-name: flyIn;\n}\n\n.transition[class*=\"fly up\"].in {\n  -webkit-animation-name: flyInUp;\n  animation-name: flyInUp;\n}\n\n.transition[class*=\"fly down\"].in {\n  -webkit-animation-name: flyInDown;\n  animation-name: flyInDown;\n}\n\n.transition[class*=\"fly left\"].in {\n  -webkit-animation-name: flyInLeft;\n  animation-name: flyInLeft;\n}\n\n.transition[class*=\"fly right\"].in {\n  -webkit-animation-name: flyInRight;\n  animation-name: flyInRight;\n}\n\n/* Outward */\n\n.transition.fly.out {\n  -webkit-animation-name: flyOut;\n  animation-name: flyOut;\n}\n\n.transition[class*=\"fly up\"].out {\n  -webkit-animation-name: flyOutUp;\n  animation-name: flyOutUp;\n}\n\n.transition[class*=\"fly down\"].out {\n  -webkit-animation-name: flyOutDown;\n  animation-name: flyOutDown;\n}\n\n.transition[class*=\"fly left\"].out {\n  -webkit-animation-name: flyOutLeft;\n  animation-name: flyOutLeft;\n}\n\n.transition[class*=\"fly right\"].out {\n  -webkit-animation-name: flyOutRight;\n  animation-name: flyOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@-webkit-keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n    transform: translate3d(0, 1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n    transform: translate3d(0, 1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@-webkit-keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n    transform: translate3d(0, -1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n    transform: translate3d(0, -1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@-webkit-keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n    transform: translate3d(1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n    transform: translate3d(1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@-webkit-keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n    transform: translate3d(-1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n    transform: translate3d(-1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n\n@keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n\n@-webkit-keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@-webkit-keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@-webkit-keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@-webkit-keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n@keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n/*--------------\n     Slide\n---------------*/\n\n.transition.slide.in,\n.transition[class*=\"slide down\"].in {\n  -webkit-animation-name: slideInY;\n  animation-name: slideInY;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"slide up\"].in {\n  -webkit-animation-name: slideInY;\n  animation-name: slideInY;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"slide left\"].in {\n  -webkit-animation-name: slideInX;\n  animation-name: slideInX;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"slide right\"].in {\n  -webkit-animation-name: slideInX;\n  animation-name: slideInX;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n.transition.slide.out,\n.transition[class*=\"slide down\"].out {\n  -webkit-animation-name: slideOutY;\n  animation-name: slideOutY;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"slide up\"].out {\n  -webkit-animation-name: slideOutY;\n  animation-name: slideOutY;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"slide left\"].out {\n  -webkit-animation-name: slideOutX;\n  animation-name: slideOutX;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"slide right\"].out {\n  -webkit-animation-name: slideOutX;\n  animation-name: slideOutX;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n/* In */\n\n@-webkit-keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n}\n\n@keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n}\n\n@-webkit-keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n}\n\n@keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n}\n\n@keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n}\n\n@-webkit-keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n}\n\n@keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n}\n\n/*--------------\n     Swing\n---------------*/\n\n.transition.swing {\n  -webkit-animation-duration: 800ms;\n  animation-duration: 800ms;\n}\n\n.transition[class*=\"swing down\"].in {\n  -webkit-animation-name: swingInX;\n  animation-name: swingInX;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"swing up\"].in {\n  -webkit-animation-name: swingInX;\n  animation-name: swingInX;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"swing left\"].in {\n  -webkit-animation-name: swingInY;\n  animation-name: swingInY;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"swing right\"].in {\n  -webkit-animation-name: swingInY;\n  animation-name: swingInY;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n.transition.swing.out,\n.transition[class*=\"swing down\"].out {\n  -webkit-animation-name: swingOutX;\n  animation-name: swingOutX;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"swing up\"].out {\n  -webkit-animation-name: swingOutX;\n  animation-name: swingOutX;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"swing left\"].out {\n  -webkit-animation-name: swingOutY;\n  animation-name: swingOutY;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"swing right\"].out {\n  -webkit-animation-name: swingOutY;\n  animation-name: swingOutY;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n/* In */\n\n@-webkit-keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n    transform: perspective(1000px) rotateX(15deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n}\n\n@keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n    transform: perspective(1000px) rotateX(15deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n}\n\n@-webkit-keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n    transform: perspective(1000px) rotateY(-17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n@keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n    transform: perspective(1000px) rotateY(-17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n    transform: perspective(1000px) rotateX(17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n    transform: perspective(1000px) rotateX(17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n    transform: perspective(1000px) rotateY(-10deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n    transform: perspective(1000px) rotateY(-10deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n/*******************************\n       Static Animations\n*******************************/\n\n/*--------------\n    Emphasis\n---------------*/\n\n.flash.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: flash;\n  animation-name: flash;\n}\n\n.shake.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: shake;\n  animation-name: shake;\n}\n\n.bounce.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n}\n\n.tada.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: tada;\n  animation-name: tada;\n}\n\n.pulse.transition {\n  -webkit-animation-duration: 500ms;\n  animation-duration: 500ms;\n  -webkit-animation-name: pulse;\n  animation-name: pulse;\n}\n\n.jiggle.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: jiggle;\n  animation-name: jiggle;\n}\n\n/* Flash */\n\n@-webkit-keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n@keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n/* Shake */\n\n@-webkit-keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n@keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n/* Bounce */\n\n@-webkit-keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n@keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n/* Tada */\n\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n/* Pulse */\n\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n\n  50% {\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n    opacity: 0.7;\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n\n  50% {\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n    opacity: 0.7;\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n/* Rubberband */\n\n@-webkit-keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n/*******************************\n         Site Overrides\n*******************************/"
  },
  {
    "path": "css/semantic-ui/semantic.js",
    "content": " /*\n * # Semantic UI - 2.2.4\n * https://github.com/Semantic-Org/Semantic-UI\n * http://www.semantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n/*!\n * # Semantic UI 2.2.4 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            if(instance !== undefined) {\n              instance.invoke('destroy');\n            }\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          empty: function($field) {\n            if(!$field || $field.length === 0) {\n              return true;\n            }\n            else if($field.is('input[type=\"checkbox\"]')) {\n              return !$field.is(':checked');\n            }\n            else {\n              return module.is.blank($field);\n            }\n          },\n          blank: function($field) {\n            return $.trim($field.val()) === '';\n          },\n          valid: function() {\n            var\n              allValid = true\n            ;\n            module.verbose('Checking if form is valid');\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field       = $(this),\n                key          = event.which,\n                isInput      = $field.is(selector.input),\n                isCheckbox   = $field.is(selector.checkbox),\n                isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\n                keyCode      = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if(settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) ) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( validationRules );\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\n              return false;\n            }\n            return (rule.value !== undefined)\n              ? rule.value\n              : rule.type.match(settings.regExp.bracket)[1] + ''\n            ;\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.length == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields) {\n                  ruleKeys = Object.keys(parameters.fields);\n                  if( typeof parameters.fields[ruleKeys[0]] == 'string' || $.isArray(parameters.fields[ruleKeys[0]]) ) {\n                    $.each(parameters.fields, function(name, rules) {\n                      if(typeof rules == 'string') {\n                        rules = [rules];\n                      }\n                      parameters.fields[name] = {\n                        rules: []\n                      };\n                      $.each(rules, function(index, rule) {\n                        parameters.fields[name].rules.push({ type: rule });\n                      });\n                    });\n                  }\n                }\n\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(isChecked) {\n                      values[name] = value;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        add: {\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.is.valid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName) {\n            var\n              identifier    = field.identifier || fieldName,\n              $field        = module.get.field(identifier),\n              $dependsField = (field.depends)\n                ? module.get.field(field.depends)\n                : false,\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && module.is.blank($field)){\n              module.debug('Field is optional and blank. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.depends && module.is.empty($dependsField)) {\n              module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              module.remove.prompt(identifier, fieldErrors);\n              settings.onValid.call($field);\n            }\n            else {\n              formErrors = formErrors.concat(fieldErrors);\n              module.add.prompt(identifier, fieldErrors);\n              settings.onInvalid.call($field, fieldErrors);\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d*(\\.)\\d+/,\n    email   : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      return $.fn.form.settings.regExp.email.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      if(regExp instanceof RegExp) {\n        return value.match(regExp);\n      }\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n\n/*!\n * # Semantic UI 2.2.4 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnable.call(input);\n          // preserve legacy callbacks\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisable.call(input);\n          // preserve legacy callbacks\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  silent              : false,\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  // preserve misspelled callbacks (will be removed in 3.0)\n  onEnabled           : function(){},\n  onDisabled          : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n            module.set.variation();\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n            $dimmable\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGB      = (colorArray && colorArray.length == 3),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGB || isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $sizer          = $module.find(selector.sizer),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        willRefocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          module.disconnect.menuObserver();\n          module.disconnect.selectObserver();\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(module.event.select.mutation);\n            menuObserver   = new MutationObserver(module.event.menu.mutation);\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n            module.observe.select();\n            module.observe.menu();\n          }\n        },\n\n        disconnect: {\n          menuObserver: function() {\n            if(menuObserver) {\n              menuObserver.disconnect();\n            }\n          },\n          selectObserver: function() {\n            if(selectObserver) {\n              selectObserver.disconnect();\n            }\n          }\n        },\n        observe: {\n          select: function() {\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          menu: function() {\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                if(settings.hideAdditions) {\n                  $userChoice.addClass(className.hidden);\n                }\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          },\n          sizer: function() {\n            $sizer = $('<span />')\n              .addClass(className.sizer)\n              .insertAfter($search)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          if(module.has.minCharacters(query)) {\n            module.filter(query);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n              .not(selector.addition + selector.hidden)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug   : settings.debug,\n                urlData : {\n                  value : module.get.value(),\n                  query : module.get.query()\n                },\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {\n              module.create.sizer();\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown');\n                $module.addClass(className.disabled);\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshItems: function() {\n          $item = $menu.find(selector.item);\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n        },\n\n        clearData: function() {\n          module.verbose('Clearing metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(module.is.allFiltered()) {\n              return true;\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                if(module.has.menuSearch()) {\n                  module.focusSearch();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('click'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n                .on('blur'      + eventNamespace, module.event.blur)\n              ;\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              module.select.firstUnfiltered();\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(settings.allowAdditions) {\n                    if(settings.hideAdditions) {\n                      module.verbose('User addition with no menu, setting empty style');\n                      module.set.empty();\n                      module.hideMenu();\n                    }\n                  }\n                  else {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.empty();\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration : false,\n              cache         : 'local',\n              throttle      : settings.throttle,\n              urlData       : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.regExp(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(term.indexOf(query) > -1) {\n             return true;\n          }\n          return false;\n        },\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function(skipHandler) {\n          if( module.has.search() && !module.is.focusedOnSearch() ) {\n            if(skipHandler) {\n              $module.off('focus' + eventNamespace, selector.search);\n              $search.focus();\n              $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);\n            }\n            else {\n              $search.focus();\n            }\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.length > 0)\n          ;\n          if(hasSelected) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem, {}, true);\n            return;\n          }\n          else {\n            if(settings.allowAdditions) {\n              module.set.selected(module.get.query());\n              module.remove.searchTerm();\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          mousedown: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = true;\n            }\n            else {\n              // prevents focus callback from occurring on mousedown\n              activated = true;\n            }\n          },\n          mouseup: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = false;\n            }\n            else {\n              activated = false;\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module)) {\n              if(!module.is.focusedOnSearch()) {\n                module.focusSearch();\n              }\n              else {\n                module.show();\n              }\n            }\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(!willRefocus) {\n                if(!itemActivated && !pageLostFocus) {\n                  if(settings.forceSelection) {\n                    module.forceSelection();\n                  }\n                  module.hide();\n                }\n              }\n              willRefocus = false;\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {\n                return;\n              }\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          select: {\n            mutation: function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            }\n          },\n          menu: {\n            mutation: function(mutations) {\n              var\n                mutation   = mutations[0],\n                $addedNode = mutation.addedNodes\n                  ? $(mutation.addedNodes[0])\n                  : $(false),\n                $removedNode = mutation.removedNodes\n                  ? $(mutation.removedNodes[0])\n                  : $(false),\n                $changedNodes  = $addedNode.add($removedNode),\n                isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,\n                isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0\n              ;\n              if(isUserAddition || isMessage) {\n                module.debug('Updating item selector cache');\n                module.refreshItems();\n              }\n              else {\n                module.debug('Menu modified, updating selector cache');\n                module.refresh();\n              }\n            },\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $target        = $(event.target),\n                $item          = $(this),\n                $subMenu       = $item.children(selector.menu),\n                $otherMenus    = $item.siblings(selector.item).children(selector.menu),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if( !isBubbledEvent && hasSubMenu ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false, $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false, $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event, skipRefocus) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(module.is.searchSelection()) {\n                  if(settings.allowAdditions) {\n                    module.remove.userAddition();\n                  }\n                  module.remove.searchTerm();\n                  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {\n                    module.focusSearch(true);\n                  }\n                }\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu              = $selectedItem.children(selector.menu),\n                $parentMenu           = $selectedItem.closest(selector.menu),\n                inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu            = ($subMenu.length> 0),\n                hasSelectedItem       = ($selectedItem.length > 0),\n                selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // allow selection with menu closed\n              if(isAdditionWithoutMenu) {\n                module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                module.event.item.click.call($selectedItem, event);\n                if(module.is.searchSelection()) {\n                  module.remove.searchTerm();\n                }\n              }\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // sub-menu actions\n                if(hasSelectedItem) {\n\n                  if(pressedKey == keys.leftArrow) {\n\n                    isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                    if(isSubMenuItem) {\n                      module.verbose('Left key pressed, closing sub-menu');\n                      module.animate.hide(false, $parentMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $parentMenu\n                        .closest(selector.item)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n\n                  // right arrow (show sub-menu)\n                  if(pressedKey == keys.rightArrow) {\n                    if(hasSubMenu) {\n                      module.verbose('Right key pressed, opening sub-menu');\n                      module.animate.show(false, $subMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $subMenu\n                        .find(selector.item).eq(0)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow && !module.is.visible()) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.select.firstUnfiltered();\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( !module.has.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(element, text, value, this);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(element, text, value, this);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target      = $(event.target),\n              $label       = $target.closest(selector.siblingLabel),\n              inVisibleDOM = document.body.contains(event.target),\n              notOnLabel   = ($module.find($label).length === 0),\n              notInMenu    = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inVisibleDOM && notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.selected(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.value(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          combo: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(element));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value, element) {\n            module.set.value(value, text);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(value) {\n            value = (value !== undefined)\n              ? value\n              : $search.val()\n            ;\n            $sizer.text(value);\n            // prevent rounding issues\n            return Math.ceil( $sizer.width() + 1);\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value),\n              isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')\n            ;\n            // prevents placeholder element from being selected when multiple\n            return (value === undefined || isEmptyMultiselect)\n              ? ''\n              : value\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                if(name) {\n                  if(!remoteValues) {\n                    remoteValues = {};\n                  }\n                  remoteValues[value] = name;\n                }\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retrieving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retrieved values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          placeholderText: function() {\n            module.set.placeholderText();\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occurring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {\n              module.restore.remoteValues();\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple() && settings.useLabels) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            if(settings.selectOnKeydown && module.is.single()) {\n              module.set.selectedItem($nextSelectedItem);\n            }\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          empty: function() {\n            $module.addClass(className.empty);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          partialSearch: function(text) {\n            var\n              length = module.get.query().length\n            ;\n            $search.val( text.substr(0 , length));\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedItem: function($item) {\n            var\n              value = module.get.choiceValue($item),\n              text  = module.get.choiceText($item, false)\n            ;\n            module.debug('Setting user selection to item', $item);\n            module.remove.activeItem();\n            module.set.partialSearch(text);\n            module.set.activeItem($item);\n            module.set.selected(value, $item);\n            module.set.text(text);\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n              if(settings.selectOnKeydown && module.is.single()) {\n                module.set.selectedItem($nextValue);\n              }\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              if(module.is.onScreen($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.addClass(className.upward);\n          },\n          value: function(value, text, $selected) {\n            var\n              escapedValue = module.escape.value(value),\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(!settings.allowReselection && stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', escapedValue, currentValue);\n              internalChange = true;\n              $input\n                .val(escapedValue)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', escapedValue, $input);\n              if(escapedValue !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.multiple()) {\n              module.remove.searchWidth();\n            }\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              escapedValue = module.escape.value(value),\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-value', escapedValue)\n              .html(templates.label(escapedValue, text))\n            ;\n            $label = settings.onLabelCreate.call($label, escapedValue, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', escapedValue);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + escapedValue + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            module.disconnect.selectObserver();\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', escapedValue)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            module.observe.select();\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            if(hasUserSuggestion) {\n              $addition\n                .data(metadata.value, value)\n                .data(metadata.text, value)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n              ;\n              if(!settings.hideAdditions) {\n                html = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $addition\n                  .html(html)\n                ;\n              }\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n            if(!settings.hideAdditions || module.is.allFiltered()) {\n              $addition\n                .addClass(className.selected)\n                .siblings()\n                .removeClass(className.selected)\n              ;\n            }\n            module.refreshItems();\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          empty: function() {\n            $module.removeClass(className.empty);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.removeClass(className.upward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n            module.remove.empty();\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + escapedValue + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer');\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', escapedValue);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchWidth: function() {\n            $search.css('width', '');\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          userAddition: function() {\n            $item.filter(selector.addition).remove();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-value=\"' + value +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                module.remove.message();\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          menuSearch: function() {\n            return (module.has.search() && $search.closest($menu).length > 0);\n          },\n          search: function() {\n            return ($search.length > 0);\n          },\n          sizer: function() {\n            return ($sizer.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          minCharacters: function(searchTerm) {\n            if(settings.minCharacters) {\n              searchTerm = (searchTerm !== undefined)\n                ? String(searchTerm)\n                : String(module.get.query())\n              ;\n              return (searchTerm.length >= settings.minCharacters);\n            }\n            return true;\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $labels      = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-value=\"' + escapedValue +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            var\n              $normalResults = $item.not(selector.addition)\n            ;\n            return ($normalResults.filter(selector.unselectable).length === $normalResults.length);\n          },\n          userSuggestion: function() {\n            return ($menu.children(selector.addition).length > 0);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          bubbledLabelClick: function(event) {\n            return $(event.target).is('select, input') && $module.closest('label').length > 0;\n          },\n          bubbledIconClick: function(event) {\n            return $(event.target).closest($icon).length > 0;\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          onScreen: function($subMenu) {\n            var\n              $currentMenu   = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen = {},\n              calculations\n            ;\n            $currentMenu.addClass(className.loading);\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      if(settings.direction == 'auto') {\n                        module.remove.upward($subMenu);\n                      }\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          value: function(value) {\n            var\n              multipleValues = $.isArray(value),\n              stringValue    = (typeof value === 'string'),\n              isUnparsable   = (!stringValue && !multipleValues),\n              hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),\n              values         = []\n            ;\n            if(!module.has.selectInput() || isUnparsable || !hasQuotes) {\n              return value;\n            }\n            module.debug('Encoding quote values for use in select', value);\n            if(multipleValues) {\n              $.each(value, function(index, value){\n                values.push(value.replace(regExp.quote, '&quot;'));\n              });\n              return values;\n            }\n            return value.replace(regExp.quote, '&quot;');\n          },\n          regExp: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  silent                 : false,\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used\n  minCharacters          : 0,          // Minimum characters required to trigger API call\n  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n  throttle               : 200,        // How long to wait after last user input to search remotely\n\n  context                : window,     // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n\n  allowAdditions         : false,      // whether multiple select should allow user added values\n  hideAdditions          : true,      // whether or not to hide special message prompting a user they can enter a value\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowReselection       : false,      // whether current value should trigger callbacks when reselected\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n    quote    : /\"/g\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results',  // grouping for api results\n    values       : 'values',   // grouping for all dropdown values\n    disabled     : 'disabled', // whether value should be disabled\n    name         : 'name',     // displayed dropdown text\n    value        : 'value',    // actual dropdown value\n    text         : 'text'      // displayed text when selected\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    hidden       : '.hidden',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input, .menu input.search',\n    sizer        : '> input.sizer',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    empty       : 'empty',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    sizer       : 'sizer',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      var\n        maybeText = (option[fields.text])\n          ? 'data-text=\"' + option[fields.text] + '\"'\n          : '',\n        maybeDisabled = (option[fields.disabled])\n          ? 'disabled '\n          : ''\n      ;\n      html += '<div class=\"'+ maybeDisabled +'item\" data-value=\"' + option[fields.value] + '\"' + maybeText + '>'\n      html +=   option[fields.name];\n      html += '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Embed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        changeEmbed: function(url) {\n          $embed\n            .html( module.generate.embed(url) )\n          ;\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n          ;\n          if(url) {\n            $module.data(metadata.url, url);\n          }\n          else {\n            $module.removeData(metadata.url);\n          }\n          if(module.has.embed()) {\n            module.changeEmbed();\n          }\n          else {\n            module.create();\n          }\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          embed: function() {\n            return ($embed.length > 0);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.color || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.color || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      var src = url;\n      if (parameters) {\n          src += '?' + parameters;\n      }\n      return ''\n        + '<iframe src=\"' + src + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : false,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementEventNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n            }\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer with settings', dimmerSettings);\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementEventNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementEventNamespace);\n          $dimmer.off(elementEventNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementEventNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          deny: function() {\n            if(settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      if(settings.keyboardShortcuts) {\n                        module.add.keyboardShortcuts();\n                      }\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    if(settings.keyboardShortcuts) {\n                      module.remove.keyboardShortcuts();\n                    }\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementEventNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find('[tabindex], :input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementEventNamespace, module.event.click)\n              ;\n            }\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n  // whether to use keyboard shortcuts\n  keyboardShortcuts: true,\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overridden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $scrollContext     = $(settings.scrollContext),\n        $boundary          = $(settings.boundary),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        documentObserver,\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if(!module.exists() && settings.preserve) {\n            module.create();\n          }\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', documentObserver);\n          }\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent();\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as activating element');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($popup)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          module.unbind.close();\n          module.unbind.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          hideGracefully: function(event) {\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target),\n              inPopup = ($target.closest(selector.popup).length > 0)\n            ;\n            // don't close on clicks inside popup\n            if(event && !inPopup && isInDOM) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popup  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2, 8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.visible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                  .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        supports: {\n          svg: function() {\n            return (typeof SVGGraphicsElement === undefined);\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement    = $target[0],\n              isWindow         = ($boundary[0] == window),\n              targetPosition   = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              screenPosition = (isWindow)\n                ? { top: 0, left: 0 }\n                : $boundary.offset(),\n              calculations   = {},\n              scroll = (isWindow)\n                ? { top: $window.scrollTop(), left: $window.scrollLeft() }\n                : { top: 0, left: 0},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                top  : screenPosition.top,\n                left : screenPosition.left,\n                scroll: {\n                  top  : scroll.top,\n                  left : scroll.left\n                },\n                width  : $boundary.width(),\n                height : $boundary.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.top + screen.scroll.top,\n              bottom : screen.top + screen.scroll.top + screen.height,\n              left   : screen.left + screen.scroll.left,\n              right  : screen.left + screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              $scrollContext\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('touchstart' + elementNamespace, function(event) {\n                  module.verbose('Touched away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('click' + elementNamespace, function(event) {\n                  module.verbose('Clicked away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $window\n              .off(elementNamespace)\n            ;\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          close: function() {\n            $document\n              .off(elementNamespace)\n            ;\n            $scrollContext\n              .off(elementNamespace)\n            ;\n          },\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          svg: function(element) {\n            return module.supports.svg() && (element instanceof SVGGraphicsElement);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.visible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name           : 'Popup',\n\n  // module settings\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n  namespace      : 'popup',\n\n  // whether it should use dom mutation observers\n  observeChanges : true,\n\n  // callback only when element added to dom\n  onCreate       : function(){},\n\n  // callback before element removed from dom\n  onRemove       : function(){},\n\n  // callback before show animation\n  onShow         : function(){},\n\n  // callback after show animation\n  onVisible      : function(){},\n\n  // callback before hide animation\n  onHide         : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable  : function(){},\n\n  // callback after hide animation\n  onHidden       : function(){},\n\n  // when to show popup\n  on             : 'hover',\n\n  // element to use to determine if popup is out of boundary\n  boundary       : window,\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position       : 'top left',\n\n  // name of variation to use\n  variation      : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content        : false,\n\n  // explicitly set html\n  html           : false,\n\n  // explicitly set title\n  title          : false,\n\n  // whether automatically close on clickaway when on click\n  closable       : true,\n\n  // automatically hide on scroll\n  hideOnScroll   : 'auto',\n\n  // hide other popups on show\n  exclusive      : false,\n\n  // context to attach popups\n  context        : 'body',\n\n  // context for binding scroll events\n  scrollContext  : window,\n\n  // position to prefer when calculating new position\n  prefer         : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort     : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating',\n    dropdown  : 'dropdown',\n    fluid     : 'fluid',\n    loading   : 'loading',\n    popup     : 'ui popup',\n    position  : 'top left center bottom right',\n    visible   : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\nvar\n  global = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.remove.nextValue();\n          module.update.progress(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.remove.progressPoll();\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n            newValue       = startValue + incrementValue;\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n            module.debug('Incrementing percentage by', startValue, newValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n\n        has: {\n          progressPoll: function() {\n            return module.progressPoll;\n          },\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.verbose('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n          normalizedValue: function(value) {\n            if(value < 0) {\n              module.debug('Value cannot decrement below 0');\n              return 0;\n            }\n            if(module.has.total()) {\n              if(value > module.total) {\n                module.debug('Value cannot increment above total', module.total);\n                return module.total;\n              }\n            }\n            else if(value > 100 ) {\n              module.debug('Value cannot increment above 100 percent');\n              return 100;\n            }\n            return value;\n          },\n\n          updateInterval: function() {\n            if(settings.updateInterval == 'auto') {\n              return settings.duration;\n            }\n            return settings.updateInterval;\n          },\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.nextValue || module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        create: {\n          progressPoll: function() {\n            module.progressPoll = setTimeout(function() {\n              module.update.toNextValue();\n              module.remove.progressPoll();\n            }, module.get.updateInterval());\n          },\n        },\n\n        is: {\n          complete: function() {\n            return module.is.success() || module.is.warning() || module.is.error();\n          },\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          progressPoll: function() {\n            module.verbose('Removing progress poll timer');\n            if(module.progressPoll) {\n              clearTimeout(module.progressPoll);\n              delete module.progressPoll;\n            }\n          },\n          nextValue: function() {\n            module.verbose('Removing progress value stored for next update');\n            delete module.nextValue;\n          },\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            $bar.one(transitionEnd + eventNamespace, animationCallback);\n            animating = true;\n            module.interval = setInterval(function() {\n              var\n                isInDOM = $.contains(document.documentElement, element)\n              ;\n              if(!isInDOM) {\n                clearInterval(module.interval);\n                animating = false;\n              }\n              module.set.labels();\n            }, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.verbose('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n                module.remove.progressPoll();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.verbose('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.verbose('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            text = settings.onLabelUpdate('active', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onActive.call(element, module.value, module.total);\n            });\n          },\n          success : function(text) {\n            text = text || settings.text.success || settings.text.active;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(settings.text.success) {\n              text = settings.onLabelUpdate('success', text, module.value, module.total);\n              module.set.label(text);\n            }\n            else {\n              text = settings.onLabelUpdate('active', text, module.value, module.total);\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onSuccess.call(element, module.total);\n            });\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            text = settings.onLabelUpdate('warning', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onWarning.call(element, module.value, module.total);\n            });\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            text = settings.onLabelUpdate('error', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            $bar.one(transitionEnd + eventNamespace, function() {\n              settings.onError.call(element, module.value, module.total);\n            });\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            if(!module.has.progressPoll()) {\n              module.debug('First update in progress update interval, immediately updating', value);\n              module.update.progress(value);\n              module.create.progressPoll();\n            }\n            else {\n              module.debug('Updated within interval, setting next update to use new value', value);\n              module.set.nextValue(value);\n            }\n          },\n          nextValue: function(value) {\n            module.nextValue = value;\n          }\n        },\n\n        update: {\n          toNextValue: function() {\n            var\n              nextValue = module.nextValue\n            ;\n            if(nextValue) {\n              module.debug('Update interval complete using last updated value', nextValue);\n              module.update.progress(nextValue);\n              module.remove.nextValue();\n            }\n          },\n          progress: function(value) {\n            var\n              percentComplete\n            ;\n            value = module.get.numericValue(value);\n            if(value === false) {\n              module.error(error.nonNumeric, value);\n            }\n            value = module.get.normalizedValue(value);\n            if( module.has.total() ) {\n              module.set.value(value);\n              percentComplete = (value / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = value;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration       : 300,\n\n  updateInterval : 'auto',\n\n  autoSuccess    : true,\n  showActivity   : true,\n  limitValues    : true,\n\n  label          : 'percent',\n  precision      : 0,\n  framerate      : (1000 / 30), /// 30 fps\n\n  percent        : false,\n  total          : false,\n  value          : false,\n\n  onLabelUpdate : function(state, text, value, total){\n    return text;\n  },\n  onChange      : function(percent, value, total){},\n  onSuccess     : function(total){},\n  onActive      : function(value, total){},\n  onError       : function(value, total){},\n  onWarning     : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        initialLoad,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.initialLoad();\n          module.set.rating( module.get.initialRating() );\n          module.remove.initialLoad();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          }\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .addBack()\n                  .addClass(className.active)\n              ;\n            }\n            if(!module.is.initialLoad()) {\n              settings.onRate.call(element, rating);\n            }\n          },\n          initialLoad: function() {\n            initialLoad = true;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  slent         : false,\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  fireOnInit    : false,\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        regExp          = settings.regExp,\n        fields          = settings.fields,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $prompt         = $module.find(selector.prompt),\n        $searchButton   = $module.find(selector.searchButton),\n        $results        = $module.find(selector.results),\n        $result         = $module.find(selector.result),\n        $category       = $module.find(selector.category),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        disabledBubbled = false,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.debug('Refreshing selector cache');\n          $prompt         = $module.find(selector.prompt);\n          $searchButton   = $module.find(selector.searchButton);\n          $category       = $module.find(selector.category);\n          $results        = $module.find(selector.results);\n          $result         = $module.find(selector.result);\n        },\n\n        refreshResults: function() {\n          $results = $module.find(selector.results);\n          $result  = $module.find(selector.result);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.query, settings.searchDelay);\n          },\n          focus: function() {\n            module.set.focus();\n            if( module.has.minimumCharacters() ) {\n              module.query();\n              if( module.can.show() ) {\n                module.showResults();\n              }\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click.close' + eventNamespace, selector.results, function(event) {\n                  if(module.is.inMessage(event) || disabledBubbled) {\n                    $prompt.focus();\n                    return;\n                  }\n                  disabledBubbled = false;\n                  if( !module.is.animating() && !module.is.hidden()) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.is('a[href]')\n                  ? $result\n                  : $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  disabledBubbled = true;\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result      = $module.find(selector.result),\n            $category    = $module.find(selector.category),\n            currentIndex = $result.index( $result.filter('.' + className.active) ),\n            resultSize   = $result.length,\n\n            keyCode      = event.which,\n            keys         = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.trigger.blur();\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function(searchTerm) {\n            var\n              apiSettings = {\n                debug             : settings.debug,\n                on                : false,\n                cache             : true,\n                action            : 'search',\n                urlData           : {\n                  query : searchTerm\n                },\n                onSuccess         : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                },\n                onAbort           : function(response) {\n                },\n                onFailure         : function() {\n                  module.displayMessage(error.serverError);\n                },\n                onError           : module.error\n              },\n              searchHTML\n            ;\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.verbose('Setting up API request', apiSettings);\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          inMessage: function(event) {\n            return (event.target && $(event.target).closest(selector.message).length > 0);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        trigger: {\n          blur: function() {\n            var\n              events        = document.createEvent('HTMLEvents'),\n              promptElement = $prompt[0]\n            ;\n            if(promptElement) {\n              module.verbose('Triggering native blur event');\n              events.initEvent('blur', false, false);\n              promptElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        select: {\n          firstResult: function() {\n            module.verbose('Selecting first result');\n            $result.first().addClass(className.active);\n          }\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function() {\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm);\n              }\n              else {\n                module.error(error.source);\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm) {\n            if($module.api('is loading')) {\n              $module.api('abort');\n            }\n            module.setup.api(searchTerm);\n            $module\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          if(html) {\n            $results\n              .html(html)\n            ;\n            module.refreshResults();\n            if(settings.selectFirstResult) {\n              module.select.firstResult();\n            }\n            module.showResults();\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        showResults: function() {\n          if(!module.is.visible()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function() {\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else if(settings.showNoResults) {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name              : 'Search',\n  namespace         : 'search',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // template to use (specified in settings.templates)\n  type              : 'standard',\n\n  // minimum characters required to search\n  minCharacters     : 1,\n\n  // whether to select first result after searching automatically\n  selectFirstResult : false,\n\n  // API config\n  apiSettings       : false,\n\n  // object to search\n  source            : false,\n\n  // fields to search\n  searchFields   : [\n    'title',\n    'description'\n  ],\n\n  // field to display in standard results template\n  displayField   : '',\n\n  // whether to include fuzzy results in local search\n  searchFullText : true,\n\n  // whether to add events to prompt automatically\n  automatic      : true,\n\n  // delay before hiding menu after blur\n  hideDelay      : 0,\n\n  // delay before searching\n  searchDelay    : 200,\n\n  // maximum results returned from local\n  maxResults     : 7,\n\n  // whether to store lookups in local cache\n  cache          : true,\n\n  // whether no results errors should be shown\n  showNoResults  : true,\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    message      : '.results > .message',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newWidth    = (settings.width == 'next')\n                ? $nextSide.outerWidth(true)\n                : (settings.width == 'initial')\n                  ? $module.width()\n                  : settings.width,\n              newHeight    = (settings.height == 'next')\n                ? $nextSide.outerHeight(true)\n                : (settings.height == 'initial')\n                  ? $module.height()\n                  : settings.height\n            ;\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            $clone.remove();\n            if(settings.width != 'auto') {\n              $module.css('width', newWidth + settings.jitter);\n              module.verbose('Specifying width during animation', newWidth);\n            }\n            if(settings.height != 'auto') {\n              $module.css('height', newHeight + settings.jitter);\n              module.verbose('Specifying height during animation', newHeight);\n            }\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              var\n                transform = module.get.transform.up()\n              ;\n              module.set.stageSize();\n              module.stage.above();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              var\n                transform = module.get.transform.down()\n              ;\n              module.set.stageSize();\n              module.stage.below();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              var\n                transform = module.get.transform.left()\n              ;\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              var\n                transform = module.get.transform.right()\n              ;\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // hide all debug content\n  silent     : false,\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)\n  jitter     : 0,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // width during animation, can be set to 'auto', initial', 'next' or pixel amount\n  width: 'initial',\n\n  // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount\n  height: 'initial',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          if(module.is.ios()) {\n            module.set.ios();\n          }\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n\n        documentObserver,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            observer         = new MutationObserver(module.event.changed);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe($context[0], {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          $container = $module.offsetParent();\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu', mutations);\n              module.refresh();\n            }, 100);\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits : ( element.height < scrollContext.height ),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n            module.set.size();\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n\n          if(elementVisible) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  silent         : false,\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  jitter         : 5, // will only set container height if difference between context and container is larger than this number\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(evaluateScripts) {\n              module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n              $tab.html(html);\n            }\n            else {\n              module.debug('Updating HTML', tabPath, html);\n              tab.innerHTML = html;\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  if(settings.cacheType == 'response') {\n                    module.cache.add(fullTabPath, response);\n                  }\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  if(settings.cacheType != 'response') {\n                    module.cache.add(fullTabPath, $tab.html());\n                  }\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(settings.evaluateScripts == 'once') {\n                module.update.content(tabPath, cachedContent, false);\n              }\n              else {\n                module.update.content(tabPath, cachedContent);\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab          = module.get.tabElement(tabPath),\n              $deactiveTabs = (settings.deactivate == 'siblings')\n                ? $tab.siblings($tabs)\n                : $tabs.not($tab),\n              isActive      = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n              ;\n              $deactiveTabs\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation         = module.get.navElement(tabPath),\n              $deactiveNavigation = (settings.deactivate == 'siblings')\n                ? $navigation.siblings($allModules)\n                : $allModules.not($navigation),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n              ;\n              $deactiveNavigation\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,      // use browser history\n  historyType     : 'hash',     // #/ or html5 state\n  path            : false,      // base path of url\n\n  context         : false,      // specify a context that tabs must appear inside\n  childrenOnly    : false,      // use only tabs that are children of context\n  maxDepth        : 25,         // max depth a tab can be nested\n\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\n\n  alwaysRefresh   : false,      // load tab content new every tab click\n  cache           : true,       // cache the content requests to pull locally\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\n  ignoreFirstLoad : false,      // don't load remote content on first load\n\n  apiSettings     : false,      // settings for api call\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function() {\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if($module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists,\n              displayType\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              displayType = $clone\n                .attr('class', elementClass)\n                .removeAttr('style')\n                .removeClass(className.hidden)\n                .removeClass(className.visible)\n                .show()\n                .css('display')\n              ;\n              module.verbose('Determining final display state', displayType);\n              module.save.displayType(displayType);\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // hide all output from this component regardless of other settings\n  silent        : false,\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nvar\n  window = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return response;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          expectingJSON: function() {\n            return settings.dataType === 'json' || settings.dataType === 'jsonp';\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request)\n              ? (module.request.state() == 'pending')\n              : false\n            ;\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? module.is.expectingJSON()\n                    ? settings.onResponse.call(context, $.extend(true, {}, response))\n                    : settings.onResponse.call(context, response)\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n                return true;\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error') {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr, ajaxSettings);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (module.is.expectingJSON())\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            if(runSettings === false) {\n              return runSettings;\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.4 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n\n    moduleCount    = $allModules.length,\n    loadedCount    = 0\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        contextObserver,\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          if(contextObserver) {\n            contextObserver.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scroll'       + eventNamespace, module.event.scroll)\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n            module.remove.placeholder();\n          }\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            contextObserver = new MutationObserver(module.event.contextChanged);\n            observer        = new MutationObserver(module.event.changed);\n            contextObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            module.verbose('DOM tree modified, updating visibility calculations');\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu');\n              module.refresh();\n            }, 100);\n          },\n          contextChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src, function() {\n                    loadedCount++;\n                    if(loadedCount == moduleCount) {\n                      settings.onAllLoaded.call(this);\n                    }\n                    settings.onLoad.call(this);\n                  });\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : settings.zIndex\n              })\n            ;\n            settings.onFixed.call(element);\n          },\n          image: function(src, callback) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined ) {\n                $module.transition(settings.transition, settings.duration, callback);\n              }\n              else {\n                $module.fadeIn(settings.duration, callback);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        resetFixed: function () {\n          module.remove.fixed();\n          module.remove.occurred();\n        },\n\n        reset: function() {\n          module.verbose('Resetting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n            settings.onUnfixed.call(element);\n          },\n          placeholder: function() {\n            module.debug('Removing placeholder content');\n            if($placeholder) {\n              $placeholder.remove();\n            }\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topVisible       = (screen.bottom >= element.top);\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomVisible    = (screen.bottom >= element.bottom);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // z-index to use with visibility 'fixed'\n  zIndex                 : '10',\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // special callbacks for image\n  onLoad                 : function() {},\n  onAllLoaded            : function() {},\n\n  // special callbacks for fixed position\n  onFixed                : function() {},\n  onUnfixed              : function() {},\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "css/stylesheet-customizations.scss",
    "content": "---\n# Provide front matter so Jekyll processes this file as SASS.\n---\n\n// Put your custom CSS here if you want to override the defaults.\n// Here are some common customizations for colors\n\n// Customize the background color\nbody {\n  // background-color: #f2f2f2;;\n}\n\n// Customize the menubar color\n.ui.menu {\n  // background: $background-start;\n}\n\n// Customize the home page icon colors\n.icon-color {\n  // color: silver;\n}\n\n"
  },
  {
    "path": "css/stylesheet-default.scss",
    "content": "---\n# Provide front matter so Jekyll processes this file as SASS.\n---\n@charset \"utf-8\";\n\n// Default CSS.\n// Don't edit this file.  Put your changes in stylesheet-customizations.scss\n\n// Default background color\nbody {\n  background-color: #f2f2f2;\n}\n\n// Default menubar color\n.ui.menu {\n  background: lighten(silver, 10%);\n}\n\n// Default home page icon color\n.icon-color {\n  color: darken(silver, 40%);\n}\n\n\n// Prefer space between list items in screen mode.\n.list-padding {\n  ul li { padding: 5px 0px; }\n  ol li { padding: 5px 0px; }\n}\n\n// This class is used in the prebuilt bio themes.\n.no-bottom {\n  margin-bottom: 0px !important;\n  padding-bottom: 0px !important;\n}\n"
  },
  {
    "path": "essays/2015-08-26.md",
    "content": "---\nlayout: essay\ntype: essay\ntitle: Igniting the fire\n# All dates must be YYYY-MM-DD format!\ndate: 2015-08-26\nlabels:\n  - Software Engineering\n  - Learning\n---\n\n<img class=\"ui tiny left circular floated image\" src=\"../images/paintbrushes.jpg\">\n\nEver since I first grasped a paintbrush, I’ve always been eager to learn about design. Design is such a complex concept. For example, when looking at abstract art, its meaning can be completely different for different people. It motivates a person to think thoughtfully and has the potential to submerge them in a sea of imagination. It’s that special relationship between the viewer and the art that makes something as technical as software engineering interesting to me.\n\n<img class=\"ui tiny left circular floated image\" src=\"../images/design-technology.jpg\">\n\nI never used to think that design and technology went hand in hand.  Thus, learning about software engineering and the role of design has been incredibly interesting to me. Design, implementation, and management are just some of the many things I wish to learn more about. Good art, in a way, makes a person question it. They become joined in the idea of visualization – where captivation meets inspiration.\n\n<img class=\"ui tiny left circular floated image\" src=\"../images/software-code.jpg\">\n\nI am now starting to take a Software Engineering class. I hope to learn a lot through the course, but I know it will be just the beginning of my journey. By the time I’m done with it, I hope I’ve learned enough to take the next step in my life as a developer. But until then, my fire will keep on burning.\n\n"
  },
  {
    "path": "essays/2015-09-08.md",
    "content": "---\nlayout: essay\ntype: essay\ntitle: Smart Questions, Good Answers\n# All dates must be YYYY-MM-DD format!\ndate: 2015-09-08\nlabels:\n  - Questions\n  - Answers\n  - StackOverflow\n---\n\n<img class=\"ui medium left floated image\" src=\"../images/rtfm.png\">\n\n## Is there such thing as a stupid question?\n\nI’ve had instructors address a whole class and say, “There’s no such thing as a stupid question.” I now know that is in fact not true because I’ve challenged the statement and received the appropriate dumb-stricken, annoyed look. There are definitely stupid questions, and along with that, usually unhelpful answers. Though we all might be guilty of being callous and making people victim to our poorly formed questions, there are steps we can take to ask smarter questions that hopefully don’t illicit the dreaded “rtfm” or “stfw” response.\n\n## What’s a smart question?\n\nStack Overflow, a question and answer site for programmers, is a great resource for anyone who may have issues with code or who may simply want to learn new or different methods of doing something. There I found examples of good questions and bad questions, which could probably be improved.\n\nIn the following example, we examine the components of a decent question. In this case, the asker is trying to figure out a way to get the date of the previous month in Python.\n\n```\nQ: python date of the previous month\n\nI am trying to get the date of the previous month with python. Here is what i've tried:\n\nstr( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )\n\nHowever, this way is bad for 2 reasons: First it returns 20122 for the February of 2012 (instead of 201202) \nand secondly it will return 0 instead of 12 on January.\n\nI have solved this trouble in bash with:\n\necho $(date -d\"3 month ago\" \"+%G%m%d\")\n\nI think that if bash has a built-in way for this purpose, then python, much more equipped, should provide something \nbetter than forcing writing one's own script to achieve this goal. Of course i could do something like:\n\nif int(time.strftime('%m')) == 1:\n    return '12'\nelse:\n    if int(time.strftime('%m')) < 10:\n        return '0'+str(time.strftime('%m')-1)\n    else:\n        return str(time.strftime('%m') -1)\n        \nI have not tested this code and i don't want to use it anyway (unless I can't find any other way:/)\n\nThanks for your help!\n```\n\nWhile the heading of his question could be better, it does convey what he’s trying to figure out. Usually something as brief as “python date of previous month” is what other users would enter in as search terms on Google, making it easily found. Another good thing about the question is that it’s not just a question. The asker shows what he or she has done and that he or she has put in some effort to answer the question. And while it may not be as important as the question itself, the asker shows courtesy, which does increase the chance of getting an answer.\n\n```\nA: datetime and the datetime.timedelta classes are your friend.\n\n1. find today\n2. use that to find the first day of this month.\n3. use timedelta to backup a single day, to the last day of the previous month.\n4. print the YYYYMM string you're looking for.\n\nLike this:\n\n >>> import datetime\n >>> today = datetime.date.today()\n >>> first = datetime.date(day=1, month=today.month, year=today.year)\n >>> lastMonth = first - datetime.timedelta(days=1)\n >>> print lastMonth.strftime(\"%Y%m\")\n 201202\n >>>\n\n```\n \nThe asker received six possible answers, and he or she was successful in inciting discussion from multiple users. The answers themselves were clear and were devoid of the rumored sarcasm and hostility of “hackers.” Since I myself have referenced this page and found it useful, I can confidently say that it is a good question.\n\n## The foolproof way to get ignored.\n\nWhile there are decent questions that benefit everyone, there are those one can ask to create an entirely different effect. In the following example, a user asks how he would, in short, create a desktop application with Facebook.\n\n```\nQ: Facebook Desktop Notifier\n\nI am a beginner programmer that have never used anything other than what's included in a language.\n\nI am trying to create a desktop application that notifies me anytime I get an update onfacebook. \nHow should go about doing this? Thanks in advance.\n\nedit Sorry I was not clear. Is there any way to make a DESKTOP application with facebook?\n```\n\nA simple “yes” would have answered the question, but we know that’s not the sort of answer he or she is looking for. Fortunately, someone kindly responded with a link to Facebook’s developer website. The asker should have done more research on his or her potential project. Then further down the road, he or she could have asked more specific and detailed questions that wouldn’t require a thousand-paged response for a sufficient answer.\n\n## Conclusion\n\nWhen we rely on others’ generosity and expertise to provide answers to our questions, it should hold that the question we ask should be one that leads to efficient and effective help that not only benefits us, but also the people we ask and others who might ask the same question in the future. Thus, if you have a question… make it a smart one! Asking questions may not always get you the best answer, but asking them in a way that will make others want to answer them will increase the success of finding a good solution and make it a positive experience on all sides."
  },
  {
    "path": "essays/2016-02-06.md",
    "content": "---\nlayout: essay\ntype: essay\ntitle: The difficult things will always be difficult\n# All dates must be YYYY-MM-DD format!\ndate: 2016-02-06\nlabels:\n  - Engineering\n---\n\n<img class=\"ui tiny right spaced image\" src=\"../images/degree_difficulty.jpg\">*Difficulty: a thing that is hard to accomplish, deal with, or understand.*\n\nOne of my friends asked the question earlier last week -- why is it so hard to be an officer for the student branch? Why is so hard compared to working at my on-campus job? This question came after he struggled a little with bookkeeping for the student organization.\n\nNow I gave him the standard answer - being an officer of an organization requires that you manage your time between school and work. There isn't anyone telling you what to do. It's the answer any good mentor would give, and is mostly true.\n\nBut the more I though about it, the more I wondered to myself...damn that's a really great question; it's one that deserves some more thought. Most people I think stop at the answer I gave previously - he obviously isn't managing his time properly.\n\nHere's what I think: the difficult things will always be difficult.\n\n## In the context of programming\n\nIn the context of programming, this has always been true. The difficult problems have always been different, although changes in technology can change the landscape quite a bit. \"Business\" type applications are the things that come to mind for me. Those types of applications are usually coupled in some way with people ... and people are awfully hard to deal with!\n\nConsider that one of the most popular content management systems is also considered the most horrible - Wordpress. But really, is there anything that fills that need? If it was so easy in the first place, where is the solution? Where's the magic CMS that is designed well enough that everyone hops on the boat to use it?\n\nSome things are just difficult - building applications that humans use is hard, and will probably be hard for at least the near future.\n\n## In the context of engineering\n\nEver hear people ragging on engineering companies for delivering late and way over budget? Well, some engineering jobs are really difficult, especially if the requirements and funding are undulating underneath you. Because of the nature of the problem, sometimes engineering firms require large amounts of engineers and workers, inviting further problems and delays.\n\nThe Honolulu Rail project at home has become this sort of poster child of failure, budget overrun and overall incompetence in Hawaii. Well, working though regulatory boards and fiscal procedures in Hawaii seems like it's a mind bogglingly difficult job to do. Granted, there might be some fishy stuff going on, but I refuse to believe that everyone is involved for nefarious reasons.\n\nThe problem of creating an unprecedented public transportation backbone on an island is difficult! I'm not sure we would have done it right, even if the best people were involved.\n\n## In the context of relationships\n\nSo in the end, we realize that all engineering and programming is there for a reason - to serve human needs. Maybe that's why those things are difficult, because they both involve humans and are for humans.\n\nRelationships, regardless if they're romantic or not take work. Humans are fickle creatures and relationships can come and go with the wind. To properly maintain something over time requires work. Family takes work. Marriage takes work. We live to figure out what works and what doesn't and hope that as we move forward we're improving.\n\nRelationships have always been difficult, and by nature will continue to be so.\n\n## Okay!\n\nSo back to the original premise; why is being one of the club officers so difficult?\n\nAnd the final answer - it's supposed to be difficult, and it's supposed to challenge you, just like everything else that humans do that is difficult: programming, engineering, engaging in relationships, pondering the universe, etc.\n\nUltimately the question you should really ask yourself if something if particularly difficult is then \"is it worth it\"? That is something that is context specific and only you can answer yourself."
  },
  {
    "path": "essays/index.html",
    "content": "---\nlayout: essays\n---\n\n{% include {{ site.theme-essays }} %}"
  },
  {
    "path": "index.html",
    "content": "---\nlayout: default\n---\n\n{% include {{ site.theme-home }} %}"
  },
  {
    "path": "js/semantic-ui/accordion.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n"
  },
  {
    "path": "js/semantic-ui/api.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return false;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request && module.request.state() == 'pending');\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (settings.dataType !== 'json' && settings.dataType !== 'jsonp') || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? settings.onResponse.call(context, $.extend(true, {}, response))\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error')  {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (settings.dataType == 'json' || settings.dataType == 'jsonp')\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( !module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/checkbox.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modfying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modfying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/colorize.js",
    "content": "/*!\n * # Semantic UI 2.0.0 - Colorize\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n  \"use strict\";\n\n  $.fn.colorize = function(parameters) {\n    var\n      settings          = ( $.isPlainObject(parameters) )\n        ? $.extend(true, {}, $.fn.colorize.settings, parameters)\n        : $.extend({}, $.fn.colorize.settings),\n      // hoist arguments\n      moduleArguments = arguments || false\n    ;\n    $(this)\n      .each(function(instanceIndex) {\n\n        var\n          $module         = $(this),\n\n          mainCanvas      = $('<canvas />')[0],\n          imageCanvas     = $('<canvas />')[0],\n          overlayCanvas   = $('<canvas />')[0],\n\n          backgroundImage = new Image(),\n\n          // defs\n          mainContext,\n          imageContext,\n          overlayContext,\n\n          image,\n          imageName,\n\n          width,\n          height,\n\n          // shortucts\n          colors    = settings.colors,\n          paths     = settings.paths,\n          namespace = settings.namespace,\n          error     = settings.error,\n\n          // boilerplate\n          instance   = $module.data('module-' + namespace),\n          module\n        ;\n\n        module = {\n\n          checkPreconditions: function() {\n            module.debug('Checking pre-conditions');\n\n            if( !$.isPlainObject(colors) || $.isEmptyObject(colors) ) {\n              module.error(error.undefinedColors);\n              return false;\n            }\n            return true;\n          },\n\n          async: function(callback) {\n            if(settings.async) {\n              setTimeout(callback, 0);\n            }\n            else {\n              callback();\n            }\n          },\n\n          getMetadata: function() {\n            module.debug('Grabbing metadata');\n            image     = $module.data('image') || settings.image || undefined;\n            imageName = $module.data('name')  || settings.name  || instanceIndex;\n            width     = settings.width        || $module.width();\n            height    = settings.height       || $module.height();\n            if(width === 0 || height === 0) {\n              module.error(error.undefinedSize);\n            }\n          },\n\n          initialize: function() {\n            module.debug('Initializing with colors', colors);\n            if( module.checkPreconditions() ) {\n\n              module.async(function() {\n                module.getMetadata();\n                module.canvas.create();\n\n                module.draw.image(function() {\n                  module.draw.colors();\n                  module.canvas.merge();\n                });\n                $module\n                  .data('module-' + namespace, module)\n                ;\n              });\n            }\n          },\n\n          redraw: function() {\n            module.debug('Redrawing image');\n            module.async(function() {\n              module.canvas.clear();\n              module.draw.colors();\n              module.canvas.merge();\n            });\n          },\n\n          change: {\n            color: function(colorName, color) {\n              module.debug('Changing color', colorName);\n              if(colors[colorName] === undefined) {\n                module.error(error.missingColor);\n                return false;\n              }\n              colors[colorName] = color;\n              module.redraw();\n            }\n          },\n\n          canvas: {\n            create: function() {\n              module.debug('Creating canvases');\n\n              mainCanvas.width     = width;\n              mainCanvas.height    = height;\n              imageCanvas.width    = width;\n              imageCanvas.height   = height;\n              overlayCanvas.width  = width;\n              overlayCanvas.height = height;\n\n              mainContext    = mainCanvas.getContext('2d');\n              imageContext   = imageCanvas.getContext('2d');\n              overlayContext = overlayCanvas.getContext('2d');\n\n              $module\n                .append( mainCanvas )\n              ;\n              mainContext    = $module.children('canvas')[0].getContext('2d');\n            },\n            clear: function(context) {\n              module.debug('Clearing canvas');\n              overlayContext.fillStyle = '#FFFFFF';\n              overlayContext.fillRect(0, 0, width, height);\n            },\n            merge: function() {\n              if( !$.isFunction(mainContext.blendOnto) ) {\n                module.error(error.missingPlugin);\n                return;\n              }\n              mainContext.putImageData( imageContext.getImageData(0, 0, width, height), 0, 0);\n              overlayContext.blendOnto(mainContext, 'multiply');\n            }\n          },\n\n          draw: {\n\n            image: function(callback) {\n              module.debug('Drawing image');\n              callback = callback || function(){};\n              if(image) {\n                backgroundImage.src    = image;\n                backgroundImage.onload = function() {\n                  imageContext.drawImage(backgroundImage, 0, 0);\n                  callback();\n                };\n              }\n              else {\n                module.error(error.noImage);\n                callback();\n              }\n            },\n\n            colors: function() {\n              module.debug('Drawing color overlays', colors);\n              $.each(colors, function(colorName, color) {\n                settings.onDraw(overlayContext, imageName, colorName, color);\n              });\n            }\n\n          },\n\n          debug: function(message, variableName) {\n            if(settings.debug) {\n              if(variableName !== undefined) {\n                console.info(settings.name + ': ' + message, variableName);\n              }\n              else {\n                console.info(settings.name + ': ' + message);\n              }\n            }\n          },\n          error: function(errorMessage) {\n            console.warn(settings.name + ': ' + errorMessage);\n          },\n          invoke: function(methodName, context, methodArguments) {\n            var\n              method\n            ;\n            methodArguments = methodArguments || Array.prototype.slice.call( arguments, 2 );\n\n            if(typeof methodName == 'string' && instance !== undefined) {\n              methodName = methodName.split('.');\n              $.each(methodName, function(index, name) {\n                if( $.isPlainObject( instance[name] ) ) {\n                  instance = instance[name];\n                  return true;\n                }\n                else if( $.isFunction( instance[name] ) ) {\n                  method = instance[name];\n                  return true;\n                }\n                module.error(settings.error.method);\n                return false;\n              });\n            }\n            return ( $.isFunction( method ) )\n              ? method.apply(context, methodArguments)\n              : false\n            ;\n          }\n\n        };\n        if(instance !== undefined && moduleArguments) {\n          // simpler than invoke realizing to invoke itself (and losing scope due prototype.call()\n          if(moduleArguments[0] == 'invoke') {\n            moduleArguments = Array.prototype.slice.call( moduleArguments, 1 );\n          }\n          return module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );\n        }\n        // initializing\n        module.initialize();\n      })\n    ;\n    return this;\n  };\n\n  $.fn.colorize.settings = {\n    name      : 'Image Colorizer',\n    debug     : true,\n    namespace : 'colorize',\n\n    onDraw    : function(overlayContext, imageName, colorName, color) {},\n\n    // whether to block execution while updating canvas\n    async     : true,\n    // object containing names and default values of color regions\n    colors    : {},\n\n    metadata: {\n      image : 'image',\n      name  : 'name'\n    },\n\n    error: {\n      noImage         : 'No tracing image specified',\n      undefinedColors : 'No default colors specified.',\n      missingColor    : 'Attempted to change color that does not exist',\n      missingPlugin   : 'Blend onto plug-in must be included',\n      undefinedHeight : 'The width or height of image canvas could not be automatically determined. Please specify a height.'\n    }\n\n  };\n\n})( jQuery, window , document );\n"
  },
  {
    "path": "js/semantic-ui/dimmer.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.variation) {\n            module.debug('Creating dimmer with variation', settings.variation);\n            $element.addClass(settings.variation);\n          }\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );"
  },
  {
    "path": "js/semantic-ui/dropdown.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          if(selectObserver) {\n            selectObserver.disconnect();\n          }\n          if(menuObserver) {\n            menuObserver.disconnect();\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            });\n            menuObserver = new MutationObserver(function(mutations) {\n              module.debug('Menu modified, updating selector cache');\n              module.refresh();\n            });\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          module.filter(query);\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug : settings.debug,\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown')\n                $module.addClass(className.disabled)\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.is.multiple() && !module.has.search() && module.is.allFiltered()) {\n              return true;\n            }\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('click'     + eventNamespace, selector.search, module.show)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n                .on('blur'      + eventNamespace, module.event.blur)\n              ;\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              module.select.firstUnfiltered();\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(!settings.allowAdditions) {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration        : false,\n              throttle             : settings.throttle,\n              urlData              : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.regExp(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function() {\n          if( module.is.search() && !module.is.focusedOnSearch() ) {\n            $search[0].focus();\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.size() > 0)\n          ;\n          if( module.has.query() ) {\n            if(hasSelected) {\n              module.debug('Forcing partial selection to selected item', $selectedItem);\n              module.event.item.click.call($selectedItem);\n              return;\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n          module.hide();\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module) && !module.is.focusedOnSearch()) {\n              module.focusSearch();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          // prevents focus callback from occurring on mousedown\n          mousedown: function() {\n            activated = true;\n          },\n          mouseup: function() {\n            activated = false;\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n                module.show();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(!itemActivated && !pageLostFocus) {\n                if(module.is.multiple()) {\n                  module.remove.activeLabel();\n                  module.hide();\n                }\n                else if(settings.forceSelection) {\n                  module.forceSelection();\n                }\n                else {\n                  module.hide();\n                }\n              }\n              else if(pageLostFocus) {\n                if(settings.forceSelection) {\n                  module.forceSelection();\n                }\n              }\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n              event.stopPropagation();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          menu: {\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $subMenu    = $(this).children(selector.menu),\n                $otherMenus = $(this).siblings(selector.item).children(selector.menu)\n              ;\n              if( $subMenu.length > 0 ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false,  $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false,  $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            touchend: function() {\n            },\n            click: function (event) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.remove.searchTerm();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').andSelf()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu             = $selectedItem.children(selector.menu),\n                $parentMenu          = $selectedItem.closest(selector.menu),\n                inVisibleMenu        = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu           = ($subMenu.length> 0),\n                hasSelectedItem      = ($selectedItem.length > 0),\n                selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed     = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // left arrow (hide sub-menu)\n                if(pressedKey == keys.leftArrow) {\n\n                  isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                  if(isSubMenuItem) {\n                    module.verbose('Left key pressed, closing sub-menu');\n                    module.animate.hide(false,  $parentMenu);\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $parentMenu\n                      .closest(selector.item)\n                        .addClass(className.selected)\n                    ;\n                    event.preventDefault();\n                  }\n                }\n\n                // right arrow (show sub-menu)\n                if(pressedKey == keys.rightArrow) {\n                  if(hasSubMenu) {\n                    module.verbose('Right key pressed, opening sub-menu');\n                    module.animate.show(false,  $subMenu);\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $subMenu\n                      .find(selector.item).eq(0)\n                        .addClass(className.selected)\n                    ;\n                    event.preventDefault();\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( module.is.selection() && !module.is.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(this, text, value);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(this, text, value);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target    = $(event.target),\n              $label     = $target.closest(selector.siblingLabel),\n              notOnLabel = ($module.find($label).length === 0),\n              notInMenu  = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(this) ) ) {\n              module.set.selected(value, $(this));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value) {\n            // mimics action.activate but does not select text\n            module.action.activate.call(this);\n          },\n\n          combo: function(text, value) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(this));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value) {\n            module.set.value(value);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(characterCount) {\n            return (characterCount * settings.glyphWidth) + 'em';\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value)\n            ;\n            // prevents placeholder element from being selected when multiple\n            if($.isArray(value) && value.length === 1 && value[0] === '') {\n              return '';\n            }\n            return value;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              remoteValues = {};\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                remoteValues[value] = (name)\n                  ? name\n                  : value\n                ;\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retreiving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retreived values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occuring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings) {\n              if(settings.saveRemoteData) {\n                module.restore.remoteValues();\n              }\n              else {\n                module.clearValue();\n              }\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple()) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(searchValue.length),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              if(module.is.onScreen($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.addClass(className.upward);\n          },\n          value: function(value, text, $selected) {\n            var\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', value, currentValue);\n              internalChange = true;\n              $input\n                .val(value)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', value, $input);\n              if(value !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-value', value)\n              .html(templates.label(value, text))\n            ;\n            $label = settings.onLabelCreate.call($label, value, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', value);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              $option   = $input.find('option[value=\"' + value + '\"]'),\n              hasOption = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer', value);\n            }\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', value)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            $item\n              .removeClass(className.selected)\n            ;\n            if(hasUserSuggestion) {\n              html = settings.templates.addition( module.add.variables(message.addResult, value) );\n              $addition\n                .html(html)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n                .addClass(className.selected)\n              ;\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n                .addClass(className.selected)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.removeClass(className.upward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n          },\n          optionValue: function(value) {\n            var\n              $option   = $input.find('option[value=\"' + value + '\"]'),\n              hasOption = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer', value);\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', value);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-value=\"' + value +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          search: function() {\n            return ($search.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              $labels = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-value=\"' + value +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            return ($item.filter(selector.unselectable).length === $item.length);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          onScreen: function($subMenu) {\n            var\n              $currentMenu   = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen = {},\n              calculations\n            ;\n            $currentMenu.addClass(className.loading);\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      if(settings.direction == 'auto') {\n                        module.remove.upward($subMenu);\n                      }\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          regExp: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  saveRemoteData         : true,      // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n  throttle               : 200,       // How long to wait after last user input to search remotely\n\n  context                : window,      // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n  allowAdditions         : false,      // whether multiple select should allow user added values\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.0714,     // widest glyph width in em (W is 1.0714 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results', // grouping for api results\n    values       : 'values', // grouping for all dropdown values\n    name         : 'name',   // displayed dropdown text\n    value        : 'value'   // actual dropdown value\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      html += '<div class=\"item\" data-value=\"' + option[fields.value] + '\">' + option[fields.name] + '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/embed.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n            .data(metadata.url, url)\n          ;\n          module.create();\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.colors || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.colors || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      return ''\n        + '<iframe src=\"' + url + '?' + parameters + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : true,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/form.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          valid: function() {\n            var\n              allValid = true\n            ;\n            module.verbose('Checking if form is valid');\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field  = $(this),\n                key     = event.which,\n                keyCode = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && $field.is(selector.input) && $field.not(selector.checkbox).length > 0 ) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                module.validate.form.call(module, event, true);\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group)\n              ;\n              if(settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) ) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.form.call(module, event, true);\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || !module.is.bracketedRule(rule)) {\n              return false;\n            }\n            return rule.type.match(settings.regExp.bracket)[1] + '';\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.size() == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields) {\n                  ruleKeys = Object.keys(parameters.fields);\n                  if( typeof parameters.fields[ruleKeys[0]] == 'string' || $.isArray(parameters.fields[ruleKeys[0]]) ) {\n                    $.each(parameters.fields, function(name, rules) {\n                      if(typeof rules == 'string') {\n                        rules = [rules];\n                      }\n                      parameters.fields[name] = {\n                        rules: []\n                      };\n                      $.each(rules, function(index, rule) {\n                        parameters.fields[name].rules.push({ type: rule });\n                      });\n                    });\n                  }\n                }\n\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(isChecked) {\n                      values[name] = value;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        add: {\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.is.valid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName) {\n            var\n              identifier  = field.identifier || fieldName,\n              $field      = module.get.field(identifier),\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && $.trim($field.val()) === ''){\n              module.debug('Field is optional and empty. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              module.remove.prompt(identifier, fieldErrors);\n              settings.onValid.call($field);\n            }\n            else {\n              formErrors = formErrors.concat(fieldErrors);\n              module.add.prompt(identifier, fieldErrors);\n              settings.onInvalid.call($field, fieldErrors);\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d*(\\.)\\d+/,\n    email   : \"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\",\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      var\n        emailRegExp = new RegExp($.fn.form.settings.regExp.email, 'i')\n      ;\n      return emailRegExp.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/modal.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n            }\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer with settings', dimmerSettings);\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          deny: function() {\n            if(settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      module.add.keyboardShortcuts();\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    module.remove.keyboardShortcuts();\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find(':input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementNamespace, module.event.click)\n              ;\n            }\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/nag.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overriden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/popup.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if( !module.exists() && settings.preserve) {\n            module.create();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent();\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as activating element');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($popup)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          $window.off(elementNamespace);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          hideGracefully: function(event) {\n            // don't close on clicks inside popup\n            if(event && $(event.target).closest(selector.popup).length === 0) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popups  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2,8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.visible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement  = $target[0],\n              targetPosition = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              calculations = {},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                scroll: {\n                  top  : $window.scrollTop(),\n                  left : $window.scrollLeft()\n                },\n                width  : $window.width(),\n                height : $window.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left') , 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.scroll.top,\n              bottom : screen.scroll.top + screen.height,\n              left   : screen.scroll.left,\n              right  : screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            offset       = offset       || module.get.offset();\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !(target.element instanceof SVGGraphicsElement)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click'))   {\n              $document\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n              $context\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('touchstart' + elementNamespace, function(event) {\n                  module.verbose('Touched away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('click' + elementNamespace, function(event) {\n                  module.verbose('Clicked away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              $document\n                .off('scroll' + elementNamespace, module.hide)\n              ;\n              $context\n                .off('scroll' + elementNamespace, module.hide)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n              ;\n              openedWithTouch = false;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Removing close event from document');\n              $document\n                .off('click' + elementNamespace)\n              ;\n            }\n          }\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.visible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name         : 'Popup',\n\n  // module settings\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n  namespace    : 'popup',\n\n  // callback only when element added to dom\n  onCreate     : function(){},\n\n  // callback before element removed from dom\n  onRemove     : function(){},\n\n  // callback before show animation\n  onShow       : function(){},\n\n  // callback after show animation\n  onVisible    : function(){},\n\n  // callback before hide animation\n  onHide       : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable: function(){},\n\n  // callback after hide animation\n  onHidden     : function(){},\n\n  // when to show popup\n  on           : 'hover',\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position     : 'top left',\n\n  // name of variation to use\n  variation    : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content      : false,\n\n  // explicitly set html\n  html         : false,\n\n  // explicitly set title\n  title        : false,\n\n  // whether automatically close on clickaway when on click\n  closable     : true,\n\n  // automatically hide on scroll\n  hideOnScroll : 'auto',\n\n  // hide other popups on show\n  exclusive    : false,\n\n  // context to attach popups\n  context      : 'body',\n\n  // position to prefer when calculating new position\n  prefer       : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort   : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating',\n    dropdown  : 'dropdown',\n    fluid     : 'fluid',\n    loading   : 'loading',\n    popup     : 'ui popup',\n    position  : 'top left center bottom right',\n    visible   : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/progress.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.set.percent(0);\n          module.set.value(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n\n            newValue       = startValue + incrementValue;\n            maxValue       = module.get.total();\n\n            module.debug('Incrementing value', startValue, newValue, maxValue);\n            if(newValue > maxValue ) {\n              module.debug('Value cannot increment above total', maxValue);\n              newValue = maxValue;\n            }\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n\n            module.debug('Incrementing percentage by', startValue, newValue);\n            if(newValue > maxValue ) {\n              module.debug('Value cannot increment above 100 percent');\n              newValue = maxValue;\n            }\n          }\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n\n          if(newValue < 0) {\n            module.debug('Value cannot decrement below 0');\n            newValue = 0;\n          }\n          module.set.progress(newValue);\n        },\n\n        has: {\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.debug('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        is: {\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            $bar.one(transitionEnd + eventNamespace, animationCallback);\n            module.timer = setTimeout(animationCallback, settings.duration + 100);\n            animating = true;\n            module.interval = setInterval(module.set.labels, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.debug('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.debug('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.debug('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onActive.call(element, module.value, module.total);\n          },\n          success : function(text) {\n            text = text || settings.text.success;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onSuccess.call(element, module.total);\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onWarning.call(element, module.value, module.total);\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onError.call(element, module.value, module.total);\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            var\n              numericValue = module.get.numericValue(value),\n              percentComplete\n            ;\n            if(numericValue === false) {\n              module.error(error.nonNumeric, value);\n            }\n            if( module.has.total() ) {\n              module.set.value(numericValue);\n              percentComplete = (numericValue / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = numericValue;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration     : 300,\n\n  autoSuccess  : true,\n  showActivity : true,\n  limitValues  : true,\n\n  label        : 'percent',\n  precision    : 0,\n  framerate    : (1000 / 30), /// 30 fps\n\n  percent      : false,\n  total        : false,\n  value        : false,\n\n  onChange     : function(percent, value, total){},\n  onSuccess    : function(total){},\n  onActive     : function(value, total){},\n  onError      : function(value, total){},\n  onWarning    : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );"
  },
  {
    "path": "js/semantic-ui/rating.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.rating( module.get.initialRating() );\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .andSelf()\n                  .addClass(className.active)\n              ;\n            }\n            settings.onRate.call(element, rating);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/search.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        regExp          = settings.regExp,\n        fields          = settings.fields,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $prompt         = $module.find(selector.prompt),\n        $searchButton   = $module.find(selector.searchButton),\n        $results        = $module.find(selector.results),\n        $result         = $module.find(selector.result),\n        $category       = $module.find(selector.category),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.query, settings.searchDelay);\n          },\n          focus: function() {\n            module.set.focus();\n            if( module.has.minimumCharacters() ) {\n              module.query();\n              if( module.can.show() ) {\n                module.showResults();\n              }\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click', selector.results, function(event) {\n                  if( !module.is.animating() && !module.is.hidden() ) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result      = $module.find(selector.result),\n            $category    = $module.find(selector.category),\n            currentIndex = $result.index( $result.filter('.' + className.active) ),\n            resultSize   = $result.length,\n\n            keyCode      = event.which,\n            keys         = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.trigger.blur();\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug     : settings.debug,\n                on        : false,\n                cache     : 'local',\n                action    : 'search',\n                onError   : module.error\n              },\n              searchHTML\n            ;\n            module.verbose('First request, initializing API');\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        trigger: {\n          blur: function() {\n            var\n              events        = document.createEvent('HTMLEvents'),\n              promptElement = $prompt[0]\n            ;\n            if(promptElement) {\n              module.verbose('Triggering native blur event');\n              events.initEvent('blur', false, false);\n              promptElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function() {\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm);\n              }\n              else {\n                module.error(error.source);\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm) {\n            var\n              apiSettings = {\n                onSuccess : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                },\n                onFailure: function() {\n                  module.displayMessage(error.serverError);\n                },\n                urlData: {\n                  query: searchTerm\n                }\n              }\n            ;\n            if( !$module.api('get request') ) {\n              module.setup.api();\n            }\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.debug('Executing search', apiSettings);\n            module.cancel.query();\n            $module\n              .api('setting', apiSettings)\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          $results\n            .html(html)\n          ;\n          if( module.can.show() ) {\n            module.showResults();\n          }\n        },\n\n        showResults: function() {\n          if(!module.is.visible()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function() {\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name           : 'Search',\n  namespace      : 'search',\n\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  type           : 'standard',\n  // template to use (specified in settings.templates)\n\n  minCharacters  : 1,\n  // minimum characters required to search\n\n  apiSettings    : false,\n  // API config\n\n  source         : false,\n  // object to search\n\n  searchFields   : [\n    'title',\n    'description'\n  ],\n  // fields to search\n\n  displayField   : '',\n  // field to display in standard results template\n\n  searchFullText : true,\n  // whether to include fuzzy results in local search\n\n  automatic      : true,\n  // whether to add events to prompt automatically\n\n  hideDelay      : 0,\n  // delay before hiding menu after blur\n\n  searchDelay    : 200,\n  // delay before searching\n\n  maxResults     : 7,\n  // maximum results returned from local\n\n  cache          : true,\n  // whether to store lookups in local cache\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/shape.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newSize = {}\n            ;\n            module.set.currentStageSize();\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            newSize = {\n              width  : $nextSide.outerWidth(true),\n              height : $nextSide.outerHeight(true)\n            };\n            $clone.remove();\n            $module\n              .css(newSize)\n            ;\n            module.verbose('Resizing stage to fit new content', newSize);\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              module.set.stageSize();\n              module.stage.above();\n              module.animate( module.get.transform.up() );\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              module.set.stageSize();\n              module.stage.below();\n              module.animate( module.get.transform.down() );\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(module.get.transform.left() );\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(module.get.transform.right() );\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );"
  },
  {
    "path": "js/semantic-ui/sidebar.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          if(module.is.ios()) {\n            module.set.ios();\n          }\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/site.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n;(function ( $, window, document, undefined ) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/state.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/sticky.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          var\n            context = $context[0]\n          ;\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                module.verbose('DOM tree modified, updating sticky menu', mutations);\n                module.refresh();\n              }, 100);\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(context, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          $container = $module.offsetParent();\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits : ( element.height < scrollContext.height ),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n            module.set.size();\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n\n          if(elementVisible) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Reseting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  jitter         : 5, // will only set container height if difference between context and container is larger than this number\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );"
  },
  {
    "path": "js/semantic-ui/tab.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(evaluateScripts) {\n              module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n              $tab.html(html);\n            }\n            else {\n              module.debug('Updating HTML', tabPath, html);\n              tab.innerHTML = html;\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  module.cache.add(fullTabPath, response);\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(settings.evaluateScripts == 'once') {\n                module.update.content(tabPath, cachedContent, false);\n              }\n              else {\n                module.update.content(tabPath, cachedContent);\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab     = module.get.tabElement(tabPath),\n              isActive = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation = module.get.navElement(tabPath),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n                .siblings($allModules)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,  // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,  // use browser history\n  historyType     : 'hash', // #/ or html5 state\n  path            : false,  // base path of url\n\n  context         : false,  // specify a context that tabs must appear inside\n  childrenOnly    : false,  // use only tabs that are children of context\n  maxDepth        : 25,     // max depth a tab can be nested\n\n  alwaysRefresh   : false,  // load tab content new every tab click\n  cache           : true,   // cache the content requests to pull locally\n  ignoreFirstLoad : false,  // don't load remote content on first load\n\n  apiSettings     : false,  // settings for api call\n  evaluateScripts : 'once', // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates    : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/transition.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n            return $.fn.transition.settings;\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function() {\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if($module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists,\n              displayType\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              displayType = $clone\n                .attr('class', elementClass)\n                .removeAttr('style')\n                .removeClass(className.hidden)\n                .removeClass(className.visible)\n                .show()\n                .css('display')\n              ;\n              module.verbose('Determining final display state', displayType);\n              module.save.displayType(displayType);\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "js/semantic-ui/video.js",
    "content": "/*!\n * # Semantic UI 2.0.0 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2014 Contributorss\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.video = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.video.settings, parameters)\n          : $.extend({}, $.fn.video.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $playButton     = $module.find(selector.playButton),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing video');\n          module.create();\n          $module\n            .on('click' + eventNamespace, selector.placeholder, module.play)\n            .on('click' + eventNamespace, selector.playButton, module.play)\n          ;\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: function() {\n          var\n            image = $module.data(metadata.image),\n            html = templates.video(image)\n          ;\n          $module.html(html);\n          module.refresh();\n          if(!image) {\n            module.play();\n          }\n          module.debug('Creating html for video element', html);\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of video');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder    = $module.find(selector.placeholder);\n          $playButton     = $module.find(selector.playButton);\n          $embed          = $module.find(selector.embed);\n        },\n\n        // sets new video\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n            .data(metadata.url, url)\n          ;\n          settings.onChange();\n        },\n\n        // clears video embed\n        reset: function() {\n          module.debug('Clearing video embed and showing placeholder');\n          $module\n            .removeClass(className.active)\n          ;\n          $embed\n            .html(' ')\n          ;\n          $placeholder\n            .show()\n          ;\n          settings.onReset();\n        },\n\n        // plays current video\n        play: function() {\n          module.debug('Playing video');\n          var\n            source = $module.data(metadata.source) || false,\n            url    = $module.data(metadata.url)    || false,\n            id     = $module.data(metadata.id)     || false\n          ;\n          $embed\n            .html( module.generate.html(source, id, url) )\n          ;\n          $module\n            .addClass(className.active)\n          ;\n          settings.onPlay();\n        },\n\n        get: {\n          source: function(url) {\n            if(typeof url !== 'string') {\n              return false;\n            }\n            if(url.search('youtube.com') !== -1) {\n              return 'youtube';\n            }\n            else if(url.search('vimeo.com') !== -1) {\n              return 'vimeo';\n            }\n            return false;\n          },\n          id: function(url) {\n            if(url.match(settings.regExp.youtube)) {\n              return url.match(settings.regExp.youtube)[1];\n            }\n            else if(url.match(settings.regExp.vimeo)) {\n              return url.match(settings.regExp.vimeo)[2];\n            }\n            return false;\n          }\n        },\n\n        generate: {\n          // generates iframe html\n          html: function(source, id, url) {\n            module.debug('Generating embed html');\n            var\n              html\n            ;\n            // allow override of settings\n            source = source || settings.source;\n            id     = id     || settings.id;\n            if((source && id) || url) {\n              if(!source || !id) {\n                source = module.get.source(url);\n                id     = module.get.id(url);\n              }\n              if(source == 'vimeo') {\n                html = ''\n                  + '<iframe src=\"//player.vimeo.com/video/' + id + '?=' + module.generate.url(source) + '\"'\n                  + ' width=\"100%\" height=\"100%\"'\n                  + ' frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n                ;\n              }\n              else if(source == 'youtube') {\n                html = ''\n                  + '<iframe src=\"//www.youtube.com/embed/' + id + '?=' + module.generate.url(source) + '\"'\n                  + ' width=\"100%\" height=\"100%\"'\n                  + ' frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n                ;\n              }\n            }\n            else {\n              module.error(error.noVideo);\n            }\n            return html;\n          },\n\n          // generate url parameters\n          url: function(source) {\n            var\n              api      = (settings.api)\n                ? 1\n                : 0,\n              autoplay = (settings.autoplay === 'auto')\n                ? ($module.data('image') !== undefined)\n                : settings.autoplay,\n              hd       = (settings.hd)\n                ? 1\n                : 0,\n              showUI   = (settings.showUI)\n                ? 1\n                : 0,\n              // opposite used for some params\n              hideUI   = !(settings.showUI)\n                ? 1\n                : 0,\n              url = ''\n            ;\n            if(source == 'vimeo') {\n              url = ''\n                +      'api='      + api\n                + '&amp;title='    + showUI\n                + '&amp;byline='   + showUI\n                + '&amp;portrait=' + showUI\n                + '&amp;autoplay=' + autoplay\n              ;\n              if(settings.color) {\n                url += '&amp;color=' + settings.color;\n              }\n            }\n            if(source == 'ustream') {\n              url = ''\n                + 'autoplay=' + autoplay\n              ;\n              if(settings.color) {\n                url += '&amp;color=' + settings.color;\n              }\n            }\n            else if(source == 'youtube') {\n              url = ''\n                + 'enablejsapi='      + api\n                + '&amp;autoplay='    + autoplay\n                + '&amp;autohide='    + hideUI\n                + '&amp;hq='          + hd\n                + '&amp;modestbranding=1'\n              ;\n              if(settings.color) {\n                url += '&amp;color=' + settings.color;\n              }\n            }\n            return url;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.video.settings = {\n\n  name        : 'Video',\n  namespace   : 'video',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  metadata    : {\n    id     : 'id',\n    image  : 'image',\n    source : 'source',\n    url    : 'url'\n  },\n\n  source      : false,\n  url         : false,\n  id          : false,\n\n  aspectRatio : (16/9),\n\n  onPlay   : function(){},\n  onReset  : function(){},\n  onChange : function(){},\n\n  // callbacks not coded yet (needs to use jsapi)\n  onPause  : function() {},\n  onStop   : function() {},\n\n  width    : 'auto',\n  height   : 'auto',\n\n  autoplay : 'auto',\n  color    : '#442359',\n  hd       : true,\n  showUI   : false,\n  api      : true,\n\n  regExp : {\n    youtube : /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/,\n    vimeo   : /http:\\/\\/(www\\.)?vimeo.com\\/(\\d+)($|\\/)/\n  },\n\n  error      : {\n    noVideo     : 'No video specified',\n    method      : 'The method you called is not defined'\n  },\n\n  className   : {\n    active      : 'active'\n  },\n\n  selector    : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    playButton  : '.play'\n  }\n};\n\n$.fn.video.settings.templates = {\n  video: function(image) {\n    var\n      html = ''\n    ;\n    if(image) {\n      html += ''\n        + '<i class=\"video play icon\"></i>'\n        + '<img class=\"placeholder\" src=\"' + image + '\">'\n      ;\n    }\n    html += '<div class=\"embed\"></div>';\n    return html;\n  }\n};\n\n\n})( jQuery, window , document );\n"
  },
  {
    "path": "js/semantic-ui/visibility.js",
    "content": "/*!\n * # Semantic UI 2.1.7 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.verbose('DOM tree modified, updating visibility calculations');\n              module.timer = setTimeout(function() {\n                module.verbose('DOM tree modified, updating sticky menu');\n                module.refresh();\n              }, 100);\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src);\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : '1'\n              })\n            ;\n          },\n          image: function(src) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined ) {\n                $module.transition(settings.transition, settings.duration);\n              }\n              else {\n                $module.fadeIn(settings.duration);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.remove.fixed();\n            module.remove.occurred();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        reset: function() {\n          module.verbose('Reseting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topVisible       = (screen.bottom >= element.top);\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomVisible    = (screen.bottom >= element.bottom);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );"
  },
  {
    "path": "js/semantic-ui/visit.js",
    "content": "/*!\n * # Semantic UI 2.0.0 - Visit\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.visit = $.fn.visit = function(parameters) {\n  var\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visit.settings, parameters)\n          : $.extend({}, $.fn.visit.settings),\n\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $displays       = $(),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          if(settings.count) {\n            module.store(settings.key.count, settings.count);\n          }\n          else if(settings.id) {\n            module.add.id(settings.id);\n          }\n          else if(settings.increment && methodInvoked !== 'increment') {\n            module.increment();\n          }\n          module.add.display($module);\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of visit module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        increment: function(id) {\n          var\n            currentValue = module.get.count(),\n            newValue     = +(currentValue) + 1\n          ;\n          if(id) {\n            module.add.id(id);\n          }\n          else {\n            if(newValue > settings.limit && !settings.surpass) {\n              newValue = settings.limit;\n            }\n            module.debug('Incrementing visits', newValue);\n            module.store(settings.key.count, newValue);\n          }\n        },\n\n        decrement: function(id) {\n          var\n            currentValue = module.get.count(),\n            newValue     = +(currentValue) - 1\n          ;\n          if(id) {\n            module.remove.id(id);\n          }\n          else {\n            module.debug('Removing visit');\n            module.store(settings.key.count, newValue);\n          }\n        },\n\n        get: {\n          count: function() {\n            return +(module.retrieve(settings.key.count)) || 0;\n          },\n          idCount: function(ids) {\n            ids = ids || module.get.ids();\n            return ids.length;\n          },\n          ids: function(delimitedIDs) {\n            var\n              idArray = []\n            ;\n            delimitedIDs = delimitedIDs || module.retrieve(settings.key.ids);\n            if(typeof delimitedIDs === 'string') {\n              idArray = delimitedIDs.split(settings.delimiter);\n            }\n            module.verbose('Found visited ID list', idArray);\n            return idArray;\n          },\n          storageOptions: function(data) {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        has: {\n          visited: function(id, ids) {\n            var\n              visited = false\n            ;\n            ids = ids || module.get.ids();\n            if(id !== undefined && ids) {\n              $.each(ids, function(index, value){\n                if(value == id) {\n                  visited = true;\n                }\n              });\n            }\n            return visited;\n          }\n        },\n\n        set: {\n          count: function(value) {\n            module.store(settings.key.count, value);\n          },\n          ids: function(value) {\n            module.store(settings.key.ids, value);\n          }\n        },\n\n        reset: function() {\n          module.store(settings.key.count, 0);\n          module.store(settings.key.ids, null);\n        },\n\n        add: {\n          id: function(id) {\n            var\n              currentIDs = module.retrieve(settings.key.ids),\n              newIDs = (currentIDs === undefined || currentIDs === '')\n                ? id\n                : currentIDs + settings.delimiter + id\n            ;\n            if( module.has.visited(id) ) {\n              module.debug('Unique content already visited, not adding visit', id, currentIDs);\n            }\n            else if(id === undefined) {\n              module.debug('ID is not defined');\n            }\n            else {\n              module.debug('Adding visit to unique content', id);\n              module.store(settings.key.ids, newIDs);\n            }\n            module.set.count( module.get.idCount() );\n          },\n          display: function(selector) {\n            var\n              $element = $(selector)\n            ;\n            if($element.length > 0 && !$.isWindow($element[0])) {\n              module.debug('Updating visit count for element', $element);\n              $displays = ($displays.length > 0)\n                ? $displays.add($element)\n                : $element\n              ;\n            }\n          }\n        },\n\n        remove: {\n          id: function(id) {\n            var\n              currentIDs = module.get.ids(),\n              newIDs     = []\n            ;\n            if(id !== undefined && currentIDs !== undefined) {\n              module.debug('Removing visit to unique content', id, currentIDs);\n              $.each(currentIDs, function(index, value){\n                if(value !== id) {\n                  newIDs.push(value);\n                }\n              });\n              newIDs = newIDs.join(settings.delimiter);\n              module.store(settings.key.ids, newIDs );\n            }\n            module.set.count( module.get.idCount() );\n          }\n        },\n\n        check: {\n          limit: function(value) {\n            value = value || module.get.count();\n            if(settings.limit) {\n              if(value >= settings.limit) {\n                module.debug('Pages viewed exceeded limit, firing callback', value, settings.limit);\n                settings.onLimit.call(element, value);\n              }\n              module.debug('Limit not reached', value, settings.limit);\n              settings.onChange.call(element, value);\n            }\n            module.update.display(value);\n          }\n        },\n\n        update: {\n          display: function(value) {\n            value = value || module.get.count();\n            if($displays.length > 0) {\n              module.debug('Updating displayed view count', $displays);\n              $displays.html(value);\n            }\n          }\n        },\n\n        store: function(key, value) {\n          var\n            options = module.get.storageOptions(value)\n          ;\n          if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n            window.localStorage.setItem(key, value);\n            module.debug('Value stored using local storage', key, value);\n          }\n          else if($.cookie !== undefined) {\n            $.cookie(key, value, options);\n            module.debug('Value stored using cookie', key, value, options);\n          }\n          else {\n            module.error(error.noCookieStorage);\n            return;\n          }\n          if(key == settings.key.count) {\n            module.check.limit(value);\n          }\n        },\n        retrieve: function(key, value) {\n          var\n            storedValue\n          ;\n          if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n            storedValue = window.localStorage.getItem(key);\n          }\n          // get by cookie\n          else if($.cookie !== undefined) {\n            storedValue = $.cookie(key);\n          }\n          else {\n            module.error(error.noCookieStorage);\n          }\n          if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n            storedValue = undefined;\n          }\n          return storedValue;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visit.settings = {\n\n  name          : 'Visit',\n\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  namespace     : 'visit',\n\n  increment     : false,\n  surpass       : false,\n  count         : false,\n  limit         : false,\n\n  delimiter     : '&',\n  storageMethod : 'localstorage',\n\n  key           : {\n    count : 'visit-count',\n    ids   : 'visit-ids'\n  },\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  onLimit       : function() {},\n  onChange      : function() {},\n\n  error         : {\n    method          : 'The method you called is not defined',\n    missingPersist  : 'Using the persist setting requires the inclusion of PersistJS',\n    noCookieStorage : 'The default storage cookie requires $.cookie to be included.'\n  }\n\n};\n\n})( jQuery, window , document );\n"
  },
  {
    "path": "js/semantic-ui.js",
    "content": " /*\n * # Semantic UI - 2.1.7\n * https://github.com/Semantic-Org/Semantic-UI\n * http://www.semantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n/*!\n * # Semantic UI 2.1.7 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n;(function ( $, window, document, undefined ) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          valid: function() {\n            var\n              allValid = true\n            ;\n            module.verbose('Checking if form is valid');\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field  = $(this),\n                key     = event.which,\n                keyCode = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && $field.is(selector.input) && $field.not(selector.checkbox).length > 0 ) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                module.validate.form.call(module, event, true);\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group)\n              ;\n              if(settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) ) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.form.call(module, event, true);\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || !module.is.bracketedRule(rule)) {\n              return false;\n            }\n            return rule.type.match(settings.regExp.bracket)[1] + '';\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.size() == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields) {\n                  ruleKeys = Object.keys(parameters.fields);\n                  if( typeof parameters.fields[ruleKeys[0]] == 'string' || $.isArray(parameters.fields[ruleKeys[0]]) ) {\n                    $.each(parameters.fields, function(name, rules) {\n                      if(typeof rules == 'string') {\n                        rules = [rules];\n                      }\n                      parameters.fields[name] = {\n                        rules: []\n                      };\n                      $.each(rules, function(index, rule) {\n                        parameters.fields[name].rules.push({ type: rule });\n                      });\n                    });\n                  }\n                }\n\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(isChecked) {\n                      values[name] = value;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        add: {\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.is.valid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName) {\n            var\n              identifier  = field.identifier || fieldName,\n              $field      = module.get.field(identifier),\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && $.trim($field.val()) === ''){\n              module.debug('Field is optional and empty. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              module.remove.prompt(identifier, fieldErrors);\n              settings.onValid.call($field);\n            }\n            else {\n              formErrors = formErrors.concat(fieldErrors);\n              module.add.prompt(identifier, fieldErrors);\n              settings.onInvalid.call($field, fieldErrors);\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d*(\\.)\\d+/,\n    email   : \"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\",\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      var\n        emailRegExp = new RegExp($.fn.form.settings.regExp.email, 'i')\n      ;\n      return emailRegExp.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n\n/*!\n * # Semantic UI 2.1.7 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modfying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modfying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.variation) {\n            module.debug('Creating dimmer with variation', settings.variation);\n            $element.addClass(settings.variation);\n          }\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n/*!\n * # Semantic UI 2.1.7 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          if(selectObserver) {\n            selectObserver.disconnect();\n          }\n          if(menuObserver) {\n            menuObserver.disconnect();\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            });\n            menuObserver = new MutationObserver(function(mutations) {\n              module.debug('Menu modified, updating selector cache');\n              module.refresh();\n            });\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          module.filter(query);\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug : settings.debug,\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown')\n                $module.addClass(className.disabled)\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.is.multiple() && !module.has.search() && module.is.allFiltered()) {\n              return true;\n            }\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('click'     + eventNamespace, selector.search, module.show)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n                .on('blur'      + eventNamespace, module.event.blur)\n              ;\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              module.select.firstUnfiltered();\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(!settings.allowAdditions) {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration        : false,\n              throttle             : settings.throttle,\n              urlData              : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.regExp(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function() {\n          if( module.is.search() && !module.is.focusedOnSearch() ) {\n            $search[0].focus();\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.size() > 0)\n          ;\n          if( module.has.query() ) {\n            if(hasSelected) {\n              module.debug('Forcing partial selection to selected item', $selectedItem);\n              module.event.item.click.call($selectedItem);\n              return;\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n          module.hide();\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module) && !module.is.focusedOnSearch()) {\n              module.focusSearch();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          // prevents focus callback from occurring on mousedown\n          mousedown: function() {\n            activated = true;\n          },\n          mouseup: function() {\n            activated = false;\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n                module.show();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(!itemActivated && !pageLostFocus) {\n                if(module.is.multiple()) {\n                  module.remove.activeLabel();\n                  module.hide();\n                }\n                else if(settings.forceSelection) {\n                  module.forceSelection();\n                }\n                else {\n                  module.hide();\n                }\n              }\n              else if(pageLostFocus) {\n                if(settings.forceSelection) {\n                  module.forceSelection();\n                }\n              }\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n              event.stopPropagation();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          menu: {\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $subMenu    = $(this).children(selector.menu),\n                $otherMenus = $(this).siblings(selector.item).children(selector.menu)\n              ;\n              if( $subMenu.length > 0 ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false,  $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false,  $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            touchend: function() {\n            },\n            click: function (event) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.remove.searchTerm();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').andSelf()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu             = $selectedItem.children(selector.menu),\n                $parentMenu          = $selectedItem.closest(selector.menu),\n                inVisibleMenu        = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu           = ($subMenu.length> 0),\n                hasSelectedItem      = ($selectedItem.length > 0),\n                selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed     = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // left arrow (hide sub-menu)\n                if(pressedKey == keys.leftArrow) {\n\n                  isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                  if(isSubMenuItem) {\n                    module.verbose('Left key pressed, closing sub-menu');\n                    module.animate.hide(false,  $parentMenu);\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $parentMenu\n                      .closest(selector.item)\n                        .addClass(className.selected)\n                    ;\n                    event.preventDefault();\n                  }\n                }\n\n                // right arrow (show sub-menu)\n                if(pressedKey == keys.rightArrow) {\n                  if(hasSubMenu) {\n                    module.verbose('Right key pressed, opening sub-menu');\n                    module.animate.show(false,  $subMenu);\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $subMenu\n                      .find(selector.item).eq(0)\n                        .addClass(className.selected)\n                    ;\n                    event.preventDefault();\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( module.is.selection() && !module.is.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(this, text, value);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(this, text, value);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target    = $(event.target),\n              $label     = $target.closest(selector.siblingLabel),\n              notOnLabel = ($module.find($label).length === 0),\n              notInMenu  = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(this) ) ) {\n              module.set.selected(value, $(this));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value) {\n            // mimics action.activate but does not select text\n            module.action.activate.call(this);\n          },\n\n          combo: function(text, value) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(this));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value) {\n            module.set.value(value);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(characterCount) {\n            return (characterCount * settings.glyphWidth) + 'em';\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value)\n            ;\n            // prevents placeholder element from being selected when multiple\n            if($.isArray(value) && value.length === 1 && value[0] === '') {\n              return '';\n            }\n            return value;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              remoteValues = {};\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                remoteValues[value] = (name)\n                  ? name\n                  : value\n                ;\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retreiving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retreived values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occuring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings) {\n              if(settings.saveRemoteData) {\n                module.restore.remoteValues();\n              }\n              else {\n                module.clearValue();\n              }\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple()) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(searchValue.length),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              if(module.is.onScreen($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.addClass(className.upward);\n          },\n          value: function(value, text, $selected) {\n            var\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', value, currentValue);\n              internalChange = true;\n              $input\n                .val(value)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', value, $input);\n              if(value !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-value', value)\n              .html(templates.label(value, text))\n            ;\n            $label = settings.onLabelCreate.call($label, value, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', value);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              $option   = $input.find('option[value=\"' + value + '\"]'),\n              hasOption = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer', value);\n            }\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', value)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            $item\n              .removeClass(className.selected)\n            ;\n            if(hasUserSuggestion) {\n              html = settings.templates.addition( module.add.variables(message.addResult, value) );\n              $addition\n                .html(html)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n                .addClass(className.selected)\n              ;\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n                .addClass(className.selected)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.removeClass(className.upward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n          },\n          optionValue: function(value) {\n            var\n              $option   = $input.find('option[value=\"' + value + '\"]'),\n              hasOption = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer', value);\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', value);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-value=\"' + value +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          search: function() {\n            return ($search.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              $labels = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-value=\"' + value +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            return ($item.filter(selector.unselectable).length === $item.length);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          onScreen: function($subMenu) {\n            var\n              $currentMenu   = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen = {},\n              calculations\n            ;\n            $currentMenu.addClass(className.loading);\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      if(settings.direction == 'auto') {\n                        module.remove.upward($subMenu);\n                      }\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          regExp: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  saveRemoteData         : true,      // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n  throttle               : 200,       // How long to wait after last user input to search remotely\n\n  context                : window,      // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n  allowAdditions         : false,      // whether multiple select should allow user added values\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.0714,     // widest glyph width in em (W is 1.0714 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results', // grouping for api results\n    values       : 'values', // grouping for all dropdown values\n    name         : 'name',   // displayed dropdown text\n    value        : 'value'   // actual dropdown value\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      html += '<div class=\"item\" data-value=\"' + option[fields.value] + '\">' + option[fields.name] + '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n            .data(metadata.url, url)\n          ;\n          module.create();\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.colors || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.colors || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      return ''\n        + '<iframe src=\"' + url + '?' + parameters + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : true,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n            }\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer with settings', dimmerSettings);\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          deny: function() {\n            if(settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      module.add.keyboardShortcuts();\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    module.remove.keyboardShortcuts();\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find(':input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementNamespace, module.event.click)\n              ;\n            }\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overriden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if( !module.exists() && settings.preserve) {\n            module.create();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent();\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as activating element');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($popup)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          $window.off(elementNamespace);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          hideGracefully: function(event) {\n            // don't close on clicks inside popup\n            if(event && $(event.target).closest(selector.popup).length === 0) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popups  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2,8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.visible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement  = $target[0],\n              targetPosition = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              calculations = {},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                scroll: {\n                  top  : $window.scrollTop(),\n                  left : $window.scrollLeft()\n                },\n                width  : $window.width(),\n                height : $window.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left') , 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.scroll.top,\n              bottom : screen.scroll.top + screen.height,\n              left   : screen.scroll.left,\n              right  : screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            offset       = offset       || module.get.offset();\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !(target.element instanceof SVGGraphicsElement)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click'))   {\n              $document\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n              $context\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('touchstart' + elementNamespace, function(event) {\n                  module.verbose('Touched away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('click' + elementNamespace, function(event) {\n                  module.verbose('Clicked away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              $document\n                .off('scroll' + elementNamespace, module.hide)\n              ;\n              $context\n                .off('scroll' + elementNamespace, module.hide)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n              ;\n              openedWithTouch = false;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Removing close event from document');\n              $document\n                .off('click' + elementNamespace)\n              ;\n            }\n          }\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.visible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name         : 'Popup',\n\n  // module settings\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n  namespace    : 'popup',\n\n  // callback only when element added to dom\n  onCreate     : function(){},\n\n  // callback before element removed from dom\n  onRemove     : function(){},\n\n  // callback before show animation\n  onShow       : function(){},\n\n  // callback after show animation\n  onVisible    : function(){},\n\n  // callback before hide animation\n  onHide       : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable: function(){},\n\n  // callback after hide animation\n  onHidden     : function(){},\n\n  // when to show popup\n  on           : 'hover',\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position     : 'top left',\n\n  // name of variation to use\n  variation    : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content      : false,\n\n  // explicitly set html\n  html         : false,\n\n  // explicitly set title\n  title        : false,\n\n  // whether automatically close on clickaway when on click\n  closable     : true,\n\n  // automatically hide on scroll\n  hideOnScroll : 'auto',\n\n  // hide other popups on show\n  exclusive    : false,\n\n  // context to attach popups\n  context      : 'body',\n\n  // position to prefer when calculating new position\n  prefer       : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort   : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating',\n    dropdown  : 'dropdown',\n    fluid     : 'fluid',\n    loading   : 'loading',\n    popup     : 'ui popup',\n    position  : 'top left center bottom right',\n    visible   : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.set.percent(0);\n          module.set.value(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n\n            newValue       = startValue + incrementValue;\n            maxValue       = module.get.total();\n\n            module.debug('Incrementing value', startValue, newValue, maxValue);\n            if(newValue > maxValue ) {\n              module.debug('Value cannot increment above total', maxValue);\n              newValue = maxValue;\n            }\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n\n            module.debug('Incrementing percentage by', startValue, newValue);\n            if(newValue > maxValue ) {\n              module.debug('Value cannot increment above 100 percent');\n              newValue = maxValue;\n            }\n          }\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n\n          if(newValue < 0) {\n            module.debug('Value cannot decrement below 0');\n            newValue = 0;\n          }\n          module.set.progress(newValue);\n        },\n\n        has: {\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.debug('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        is: {\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            $bar.one(transitionEnd + eventNamespace, animationCallback);\n            module.timer = setTimeout(animationCallback, settings.duration + 100);\n            animating = true;\n            module.interval = setInterval(module.set.labels, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.debug('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.debug('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.debug('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onActive.call(element, module.value, module.total);\n          },\n          success : function(text) {\n            text = text || settings.text.success;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onSuccess.call(element, module.total);\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onWarning.call(element, module.value, module.total);\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onError.call(element, module.value, module.total);\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            var\n              numericValue = module.get.numericValue(value),\n              percentComplete\n            ;\n            if(numericValue === false) {\n              module.error(error.nonNumeric, value);\n            }\n            if( module.has.total() ) {\n              module.set.value(numericValue);\n              percentComplete = (numericValue / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = numericValue;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration     : 300,\n\n  autoSuccess  : true,\n  showActivity : true,\n  limitValues  : true,\n\n  label        : 'percent',\n  precision    : 0,\n  framerate    : (1000 / 30), /// 30 fps\n\n  percent      : false,\n  total        : false,\n  value        : false,\n\n  onChange     : function(percent, value, total){},\n  onSuccess    : function(total){},\n  onActive     : function(value, total){},\n  onError      : function(value, total){},\n  onWarning    : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n/*!\n * # Semantic UI 2.1.7 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.rating( module.get.initialRating() );\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .andSelf()\n                  .addClass(className.active)\n              ;\n            }\n            settings.onRate.call(element, rating);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        regExp          = settings.regExp,\n        fields          = settings.fields,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $prompt         = $module.find(selector.prompt),\n        $searchButton   = $module.find(selector.searchButton),\n        $results        = $module.find(selector.results),\n        $result         = $module.find(selector.result),\n        $category       = $module.find(selector.category),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.query, settings.searchDelay);\n          },\n          focus: function() {\n            module.set.focus();\n            if( module.has.minimumCharacters() ) {\n              module.query();\n              if( module.can.show() ) {\n                module.showResults();\n              }\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click', selector.results, function(event) {\n                  if( !module.is.animating() && !module.is.hidden() ) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result      = $module.find(selector.result),\n            $category    = $module.find(selector.category),\n            currentIndex = $result.index( $result.filter('.' + className.active) ),\n            resultSize   = $result.length,\n\n            keyCode      = event.which,\n            keys         = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.trigger.blur();\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug     : settings.debug,\n                on        : false,\n                cache     : 'local',\n                action    : 'search',\n                onError   : module.error\n              },\n              searchHTML\n            ;\n            module.verbose('First request, initializing API');\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        trigger: {\n          blur: function() {\n            var\n              events        = document.createEvent('HTMLEvents'),\n              promptElement = $prompt[0]\n            ;\n            if(promptElement) {\n              module.verbose('Triggering native blur event');\n              events.initEvent('blur', false, false);\n              promptElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function() {\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm);\n              }\n              else {\n                module.error(error.source);\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm) {\n            var\n              apiSettings = {\n                onSuccess : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                },\n                onFailure: function() {\n                  module.displayMessage(error.serverError);\n                },\n                urlData: {\n                  query: searchTerm\n                }\n              }\n            ;\n            if( !$module.api('get request') ) {\n              module.setup.api();\n            }\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.debug('Executing search', apiSettings);\n            module.cancel.query();\n            $module\n              .api('setting', apiSettings)\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          $results\n            .html(html)\n          ;\n          if( module.can.show() ) {\n            module.showResults();\n          }\n        },\n\n        showResults: function() {\n          if(!module.is.visible()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function() {\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name           : 'Search',\n  namespace      : 'search',\n\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  type           : 'standard',\n  // template to use (specified in settings.templates)\n\n  minCharacters  : 1,\n  // minimum characters required to search\n\n  apiSettings    : false,\n  // API config\n\n  source         : false,\n  // object to search\n\n  searchFields   : [\n    'title',\n    'description'\n  ],\n  // fields to search\n\n  displayField   : '',\n  // field to display in standard results template\n\n  searchFullText : true,\n  // whether to include fuzzy results in local search\n\n  automatic      : true,\n  // whether to add events to prompt automatically\n\n  hideDelay      : 0,\n  // delay before hiding menu after blur\n\n  searchDelay    : 200,\n  // delay before searching\n\n  maxResults     : 7,\n  // maximum results returned from local\n\n  cache          : true,\n  // whether to store lookups in local cache\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newSize = {}\n            ;\n            module.set.currentStageSize();\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            newSize = {\n              width  : $nextSide.outerWidth(true),\n              height : $nextSide.outerHeight(true)\n            };\n            $clone.remove();\n            $module\n              .css(newSize)\n            ;\n            module.verbose('Resizing stage to fit new content', newSize);\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              module.set.stageSize();\n              module.stage.above();\n              module.animate( module.get.transform.up() );\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              module.set.stageSize();\n              module.stage.below();\n              module.animate( module.get.transform.down() );\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(module.get.transform.left() );\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(module.get.transform.right() );\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n/*!\n * # Semantic UI 2.1.7 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          if(module.is.ios()) {\n            module.set.ios();\n          }\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          var\n            context = $context[0]\n          ;\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                module.verbose('DOM tree modified, updating sticky menu', mutations);\n                module.refresh();\n              }, 100);\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(context, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          $container = $module.offsetParent();\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits : ( element.height < scrollContext.height ),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n            module.set.size();\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n\n          if(elementVisible) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Reseting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  jitter         : 5, // will only set container height if difference between context and container is larger than this number\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n/*!\n * # Semantic UI 2.1.7 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(evaluateScripts) {\n              module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n              $tab.html(html);\n            }\n            else {\n              module.debug('Updating HTML', tabPath, html);\n              tab.innerHTML = html;\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  module.cache.add(fullTabPath, response);\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(settings.evaluateScripts == 'once') {\n                module.update.content(tabPath, cachedContent, false);\n              }\n              else {\n                module.update.content(tabPath, cachedContent);\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab     = module.get.tabElement(tabPath),\n              isActive = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation = module.get.navElement(tabPath),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n                .siblings($allModules)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,  // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,  // use browser history\n  historyType     : 'hash', // #/ or html5 state\n  path            : false,  // base path of url\n\n  context         : false,  // specify a context that tabs must appear inside\n  childrenOnly    : false,  // use only tabs that are children of context\n  maxDepth        : 25,     // max depth a tab can be nested\n\n  alwaysRefresh   : false,  // load tab content new every tab click\n  cache           : true,   // cache the content requests to pull locally\n  ignoreFirstLoad : false,  // don't load remote content on first load\n\n  apiSettings     : false,  // settings for api call\n  evaluateScripts : 'once', // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates    : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n            return $.fn.transition.settings;\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function() {\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if($module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists,\n              displayType\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              displayType = $clone\n                .attr('class', elementClass)\n                .removeAttr('style')\n                .removeClass(className.hidden)\n                .removeClass(className.visible)\n                .show()\n                .css('display')\n              ;\n              module.verbose('Determining final display state', displayType);\n              module.save.displayType(displayType);\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return false;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request && module.request.state() == 'pending');\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (settings.dataType !== 'json' && settings.dataType !== 'jsonp') || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? settings.onResponse.call(context, $.extend(true, {}, response))\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error')  {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (settings.dataType == 'json' || settings.dataType == 'jsonp')\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( !module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.1.7 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.verbose('DOM tree modified, updating visibility calculations');\n              module.timer = setTimeout(function() {\n                module.verbose('DOM tree modified, updating sticky menu');\n                module.refresh();\n              }, 100);\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src);\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : '1'\n              })\n            ;\n          },\n          image: function(src) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined ) {\n                $module.transition(settings.transition, settings.duration);\n              }\n              else {\n                $module.fadeIn(settings.duration);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.remove.fixed();\n            module.remove.occurred();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        reset: function() {\n          module.verbose('Reseting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topVisible       = (screen.bottom >= element.top);\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomVisible    = (screen.bottom >= element.bottom);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );"
  },
  {
    "path": "projects/index.html",
    "content": "---\nlayout: projects\n---\n\n{% include {{ site.theme-projects }} %}"
  },
  {
    "path": "projects/project-1.md",
    "content": "---\nlayout: project\ntype: project\nimage: images/micromouse.jpg\ntitle: Micromouse\npermalink: projects/micromouse\n# All dates must be YYYY-MM-DD format!\ndate: 2015-07-01\nlabels:\n  - Robotics\n  - Arduino\n  - C++\nsummary: My team developed a robotic mouse that won first place in the 2015 UH Micromouse competition.\n---\n\n<div class=\"ui small rounded images\">\n  <img class=\"ui image\" src=\"../images/micromouse-robot.png\">\n  <img class=\"ui image\" src=\"../images/micromouse-robot-2.jpg\">\n  <img class=\"ui image\" src=\"../images/micromouse.jpg\">\n  <img class=\"ui image\" src=\"../images/micromouse-circuit.png\">\n</div>\n\nMicromouse is an event where small robot “mice” solve a 16 x 16 maze.  Events are held worldwide.  The maze is made up of a 16 by 16 gird of cells, each 180 mm square with walls 50 mm high.  The mice are completely autonomous robots that must find their way from a predetermined starting position to the central area of the maze unaided.  The mouse will need to keep track of where it is, discover walls as it explores, map out the maze and detect when it has reached the center.  having reached the center, the mouse will typically perform additional searches of the maze until it has found the most optimal route from the start to the center.  Once the most optimal route has been determined, the mouse will run that route in the shortest possible time.\n\nFor this project, I was the lead programmer who was responsible for programming the various capabilities of the mouse.  I started by programming the basics, such as sensor polling and motor actuation using interrupts.  From there, I then programmed the basic PD controls for the motors of the mouse.  The PD control the drive so that the mouse would stay centered while traversing the maze and keep the mouse driving straight.  I also programmed basic algorithms used to solve the maze such as a right wall hugger and a left wall hugger algorithm.  From there I worked on a flood-fill algorithm to help the mouse track where it is in the maze, and to map the route it takes.  We finished with the fastest mouse who finished the maze within our college.\n\nHere is some code that illustrates how we read values from the line sensors:\n\n```js\nbyte ADCRead(byte ch)\n{\n    word value;\n    ADC1SC1 = ch;\n    while (ADC1SC1_COCO != 1)\n    {   // wait until ADC conversion is completed   \n    }\n    return ADC1RL;  // lower 8-bit value out of 10-bit data from the ADC\n}\n```\n\nYou can learn more at the [UH Micromouse Website](http://www-ee.eng.hawaii.edu/~mmouse/about.html).\n\n\n\n"
  },
  {
    "path": "projects/project-2.md",
    "content": "---\nlayout: project\ntype: project\nimage: images/vacay-square.png\ntitle: Vacay\npermalink: projects/vacay\n# All dates must be YYYY-MM-DD format!\ndate: 2015-12-15\nlabels:\n  - Javascript\n  - Meteor\n  - MongoDB\n  - GitHub\nsummary: A responsive web application for travel planning that my team developed in ICS 415.\n---\n\n<img class=\"ui medium right floated rounded image\" src=\"../images/vacay-home-page.png\">\n\nVacay is a web application that I helped create as a team project in ICS 415, Spring 2015. The project helped me learn how to design and implement a responsive web site.\n\nVacay is implemented using [Meteor](http://meteor.com), a JavaScript application platform. Within two weeks, we created a website that implements several types of reservations including flights, hotels, and car rentals.\n\nIn this project I gained experience with full-stack web application design and associated technologies, including [MongoDB](http://mongodb.com) for database storage, the [Twitter Bootstrap](http://getbootstrap.com/) CSS Framework for the user interface, and Javascript for both client and server-side programming. \n \nSource: <a href=\"https://github.com/theVacay/vacay\"><i class=\"large github icon\"></i>theVacay/vacay</a>"
  },
  {
    "path": "projects/project-3.md",
    "content": "---\nlayout: project\ntype: project\nimage: images/cotton-square.png\ntitle: Cotton\npermalink: projects/cotton\n# All dates must be YYYY-MM-DD format!\ndate: 2014-04-12\nlabels:\n  - Lisp\n  - GitHub\nsummary: A text adventure game I developed for ICS 313.\n---\n\n<img class=\"ui image\" src=\"{{ site.baseurl }}/images/cotton-header.png\">\n\nCotton is a horror-esque text-based adventure game I developed using the functions and macros built from The Wizard's Game in [Conrad Barski's Land of Lisp](http://landoflisp.com/). Slightly more interesting and convoluted! (It is not that scary.)\n\nTo give you a flavor of the game, here is an excerpt from one run:\n\n<hr>\n\n<pre>\nYou open your eyes, and you are greeted by an unfamiliar ceiling.\nStartled, you get to your feet and quickly scan your surroundings. It's\ndark except for the stream of light coming from a crack on the only boarded\nwindow in the room. You try to peek through the crack, but you cannot see\nanything. You wonder where you are and who could have possibly brought you here.\n\n<--------------------help------------------------>\nEnter quit or one of the following commands -\nWeld light look walk pickup inventory help h ?\n<------------------------------------------------>\n\nlook\nThe room is a picture of decay with only a faded number identifying it as room-4. The bed you were\n lying on is stained with what looks like dried blood. Could it be your blood? No - it is not. The\n only way out of the room aside from the door to the corridor is a window that is boarded shut. It\n looks like it has been like that for decades. There is a door going west from here. You see a candle\n on the floor. You see a match on the floor.\n\npickup candle\n- you are now carrying the candle -\n\npickup match\n- you are now carrying the match -\n\nlight match candle\n\nThe candle is now lit. It illuminates everything in the room.\n\nwalk west\nThe corridor is lit with the candle. It is so long that you cannot see to the end. You notice that\n there are words written on the wall. There is a door going east from here. There is a way going north\n from here. There is a door going south from here.\n</pre>\n\n<hr>\n\nSource: <a href=\"https://github.com/jogarces/ics-313-text-game\"><i class=\"large github icon \"></i>jogarces/ics-313-text-game</a>\n\n"
  }
]