diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb372fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +logs +target +/.idea +/.idea_modules +/.classpath +/.project +/.settings +/RUNNING_PID diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4baedcb --- /dev/null +++ b/LICENSE @@ -0,0 +1,8 @@ +This software is licensed under the Apache 2 license, quoted below. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with +the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..8dfa632 --- /dev/null +++ b/README @@ -0,0 +1,49 @@ +This is your new Play application +================================= + +This file will be packaged with your application when using `activator dist`. + +There are several demonstration files available in this template. + +Controllers +=========== + +- HomeController.scala: + + Shows how to handle simple HTTP requests. + +- AsyncController.scala: + + Shows how to do asynchronous programming when handling a request. + +- CountController.scala: + + Shows how to inject a component into a controller and use the component when + handling requests. + +Components +========== + +- Module.scala: + + Shows how to use Guice to bind all the components needed by your application. + +- Counter.scala: + + An example of a component that contains state, in this case a simple counter. + +- ApplicationTimer.scala: + + An example of a component that starts when the application starts and stops + when the application stops. + +Filters +======= + +- Filters.scala: + + Creates the list of HTTP filters used by your application. + +- ExampleFilter.scala + + A simple filter that adds a header to every response. \ No newline at end of file diff --git a/activatorStart.sh b/activatorStart.sh new file mode 100644 index 0000000..4ecb59d --- /dev/null +++ b/activatorStart.sh @@ -0,0 +1 @@ +activator -Dhttp.proxyHost="192.168.16.1" -Dhttp.proxyPort="128" -Dhttps.proxyHost="192.168.16.1" -Dhttps.proxyPort="128" -Dhttp.nonProxyHosts="localhost|127.0.0.1" -Dhttps.nonProxyHosts="localhost|127.0.0.1" ~run diff --git a/app/Filters.scala b/app/Filters.scala new file mode 100644 index 0000000..a72db50 --- /dev/null +++ b/app/Filters.scala @@ -0,0 +1,33 @@ +import javax.inject._ +import play.api._ +import play.api.http.HttpFilters +import play.api.mvc._ + +import filters.ExampleFilter + +/** + * This class configures filters that run on every request. This + * class is queried by Play to get a list of filters. + * + * Play will automatically use filters from any class called + * `Filters` that is placed the root package. You can load filters + * from a different class by adding a `play.http.filters` setting to + * the `application.conf` configuration file. + * + * @param env Basic environment settings for the current application. + * @param exampleFilter A demonstration filter that adds a header to + * each response. + */ +@Singleton +class Filters @Inject() ( + env: Environment, + exampleFilter: ExampleFilter) extends HttpFilters { + + override val filters = { + // Use the example filter if we're running development mode. If + // we're running in production or test mode then don't use any + // filters at all. + if (env.mode == Mode.Dev) Seq(exampleFilter) else Seq.empty + } + +} diff --git a/app/Module.scala b/app/Module.scala new file mode 100644 index 0000000..ca0e39f --- /dev/null +++ b/app/Module.scala @@ -0,0 +1,28 @@ +import com.google.inject.AbstractModule +import java.time.Clock + +import services.{ApplicationTimer, AtomicCounter, Counter} + +/** + * This class is a Guice module that tells Guice how to bind several + * different types. This Guice module is created when the Play + * application starts. + + * Play will automatically use any class called `Module` that is in + * the root package. You can create modules in other locations by + * adding `play.modules.enabled` settings to the `application.conf` + * configuration file. + */ +class Module extends AbstractModule { + + override def configure() = { + // Use the system clock as the default implementation of Clock + bind(classOf[Clock]).toInstance(Clock.systemDefaultZone) + // Ask Guice to create an instance of ApplicationTimer when the + // application starts. + bind(classOf[ApplicationTimer]).asEagerSingleton() + // Set AtomicCounter as the implementation for Counter. + bind(classOf[Counter]).to(classOf[AtomicCounter]) + } + +} diff --git a/app/controllers/AsyncController.scala b/app/controllers/AsyncController.scala new file mode 100644 index 0000000..f1f6ff0 --- /dev/null +++ b/app/controllers/AsyncController.scala @@ -0,0 +1,41 @@ +package controllers + +import akka.actor.ActorSystem +import javax.inject._ +import play.api._ +import play.api.mvc._ +import scala.concurrent.{ExecutionContext, Future, Promise} +import scala.concurrent.duration._ + +/** + * This controller creates an `Action` that demonstrates how to write + * simple asynchronous code in a controller. It uses a timer to + * asynchronously delay sending a response for 1 second. + * + * @param actorSystem We need the `ActorSystem`'s `Scheduler` to + * run code after a delay. + * @param exec We need an `ExecutionContext` to execute our + * asynchronous code. + */ +@Singleton +class AsyncController @Inject() (actorSystem: ActorSystem)(implicit exec: ExecutionContext) extends Controller { + + /** + * Create an Action that returns a plain text message after a delay + * of 1 second. + * + * The configuration in the `routes` file means that this method + * will be called when the application receives a `GET` request with + * a path of `/message`. + */ + def message = Action.async { + getFutureMessage(1.second).map { msg => Ok(msg) } + } + + private def getFutureMessage(delayTime: FiniteDuration): Future[String] = { + val promise: Promise[String] = Promise[String]() + actorSystem.scheduler.scheduleOnce(delayTime) { promise.success("Hi!") } + promise.future + } + +} diff --git a/app/controllers/Barcodes.scala b/app/controllers/Barcodes.scala new file mode 100644 index 0000000..7ea8a7c --- /dev/null +++ b/app/controllers/Barcodes.scala @@ -0,0 +1,39 @@ +package controllers + +import javax.inject._ +import play.api._ +import play.api.mvc._ +import play.api.i18n.{Messages, I18nSupport, MessagesApi} + +class Barcodes @Inject() extends Controller { + val imageResolution = 144 + + def barcode(ean: Long) = Action{ + import java.lang.IllegalArgumentException + val MimeType = "image/png" + try { + val imageData = ean13BarCode(ean, MimeType) + Ok(imageData).as(MimeType) + } + catch { + case e: IllegalArgumentException => + BadRequest("Couldn’t generate bar code. Error: " + e.getMessage) + } + } + def ean13BarCode(ean: Long, mimeType: String): Array[Byte] = { + import java.io.ByteArrayOutputStream + import java.awt.image.BufferedImage + import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider + import org.krysalis.barcode4j.impl.upcean.EAN13Bean + + val output: ByteArrayOutputStream = new ByteArrayOutputStream + val canvas: BitmapCanvasProvider = + new BitmapCanvasProvider(output, mimeType, imageResolution, + BufferedImage.TYPE_BYTE_BINARY, false, 0) + val barcode = new EAN13Bean() + barcode.generateBarcode(canvas, String valueOf ean) + canvas.finish + output.toByteArray + } + +} \ No newline at end of file diff --git a/app/controllers/CountController.scala b/app/controllers/CountController.scala new file mode 100644 index 0000000..51bd50e --- /dev/null +++ b/app/controllers/CountController.scala @@ -0,0 +1,25 @@ +package controllers + +import javax.inject._ +import play.api._ +import play.api.mvc._ + +import services.Counter + +/** + * This controller demonstrates how to use dependency injection to + * bind a component into a controller class. The class creates an + * `Action` that shows an incrementing count to users. The [[Counter]] + * object is injected by the Guice dependency injection system. + */ +@Singleton +class CountController @Inject() (counter: Counter) extends Controller { + + /** + * Create an action that responds with the [[Counter]]'s current + * count. The result is plain text. This `Action` is mapped to + * `GET /count` requests by an entry in the `routes` config file. + */ + def count = Action { Ok(counter.nextCount().toString) } + +} diff --git a/app/controllers/HomeController.scala b/app/controllers/HomeController.scala new file mode 100644 index 0000000..d0af774 --- /dev/null +++ b/app/controllers/HomeController.scala @@ -0,0 +1,24 @@ +package controllers + +import javax.inject._ +import play.api._ +import play.api.mvc._ + +/** + * This controller creates an `Action` to handle HTTP requests to the + * application's home page. + */ +@Singleton +class HomeController @Inject() extends Controller { + + /** + * Create an Action to render an HTML page with a welcome message. + * The configuration in the `routes` file means that this method + * will be called when the application receives a `GET` request with + * a path of `/`. + */ + def index = Action { + Redirect(routes.Products.list) + } + +} diff --git a/app/controllers/Products.scala b/app/controllers/Products.scala new file mode 100644 index 0000000..fb7ee47 --- /dev/null +++ b/app/controllers/Products.scala @@ -0,0 +1,57 @@ +package controllers + +import javax.inject._ +import play.api._ +import play.api.mvc._ +import play.api.i18n.{Messages, I18nSupport, MessagesApi} +import play.api.data.Form +import play.api.data.Forms.{mapping, longNumber, nonEmptyText} +import models.Product + +class Products @Inject()(val messagesApi: MessagesApi) extends Controller with I18nSupport{ + + def list = Action{ implicit request => + val products = Product.findAll + + Ok(views.html.products.list(products)) + } + + def show(ean: Long) = Action{ implicit request => + Product.findByEan(ean).map{ product => + Ok(views.html.products.details(product)) + }.getOrElse(NotFound) + } + + def newProduct = Action{ implicit request => + val form = if(request.flash.get("error").isDefined) + productForm.bind(request.flash.data) + else + productForm + Ok(views.html.products.editProduct(form)) + } + + private val productForm: Form[Product] = Form( + mapping( + "ean" -> longNumber.verifying( + "validation.ean.duplicate", Product.findByEan(_).isEmpty), + "name" -> nonEmptyText, + "description" -> nonEmptyText + )(Product.apply)(Product.unapply) + ) + + def save = Action { implicit request => + val newProductForm = productForm.bindFromRequest() + + newProductForm.fold( + hasErrors = {form => + Redirect(routes.Products.newProduct()).flashing(Flash(form.data) + + ("error" -> Messages("validation.errors"))) + }, + success = {newProduct => + Product.add(newProduct) + val message = Messages("products.new.success", newProduct.name) + Redirect.routes(routes.Products.show(newProduct.ean)).flashing("success" -> message) + } + ) + } +} \ No newline at end of file diff --git a/app/filters/ExampleFilter.scala b/app/filters/ExampleFilter.scala new file mode 100644 index 0000000..ec394f6 --- /dev/null +++ b/app/filters/ExampleFilter.scala @@ -0,0 +1,33 @@ +package filters + +import akka.stream.Materializer +import javax.inject._ +import play.api.mvc._ +import scala.concurrent.{ExecutionContext, Future} + +/** + * This is a simple filter that adds a header to all requests. It's + * added to the application's list of filters by the + * [[Filters]] class. + * + * @param mat This object is needed to handle streaming of requests + * and responses. + * @param exec This class is needed to execute code asynchronously. + * It is used below by the `map` method. + */ +@Singleton +class ExampleFilter @Inject()( + implicit override val mat: Materializer, + exec: ExecutionContext) extends Filter { + + override def apply(nextFilter: RequestHeader => Future[Result]) + (requestHeader: RequestHeader): Future[Result] = { + // Run the next filter in the chain. This will call other filters + // and eventually call the action. Take the result and modify it + // by adding a new header. + nextFilter(requestHeader).map { result => + result.withHeaders("X-ExampleFilter" -> "foo") + } + } + +} diff --git a/app/models/Product.scala b/app/models/Product.scala new file mode 100644 index 0000000..39bd713 --- /dev/null +++ b/app/models/Product.scala @@ -0,0 +1,31 @@ +package models + +case class Product( + ean: Long, name: String, description: String +) + +object Product { + var products = Set( + Product(5010255079763L, "Paperclips Large", + "Large Plain Pack of 1000"), + + Product(5018206244666L, "Giant Paperclips", + "Giant Plain 51mm 100 pack"), + + Product(5018306332812L, "Paperclip Giant Plain", + "Giant Plain Pack of 10000"), + + Product(5018306312913L, "No Tear Paper Clip", + "No Tear Extra Large Pack of 1000"), + + Product(5018206244611L, "Zebra Paperclips", + "Zebra Length 28mm Assorted 150 Pack") + ) + def findAll = products.toList.sortBy(_.ean) + + def findByEan(ean: Long) = products.find(_.ean == ean) + + def add(product: Product){ + products = products + product + } +} \ No newline at end of file diff --git a/app/services/ApplicationTimer.scala b/app/services/ApplicationTimer.scala new file mode 100644 index 0000000..7ace764 --- /dev/null +++ b/app/services/ApplicationTimer.scala @@ -0,0 +1,39 @@ +package services + +import java.time.{Clock, Instant} +import javax.inject._ +import play.api.Logger +import play.api.inject.ApplicationLifecycle +import scala.concurrent.Future + +/** + * This class demonstrates how to run code when the + * application starts and stops. It starts a timer when the + * application starts. When the application stops it prints out how + * long the application was running for. + * + * This class is registered for Guice dependency injection in the + * [[Module]] class. We want the class to start when the application + * starts, so it is registered as an "eager singleton". See the code + * in the [[Module]] class to see how this happens. + * + * This class needs to run code when the server stops. It uses the + * application's [[ApplicationLifecycle]] to register a stop hook. + */ +@Singleton +class ApplicationTimer @Inject() (clock: Clock, appLifecycle: ApplicationLifecycle) { + + // This code is called when the application starts. + private val start: Instant = clock.instant + Logger.info(s"ApplicationTimer demo: Starting application at $start.") + + // When the application starts, register a stop hook with the + // ApplicationLifecycle object. The code inside the stop hook will + // be run when the application stops. + appLifecycle.addStopHook { () => + val stop: Instant = clock.instant + val runningTime: Long = stop.getEpochSecond - start.getEpochSecond + Logger.info(s"ApplicationTimer demo: Stopping application at ${clock.instant} after ${runningTime}s.") + Future.successful(()) + } +} diff --git a/app/services/Counter.scala b/app/services/Counter.scala new file mode 100644 index 0000000..fe19334 --- /dev/null +++ b/app/services/Counter.scala @@ -0,0 +1,29 @@ +package services + +import java.util.concurrent.atomic.AtomicInteger +import javax.inject._ + +/** + * This trait demonstrates how to create a component that is injected + * into a controller. The trait represents a counter that returns a + * incremented number each time it is called. + */ +trait Counter { + def nextCount(): Int +} + +/** + * This class is a concrete implementation of the [[Counter]] trait. + * It is configured for Guice dependency injection in the [[Module]] + * class. + * + * This class has a `Singleton` annotation because we need to make + * sure we only use one counter per application. Without this + * annotation we would get a new instance every time a [[Counter]] is + * injected. + */ +@Singleton +class AtomicCounter extends Counter { + private val atomicCounter = new AtomicInteger() + override def nextCount(): Int = atomicCounter.getAndIncrement() +} diff --git a/app/views/debug.scala.html b/app/views/debug.scala.html new file mode 100644 index 0000000..96d0884 --- /dev/null +++ b/app/views/debug.scala.html @@ -0,0 +1,8 @@ +@()(implicit lang: Lang) +@import play.api.Play.current + + \ No newline at end of file diff --git a/app/views/main.scala.html b/app/views/main.scala.html new file mode 100644 index 0000000..204f34d --- /dev/null +++ b/app/views/main.scala.html @@ -0,0 +1,55 @@ +@import play.api.i18n._ +@(title: String)(content: Html)(implicit flash: Flash, messages: Messages) + + + + + @title + + + + +
+ +
+ @if(flash.get("success").isDefined){ +
+ @flash.get("success") +
+ } + + @if(flash.get("error").isDefined){ +
+ @flash.get("error") +
+ } + + @content + @debug() +
+
+ + \ No newline at end of file diff --git a/app/views/products/details.scala.html b/app/views/products/details.scala.html new file mode 100644 index 0000000..a1bb79a --- /dev/null +++ b/app/views/products/details.scala.html @@ -0,0 +1,16 @@ +@(product: Product)(implicit flash: Flash, messages: Messages) + +@main(Messages("products.details", product.name)){ +

+ @tags.barcode(product.ean) + @Messages("products.details", product.name) +

+
+
@Messages("ean"):
+
@product.ean
+
@Messages("name"):
+
@product.name
+
@Messages("description"):
+
@product.description
+
+} \ No newline at end of file diff --git a/app/views/products/editProduct.scala.html b/app/views/products/editProduct.scala.html new file mode 100644 index 0000000..5fd2fb2 --- /dev/null +++ b/app/views/products/editProduct.scala.html @@ -0,0 +1,20 @@ +@(productForm: Form[Product])(implicit flash: Flash, lang: Lang) +@import helper._ +@import helper.twitterBootstrap._ + +@main(Messages("products.form")) { +

@Messages("products.form")

+ @helper.form(action = routes.Products.save()) { +
+ + @Messages("products.details", Messages("products.new")) + + @helper.inputText(productForm("ean")) + @helper.inputText(productForm("name")) + @helper.textarea(productForm("description")) +
+

+ +

+ } +} \ No newline at end of file diff --git a/app/views/products/list.scala.html b/app/views/products/list.scala.html new file mode 100644 index 0000000..064d46a --- /dev/null +++ b/app/views/products/list.scala.html @@ -0,0 +1,16 @@ +@import play.api.i18n._ +@(products: List[Product])(implicit flash: Flash, messages: Messages) + +@main(Messages("application.name")){ +
+ @for(product <- products){ +
@product.name
+
@product.description
+ } +
+

+ + @Messages("products.new.command") + +

+} \ No newline at end of file diff --git a/app/views/tags/barcode.scala.html b/app/views/tags/barcode.scala.html new file mode 100644 index 0000000..c6a99b5 --- /dev/null +++ b/app/views/tags/barcode.scala.html @@ -0,0 +1,2 @@ +@(ean: Long) +@ean \ No newline at end of file diff --git a/bin/activator b/bin/activator new file mode 100755 index 0000000..1ad728f --- /dev/null +++ b/bin/activator @@ -0,0 +1,404 @@ +#!/usr/bin/env bash + +### ------------------------------- ### +### Helper methods for BASH scripts ### +### ------------------------------- ### + +realpath () { +( + TARGET_FILE="$1" + FIX_CYGPATH="$2" + + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + + COUNT=0 + while [ -L "$TARGET_FILE" -a $COUNT -lt 100 ] + do + TARGET_FILE=$(readlink "$TARGET_FILE") + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + COUNT=$(($COUNT + 1)) + done + + # make sure we grab the actual windows path, instead of cygwin's path. + if [[ "x$FIX_CYGPATH" != "x" ]]; then + echo "$(cygwinpath "$(pwd -P)/$TARGET_FILE")" + else + echo "$(pwd -P)/$TARGET_FILE" + fi +) +} + + +# Uses uname to detect if we're in the odd cygwin environment. +is_cygwin() { + local os=$(uname -s) + case "$os" in + CYGWIN*) return 0 ;; + *) return 1 ;; + esac +} + +# TODO - Use nicer bash-isms here. +CYGWIN_FLAG=$(if is_cygwin; then echo true; else echo false; fi) + + +# This can fix cygwin style /cygdrive paths so we get the +# windows style paths. +cygwinpath() { + local file="$1" + if [[ "$CYGWIN_FLAG" == "true" ]]; then + echo $(cygpath -w $file) + else + echo $file + fi +} + +# Make something URI friendly +make_url() { + url="$1" + local nospaces=${url// /%20} + if is_cygwin; then + echo "/${nospaces//\\//}" + else + echo "$nospaces" + fi +} + +declare -a residual_args +declare -a java_args +declare -a scalac_args +declare -a sbt_commands +declare java_cmd=java +declare java_version +declare -r real_script_path="$(realpath "$0")" +declare -r sbt_home="$(realpath "$(dirname "$(dirname "$real_script_path")")")" +declare -r sbt_bin_dir="$(dirname "$real_script_path")" +declare -r app_version="1.3.12" + +declare -r script_name=activator +declare -r java_opts=( "${ACTIVATOR_OPTS[@]}" "${SBT_OPTS[@]}" "${JAVA_OPTS[@]}" "${java_opts[@]}" ) +userhome="$HOME" +if is_cygwin; then + # cygwin sets home to something f-d up, set to real windows homedir + userhome="$USERPROFILE" +fi +declare -r activator_user_home_dir="${userhome}/.activator" +declare -r java_opts_config_home="${activator_user_home_dir}/activatorconfig.txt" +declare -r java_opts_config_version="${activator_user_home_dir}/${app_version}/activatorconfig.txt" + +echoerr () { + echo 1>&2 "$@" +} +vlog () { + [[ $verbose || $debug ]] && echoerr "$@" +} +dlog () { + [[ $debug ]] && echoerr "$@" +} + +jar_file () { + echo "$(cygwinpath "${sbt_home}/libexec/activator-launch-${app_version}.jar")" +} + +acquire_sbt_jar () { + sbt_jar="$(jar_file)" + + if [[ ! -f "$sbt_jar" ]]; then + echoerr "Could not find launcher jar: $sbt_jar" + exit 2 + fi +} + +execRunner () { + # print the arguments one to a line, quoting any containing spaces + [[ $verbose || $debug ]] && echo "# Executing command line:" && { + for arg; do + if printf "%s\n" "$arg" | grep -q ' '; then + printf "\"%s\"\n" "$arg" + else + printf "%s\n" "$arg" + fi + done + echo "" + } + + # THis used to be exec, but we loose the ability to re-hook stty then + # for cygwin... Maybe we should flag the feature here... + "$@" +} + +addJava () { + dlog "[addJava] arg = '$1'" + java_args=( "${java_args[@]}" "$1" ) +} +addSbt () { + dlog "[addSbt] arg = '$1'" + sbt_commands=( "${sbt_commands[@]}" "$1" ) +} +addResidual () { + dlog "[residual] arg = '$1'" + residual_args=( "${residual_args[@]}" "$1" ) +} +addDebugger () { + addJava "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$1" +} +addConfigOpts () { + dlog "[addConfigOpts] arg = '$*'" + for item in $* + do + addJava "$item" + done +} + +get_mem_opts () { + # if we detect any of these settings in ${JAVA_OPTS} we need to NOT output our settings. + # The reason is the Xms/Xmx, if they don't line up, cause errors. + if [[ "${JAVA_OPTS}" == *-Xmx* ]] || [[ "${JAVA_OPTS}" == *-Xms* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxPermSize* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxMetaspaceSize* ]] || [[ "${JAVA_OPTS}" == *-XX:ReservedCodeCacheSize* ]]; then + echo "" + else + # a ham-fisted attempt to move some memory settings in concert + # so they need not be messed around with individually. + local mem=${1:-1024} + local codecache=$(( $mem / 8 )) + (( $codecache > 128 )) || codecache=128 + (( $codecache < 512 )) || codecache=512 + local class_metadata_size=$(( $codecache * 2 )) + local class_metadata_opt=$([[ "$java_version" < "1.8" ]] && echo "MaxPermSize" || echo "MaxMetaspaceSize") + + echo "-Xms${mem}m -Xmx${mem}m -XX:ReservedCodeCacheSize=${codecache}m -XX:${class_metadata_opt}=${class_metadata_size}m" + fi +} + +require_arg () { + local type="$1" + local opt="$2" + local arg="$3" + if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then + echo "$opt requires <$type> argument" + exit 1 + fi +} + +is_function_defined() { + declare -f "$1" > /dev/null +} + +# If we're *not* running in a terminal, and we don't have any arguments, then we need to add the 'ui' parameter +detect_terminal_for_ui() { + [[ ! -t 0 ]] && [[ "${#residual_args}" == "0" ]] && { + addResidual "ui" + } + # SPECIAL TEST FOR MAC + [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]] && [[ "${#residual_args}" == "0" ]] && { + echo "Detected MAC OSX launched script...." + echo "Swapping to UI" + addResidual "ui" + } +} + +process_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -h|-help) usage; exit 1 ;; + -v|-verbose) verbose=1 && shift ;; + -d|-debug) debug=1 && shift ;; + + -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; + -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; + -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; + -batch) exec &1 | awk -F '"' '/version/ {print $2}') + vlog "[process_args] java_version = '$java_version'" +} + +# Detect that we have java installed. +checkJava() { + local required_version="$1" + # Now check to see if it's a good enough version + if [[ "$java_version" == "" ]]; then + echo + echo No java installations was detected. + echo Please go to http://www.java.com/getjava/ and download + echo + exit 1 + elif [[ ! "$java_version" > "$required_version" ]]; then + echo + echo The java installation you have is not up to date + echo $script_name requires at least version $required_version+, you have + echo version $java_version + echo + echo Please go to http://www.java.com/getjava/ and download + echo a valid Java Runtime and install before running $script_name. + echo + exit 1 + fi +} + + +run() { + # no jar? download it. + [[ -f "$sbt_jar" ]] || acquire_sbt_jar "$sbt_version" || { + # still no jar? uh-oh. + echo "Download failed. Obtain the sbt-launch.jar manually and place it at $sbt_jar" + exit 1 + } + + # process the combined args, then reset "$@" to the residuals + process_args "$@" + detect_terminal_for_ui + set -- "${residual_args[@]}" + argumentCount=$# + + # TODO - java check should be configurable... + checkJava "1.6" + + #If we're in cygwin, we should use the windows config, and terminal hacks + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty -icanon min 1 -echo > /dev/null 2>&1 + addJava "-Djline.terminal=jline.UnixTerminal" + addJava "-Dsbt.cygwin=true" + fi + + # run sbt + execRunner "$java_cmd" \ + "-Dactivator.home=$(make_url "$sbt_home")" \ + ${SBT_OPTS:-$default_sbt_opts} \ + $(get_mem_opts $sbt_mem) \ + ${JAVA_OPTS} \ + ${java_args[@]} \ + -jar "$sbt_jar" \ + "${sbt_commands[@]}" \ + "${residual_args[@]}" + + exit_code=$? + + # Clean up the terminal from cygwin hacks. + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty icanon echo > /dev/null 2>&1 + fi + exit $exit_code +} + + +declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" +declare -r sbt_opts_file=".sbtopts" +declare -r etc_sbt_opts_file="${sbt_home}/conf/sbtopts" +declare -r win_sbt_opts_file="${sbt_home}/conf/sbtconfig.txt" + +usage() { + cat < path to global settings/plugins directory (default: ~/.sbt) + -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) + -ivy path to local Ivy repository (default: ~/.ivy2) + -mem set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) + -no-share use all local caches; no sharing + -no-global uses global caches, but does not use global ~/.sbt directory. + -jvm-debug Turn on JVM debugging, open at the given port. + -batch Disable interactive mode + + # sbt version (default: from project/build.properties if present, else latest release) + -sbt-version use the specified version of sbt + -sbt-jar use the specified jar as the sbt launcher + -sbt-rc use an RC version of sbt + -sbt-snapshot use a snapshot version of sbt + + # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) + -java-home alternate JAVA_HOME + + # jvm options and output control + JAVA_OPTS environment variable, if unset uses "$java_opts" + SBT_OPTS environment variable, if unset uses "$default_sbt_opts" + ACTIVATOR_OPTS Environment variable, if unset uses "" + .sbtopts if this file exists in the current directory, it is + prepended to the runner args + /etc/sbt/sbtopts if this file exists, it is prepended to the runner args + -Dkey=val pass -Dkey=val directly to the java runtime + -J-X pass option -X directly to the java runtime + (-J is stripped) + -S-X add -X to sbt's scalacOptions (-S is stripped) + +In the case of duplicated or conflicting options, the order above +shows precedence: JAVA_OPTS lowest, command line options highest. +EOM +} + + + +process_my_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; + -no-share) addJava "$noshare_opts" && shift ;; + -no-global) addJava "-Dsbt.global.base=$(pwd)/project/.sbtboot" && shift ;; + -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; + -sbt-dir) require_arg path "$1" "$2" && addJava "-Dsbt.global.base=$2" && shift 2 ;; + -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; + -batch) exec ^&1') do ( + if %%~j==java set JAVAINSTALLED=1 + if %%~j==openjdk set JAVAINSTALLED=1 +) + +rem Detect the same thing about javac +if "%_JAVACCMD%"=="" ( + if not "%JAVA_HOME%"=="" ( + if exist "%JAVA_HOME%\bin\javac.exe" set "_JAVACCMD=%JAVA_HOME%\bin\javac.exe" + ) +) +if "%_JAVACCMD%"=="" set _JAVACCMD=javac +for /F %%j in ('"%_JAVACCMD%" -version 2^>^&1') do ( + if %%~j==javac set JAVACINSTALLED=1 +) + +rem BAT has no logical or, so we do it OLD SCHOOL! Oppan Redmond Style +set JAVAOK=true +if not defined JAVAINSTALLED set JAVAOK=false +if not defined JAVACINSTALLED set JAVAOK=false + +if "%JAVAOK%"=="false" ( + echo. + echo A Java JDK is not installed or can't be found. + if not "%JAVA_HOME%"=="" ( + echo JAVA_HOME = "%JAVA_HOME%" + ) + echo. + echo Please go to + echo http://www.oracle.com/technetwork/java/javase/downloads/index.html + echo and download a valid Java JDK and install before running Activator. + echo. + echo If you think this message is in error, please check + echo your environment variables to see if "java.exe" and "javac.exe" are + echo available via JAVA_HOME or PATH. + echo. + if defined DOUBLECLICKED pause + exit /B 1 +) + +rem Check what Java version is being used to determine what memory options to use +for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( + set JAVA_VERSION=%%g +) + +rem Strips away the " characters +set JAVA_VERSION=%JAVA_VERSION:"=% + +rem TODO Check if there are existing mem settings in JAVA_OPTS/CFG_OPTS and use those instead of the below +for /f "delims=. tokens=1-3" %%v in ("%JAVA_VERSION%") do ( + set MAJOR=%%v + set MINOR=%%w + set BUILD=%%x + + set META_SIZE=-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=256M + if "!MINOR!" LSS "8" ( + set META_SIZE=-XX:PermSize=64M -XX:MaxPermSize=256M + ) + + set MEM_OPTS=!META_SIZE! + ) + +rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. +set _JAVA_OPTS=%JAVA_OPTS% +if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS% + +set DEBUG_OPTS= + +rem Loop through the arguments, building remaining args in args variable +set args= +:argsloop +if not "%~1"=="" ( + rem Checks if the argument contains "-D" and if true, adds argument 1 with 2 and puts an equal sign between them. + rem This is done since batch considers "=" to be a delimiter so we need to circumvent this behavior with a small hack. + set arg1=%~1 + if "!arg1:~0,2!"=="-D" ( + set "args=%args% "%~1"="%~2"" + shift + shift + goto argsloop + ) + + if "%~1"=="-jvm-debug" ( + if not "%~2"=="" ( + rem This piece of magic somehow checks that an argument is a number + for /F "delims=0123456789" %%i in ("%~2") do ( + set var="%%i" + ) + if defined var ( + rem Not a number, assume no argument given and default to 9999 + set JPDA_PORT=9999 + ) else ( + rem Port was given, shift arguments + set JPDA_PORT=%~2 + shift + ) + ) else ( + set JPDA_PORT=9999 + ) + shift + + set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=!JPDA_PORT! + goto argsloop + ) + rem else + set "args=%args% "%~1"" + shift + goto argsloop +) + +:run + +if "!args!"=="" ( + if defined DOUBLECLICKED ( + set CMDS="ui" + ) else set CMDS=!args! +) else set CMDS=!args! + +rem We add a / in front, so we get file:///C: instead of file://C: +rem Java considers the later a UNC path. +rem We also attempt a solid effort at making it URI friendly. +rem We don't even bother with UNC paths. +set JAVA_FRIENDLY_HOME_1=/!ACTIVATOR_HOME:\=/! +set JAVA_FRIENDLY_HOME=/!JAVA_FRIENDLY_HOME_1: =%%20! + +rem Checks if the command contains spaces to know if it should be wrapped in quotes or not +set NON_SPACED_CMD=%_JAVACMD: =% +if "%_JAVACMD%"=="%NON_SPACED_CMD%" %_JAVACMD% %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% +if NOT "%_JAVACMD%"=="%NON_SPACED_CMD%" "%_JAVACMD%" %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% + +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end + +@endlocal + +exit /B %ERROR_CODE% diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..6d652e4 --- /dev/null +++ b/build.sbt @@ -0,0 +1,16 @@ +name := """tutorialApp""" + +version := "1.0-SNAPSHOT" + +lazy val root = (project in file(".")).enablePlugins(PlayScala) + +scalaVersion := "2.11.7" + +libraryDependencies ++= Seq( + jdbc, + cache, + ws, + "org.scalatestplus.play" %% "scalatestplus-play" % "1.5.1" % Test, + "net.sf.barcode4j" % "barcode4j" % "2.0" +) + diff --git a/conf/application.conf b/conf/application.conf new file mode 100644 index 0000000..3b9547f --- /dev/null +++ b/conf/application.conf @@ -0,0 +1,31 @@ +# This is the main configuration file for the application. +# https://www.playframework.com/documentation/latest/ConfigFile +# ~~~~~ +# Play uses HOCON as its configuration file format. HOCON has a number +# of advantages over other config formats, but there are two things that +# can be used when modifying settings. +# +# You can include other configuration files in this main application.conf file: +#include "extra-config.conf" +# +# You can declare variables and substitute for them: +#mykey = ${some.value} +# +# And if an environment variable exists when there is no other subsitution, then +# HOCON will fall back to substituting environment variable: +#mykey = ${JAVA_HOME} +play.crypto.secret = "changeme" + +play.i18n { + # The application languages + langs = [ "en", "ro" ] + + # Whether the language cookie should be secure or not + #langCookieSecure = true + + # Whether the HTTP only attribute of the cookie should be set to true + #langCookieHttpOnly = true +} + + +environment.user=${USER} diff --git a/conf/logback.xml b/conf/logback.xml new file mode 100644 index 0000000..86ec12c --- /dev/null +++ b/conf/logback.xml @@ -0,0 +1,41 @@ + + + + + + + ${application.home:-.}/logs/application.log + + %date [%level] from %logger in %thread - %message%n%xException + + + + + + %coloredLevel %logger{15} - %message%n%xException{10} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/conf/messages b/conf/messages new file mode 100644 index 0000000..64d38ea --- /dev/null +++ b/conf/messages @@ -0,0 +1,14 @@ +application.name = Product catalog + +ean = EAN +name = Name +description = Description +products.details = Product: {0} + +products.form = Product details +products.new = (new) +products.new.command = New +products.new.submit = Add +products.new.success = Successfully added product {0}. +validation.errors = Please correct the errors in the form. +validation.ean.duplicate = A product with this EAN code already exists \ No newline at end of file diff --git a/conf/messages.ro b/conf/messages.ro new file mode 100644 index 0000000..409e367 --- /dev/null +++ b/conf/messages.ro @@ -0,0 +1,14 @@ +application.name = Catalog de produse + +ean = EAN +name = Nume +description = Descriere +products.details = Produs: {0} + +products.form = Detalii produs +products.new = (nou) +products.new.command = Nou +products.new.submit = Adauga +products.new.success = Adaugat cu succes produsul {0}. +validation.errors = Va rugam corectati erorile din formular. +validation.ean.duplicate = Un produs cu acest EAN deja exista \ No newline at end of file diff --git a/conf/routes b/conf/routes new file mode 100644 index 0000000..80a0a94 --- /dev/null +++ b/conf/routes @@ -0,0 +1,19 @@ +# Routes +# This file defines all application routes (Higher priority routes first) +# ~~~~ + +# An example controller showing a sample home page +GET / controllers.HomeController.index + +GET /products controllers.Products.list + +GET /products/:ean controllers.Products.show(ean: Long) + +GET /barcode/:ean controllers.Barcodes.barcode(ean: Long) + +POST /products controllers.Products.save + +GET /products/new controllers.Products.newProduct + +# Map static resources from the /public folder to the /assets URL path +GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset) \ No newline at end of file diff --git a/libexec/activator-launch-1.3.12.jar b/libexec/activator-launch-1.3.12.jar new file mode 100644 index 0000000..4c806e2 Binary files /dev/null and b/libexec/activator-launch-1.3.12.jar differ diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..131bd86 --- /dev/null +++ b/project/build.properties @@ -0,0 +1,4 @@ +#Activator-generated Properties +#Tue Nov 15 20:32:33 EET 2016 +template.uuid=76dbc90f-670e-44ef-8b5e-1597c4a8a485 +sbt.version=0.13.11 diff --git a/project/plugins.sbt b/project/plugins.sbt new file mode 100644 index 0000000..f464ea7 --- /dev/null +++ b/project/plugins.sbt @@ -0,0 +1,18 @@ +// The Play plugin +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.9") + +// web plugins + +addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") + +addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0") + +addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.4") + +addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.8") + +addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1") + +addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") + +addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.6") diff --git a/public/stylesheets/bootstrap.css b/public/stylesheets/bootstrap.css new file mode 100644 index 0000000..694a774 --- /dev/null +++ b/public/stylesheets/bootstrap.css @@ -0,0 +1,6686 @@ +/*! + * Bootstrap v4.0.0-alpha.5 (https://getbootstrap.com) + * Copyright 2011-2016 The Bootstrap Authors + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v4.2.0 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + line-height: 1.15; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +progress { + vertical-align: baseline; +} + +template, +[hidden] { + display: none; +} + +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:active, +a:hover { + outline-width: 0; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: inherit; +} + +b, +strong { + font-weight: bolder; +} + +dfn { + font-style: italic; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +mark { + background-color: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +img { + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +figure { + margin: 1em 40px; +} + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; +} + +button, +input, +optgroup, +select, +textarea { + font: inherit; + margin: 0; +} + +optgroup { + font-weight: bold; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +textarea { + overflow: auto; +} + +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-input-placeholder { + color: inherit; + opacity: 0.54; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +@media print { + *, + *::before, + *::after, + *::first-letter, + p::first-line, + div::first-line, + blockquote::first-line, + li::first-line { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .tag { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +*, +*::before, +*::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +@-ms-viewport { + width: device-width; +} + +html { + font-size: 16px; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 1rem; + line-height: 1.5; + color: #373a3c; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: .5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #818a91; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: bold; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +a { + color: #0275d8; + text-decoration: none; +} + +a:focus, a:hover { + color: #014c8c; + text-decoration: underline; +} + +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: none; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; +} + +[role="button"] { + cursor: pointer; +} + +a, +area, +button, +[role="button"], +input, +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation; +} + +table { + border-collapse: collapse; + background-color: transparent; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #818a91; + text-align: left; + caption-side: bottom; +} + +th { + text-align: left; +} + +label { + display: inline-block; + margin-bottom: .5rem; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +textarea { + line-height: inherit; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; +} + +input[type="search"] { + -webkit-appearance: none; +} + +output { + display: inline-block; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: normal; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 5px; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + padding: 0.5rem 1rem; + margin-bottom: 1rem; + font-size: 1.25rem; + border-left: 0.25rem solid #eceeef; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #818a91; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.blockquote-reverse { + padding-right: 1rem; + padding-left: 0; + text-align: right; + border-right: 0.25rem solid #eceeef; + border-left: 0; +} + +.blockquote-reverse .blockquote-footer::before { + content: ""; +} + +.blockquote-reverse .blockquote-footer::after { + content: "\00A0 \2014"; +} + +dl.row > dd + dt { + clear: left; +} + +.img-fluid, .carousel-inner > .carousel-item > img, +.carousel-inner > .carousel-item > a > img { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 0.25rem; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #818a91; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +code { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #bd4147; + background-color: #f7f7f9; + border-radius: 0.25rem; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + color: #373a3c; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + margin-left: auto; + margin-right: auto; + padding-left: 15px; + padding-right: 15px; +} + +.container::after { + content: ""; + display: table; + clear: both; +} + +@media (min-width: 576px) { + .container { + width: 540px; + max-width: 100%; + } +} + +@media (min-width: 768px) { + .container { + width: 720px; + max-width: 100%; + } +} + +@media (min-width: 992px) { + .container { + width: 960px; + max-width: 100%; + } +} + +@media (min-width: 1200px) { + .container { + width: 1140px; + max-width: 100%; + } +} + +.container-fluid { + margin-left: auto; + margin-right: auto; + padding-left: 15px; + padding-right: 15px; +} + +.container-fluid::after { + content: ""; + display: table; + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row::after { + content: ""; + display: table; + clear: both; +} + +@media (min-width: 576px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 768px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 992px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 1200px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +.col-xs, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +@media (min-width: 576px) { + .col-xs, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 768px) { + .col-xs, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 992px) { + .col-xs, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 1200px) { + .col-xs, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + padding-right: 15px; + padding-left: 15px; + } +} + +.col-xs-1 { + float: left; + width: 8.333333%; +} + +.col-xs-2 { + float: left; + width: 16.666667%; +} + +.col-xs-3 { + float: left; + width: 25%; +} + +.col-xs-4 { + float: left; + width: 33.333333%; +} + +.col-xs-5 { + float: left; + width: 41.666667%; +} + +.col-xs-6 { + float: left; + width: 50%; +} + +.col-xs-7 { + float: left; + width: 58.333333%; +} + +.col-xs-8 { + float: left; + width: 66.666667%; +} + +.col-xs-9 { + float: left; + width: 75%; +} + +.col-xs-10 { + float: left; + width: 83.333333%; +} + +.col-xs-11 { + float: left; + width: 91.666667%; +} + +.col-xs-12 { + float: left; + width: 100%; +} + +.pull-xs-0 { + right: auto; +} + +.pull-xs-1 { + right: 8.333333%; +} + +.pull-xs-2 { + right: 16.666667%; +} + +.pull-xs-3 { + right: 25%; +} + +.pull-xs-4 { + right: 33.333333%; +} + +.pull-xs-5 { + right: 41.666667%; +} + +.pull-xs-6 { + right: 50%; +} + +.pull-xs-7 { + right: 58.333333%; +} + +.pull-xs-8 { + right: 66.666667%; +} + +.pull-xs-9 { + right: 75%; +} + +.pull-xs-10 { + right: 83.333333%; +} + +.pull-xs-11 { + right: 91.666667%; +} + +.pull-xs-12 { + right: 100%; +} + +.push-xs-0 { + left: auto; +} + +.push-xs-1 { + left: 8.333333%; +} + +.push-xs-2 { + left: 16.666667%; +} + +.push-xs-3 { + left: 25%; +} + +.push-xs-4 { + left: 33.333333%; +} + +.push-xs-5 { + left: 41.666667%; +} + +.push-xs-6 { + left: 50%; +} + +.push-xs-7 { + left: 58.333333%; +} + +.push-xs-8 { + left: 66.666667%; +} + +.push-xs-9 { + left: 75%; +} + +.push-xs-10 { + left: 83.333333%; +} + +.push-xs-11 { + left: 91.666667%; +} + +.push-xs-12 { + left: 100%; +} + +.offset-xs-1 { + margin-left: 8.333333%; +} + +.offset-xs-2 { + margin-left: 16.666667%; +} + +.offset-xs-3 { + margin-left: 25%; +} + +.offset-xs-4 { + margin-left: 33.333333%; +} + +.offset-xs-5 { + margin-left: 41.666667%; +} + +.offset-xs-6 { + margin-left: 50%; +} + +.offset-xs-7 { + margin-left: 58.333333%; +} + +.offset-xs-8 { + margin-left: 66.666667%; +} + +.offset-xs-9 { + margin-left: 75%; +} + +.offset-xs-10 { + margin-left: 83.333333%; +} + +.offset-xs-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm-1 { + float: left; + width: 8.333333%; + } + .col-sm-2 { + float: left; + width: 16.666667%; + } + .col-sm-3 { + float: left; + width: 25%; + } + .col-sm-4 { + float: left; + width: 33.333333%; + } + .col-sm-5 { + float: left; + width: 41.666667%; + } + .col-sm-6 { + float: left; + width: 50%; + } + .col-sm-7 { + float: left; + width: 58.333333%; + } + .col-sm-8 { + float: left; + width: 66.666667%; + } + .col-sm-9 { + float: left; + width: 75%; + } + .col-sm-10 { + float: left; + width: 83.333333%; + } + .col-sm-11 { + float: left; + width: 91.666667%; + } + .col-sm-12 { + float: left; + width: 100%; + } + .pull-sm-0 { + right: auto; + } + .pull-sm-1 { + right: 8.333333%; + } + .pull-sm-2 { + right: 16.666667%; + } + .pull-sm-3 { + right: 25%; + } + .pull-sm-4 { + right: 33.333333%; + } + .pull-sm-5 { + right: 41.666667%; + } + .pull-sm-6 { + right: 50%; + } + .pull-sm-7 { + right: 58.333333%; + } + .pull-sm-8 { + right: 66.666667%; + } + .pull-sm-9 { + right: 75%; + } + .pull-sm-10 { + right: 83.333333%; + } + .pull-sm-11 { + right: 91.666667%; + } + .pull-sm-12 { + right: 100%; + } + .push-sm-0 { + left: auto; + } + .push-sm-1 { + left: 8.333333%; + } + .push-sm-2 { + left: 16.666667%; + } + .push-sm-3 { + left: 25%; + } + .push-sm-4 { + left: 33.333333%; + } + .push-sm-5 { + left: 41.666667%; + } + .push-sm-6 { + left: 50%; + } + .push-sm-7 { + left: 58.333333%; + } + .push-sm-8 { + left: 66.666667%; + } + .push-sm-9 { + left: 75%; + } + .push-sm-10 { + left: 83.333333%; + } + .push-sm-11 { + left: 91.666667%; + } + .push-sm-12 { + left: 100%; + } + .offset-sm-0 { + margin-left: 0%; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md-1 { + float: left; + width: 8.333333%; + } + .col-md-2 { + float: left; + width: 16.666667%; + } + .col-md-3 { + float: left; + width: 25%; + } + .col-md-4 { + float: left; + width: 33.333333%; + } + .col-md-5 { + float: left; + width: 41.666667%; + } + .col-md-6 { + float: left; + width: 50%; + } + .col-md-7 { + float: left; + width: 58.333333%; + } + .col-md-8 { + float: left; + width: 66.666667%; + } + .col-md-9 { + float: left; + width: 75%; + } + .col-md-10 { + float: left; + width: 83.333333%; + } + .col-md-11 { + float: left; + width: 91.666667%; + } + .col-md-12 { + float: left; + width: 100%; + } + .pull-md-0 { + right: auto; + } + .pull-md-1 { + right: 8.333333%; + } + .pull-md-2 { + right: 16.666667%; + } + .pull-md-3 { + right: 25%; + } + .pull-md-4 { + right: 33.333333%; + } + .pull-md-5 { + right: 41.666667%; + } + .pull-md-6 { + right: 50%; + } + .pull-md-7 { + right: 58.333333%; + } + .pull-md-8 { + right: 66.666667%; + } + .pull-md-9 { + right: 75%; + } + .pull-md-10 { + right: 83.333333%; + } + .pull-md-11 { + right: 91.666667%; + } + .pull-md-12 { + right: 100%; + } + .push-md-0 { + left: auto; + } + .push-md-1 { + left: 8.333333%; + } + .push-md-2 { + left: 16.666667%; + } + .push-md-3 { + left: 25%; + } + .push-md-4 { + left: 33.333333%; + } + .push-md-5 { + left: 41.666667%; + } + .push-md-6 { + left: 50%; + } + .push-md-7 { + left: 58.333333%; + } + .push-md-8 { + left: 66.666667%; + } + .push-md-9 { + left: 75%; + } + .push-md-10 { + left: 83.333333%; + } + .push-md-11 { + left: 91.666667%; + } + .push-md-12 { + left: 100%; + } + .offset-md-0 { + margin-left: 0%; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg-1 { + float: left; + width: 8.333333%; + } + .col-lg-2 { + float: left; + width: 16.666667%; + } + .col-lg-3 { + float: left; + width: 25%; + } + .col-lg-4 { + float: left; + width: 33.333333%; + } + .col-lg-5 { + float: left; + width: 41.666667%; + } + .col-lg-6 { + float: left; + width: 50%; + } + .col-lg-7 { + float: left; + width: 58.333333%; + } + .col-lg-8 { + float: left; + width: 66.666667%; + } + .col-lg-9 { + float: left; + width: 75%; + } + .col-lg-10 { + float: left; + width: 83.333333%; + } + .col-lg-11 { + float: left; + width: 91.666667%; + } + .col-lg-12 { + float: left; + width: 100%; + } + .pull-lg-0 { + right: auto; + } + .pull-lg-1 { + right: 8.333333%; + } + .pull-lg-2 { + right: 16.666667%; + } + .pull-lg-3 { + right: 25%; + } + .pull-lg-4 { + right: 33.333333%; + } + .pull-lg-5 { + right: 41.666667%; + } + .pull-lg-6 { + right: 50%; + } + .pull-lg-7 { + right: 58.333333%; + } + .pull-lg-8 { + right: 66.666667%; + } + .pull-lg-9 { + right: 75%; + } + .pull-lg-10 { + right: 83.333333%; + } + .pull-lg-11 { + right: 91.666667%; + } + .pull-lg-12 { + right: 100%; + } + .push-lg-0 { + left: auto; + } + .push-lg-1 { + left: 8.333333%; + } + .push-lg-2 { + left: 16.666667%; + } + .push-lg-3 { + left: 25%; + } + .push-lg-4 { + left: 33.333333%; + } + .push-lg-5 { + left: 41.666667%; + } + .push-lg-6 { + left: 50%; + } + .push-lg-7 { + left: 58.333333%; + } + .push-lg-8 { + left: 66.666667%; + } + .push-lg-9 { + left: 75%; + } + .push-lg-10 { + left: 83.333333%; + } + .push-lg-11 { + left: 91.666667%; + } + .push-lg-12 { + left: 100%; + } + .offset-lg-0 { + margin-left: 0%; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl-1 { + float: left; + width: 8.333333%; + } + .col-xl-2 { + float: left; + width: 16.666667%; + } + .col-xl-3 { + float: left; + width: 25%; + } + .col-xl-4 { + float: left; + width: 33.333333%; + } + .col-xl-5 { + float: left; + width: 41.666667%; + } + .col-xl-6 { + float: left; + width: 50%; + } + .col-xl-7 { + float: left; + width: 58.333333%; + } + .col-xl-8 { + float: left; + width: 66.666667%; + } + .col-xl-9 { + float: left; + width: 75%; + } + .col-xl-10 { + float: left; + width: 83.333333%; + } + .col-xl-11 { + float: left; + width: 91.666667%; + } + .col-xl-12 { + float: left; + width: 100%; + } + .pull-xl-0 { + right: auto; + } + .pull-xl-1 { + right: 8.333333%; + } + .pull-xl-2 { + right: 16.666667%; + } + .pull-xl-3 { + right: 25%; + } + .pull-xl-4 { + right: 33.333333%; + } + .pull-xl-5 { + right: 41.666667%; + } + .pull-xl-6 { + right: 50%; + } + .pull-xl-7 { + right: 58.333333%; + } + .pull-xl-8 { + right: 66.666667%; + } + .pull-xl-9 { + right: 75%; + } + .pull-xl-10 { + right: 83.333333%; + } + .pull-xl-11 { + right: 91.666667%; + } + .pull-xl-12 { + right: 100%; + } + .push-xl-0 { + left: auto; + } + .push-xl-1 { + left: 8.333333%; + } + .push-xl-2 { + left: 16.666667%; + } + .push-xl-3 { + left: 25%; + } + .push-xl-4 { + left: 33.333333%; + } + .push-xl-5 { + left: 41.666667%; + } + .push-xl-6 { + left: 50%; + } + .push-xl-7 { + left: 58.333333%; + } + .push-xl-8 { + left: 66.666667%; + } + .push-xl-9 { + left: 75%; + } + .push-xl-10 { + left: 83.333333%; + } + .push-xl-11 { + left: 91.666667%; + } + .push-xl-12 { + left: 100%; + } + .offset-xl-0 { + margin-left: 0%; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #eceeef; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #eceeef; +} + +.table tbody + tbody { + border-top: 2px solid #eceeef; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #eceeef; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #eceeef; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #dff0d8; +} + +.table-hover .table-success:hover { + background-color: #d0e9c6; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #d0e9c6; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #d9edf7; +} + +.table-hover .table-info:hover { + background-color: #c4e3f3; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #c4e3f3; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #fcf8e3; +} + +.table-hover .table-warning:hover { + background-color: #faf2cc; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #faf2cc; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f2dede; +} + +.table-hover .table-danger:hover { + background-color: #ebcccc; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #ebcccc; +} + +.thead-inverse th { + color: #fff; + background-color: #373a3c; +} + +.thead-default th { + color: #55595c; + background-color: #eceeef; +} + +.table-inverse { + color: #eceeef; + background-color: #373a3c; +} + +.table-inverse th, +.table-inverse td, +.table-inverse thead th { + border-color: #55595c; +} + +.table-inverse.table-bordered { + border: 0; +} + +.table-responsive { + display: block; + width: 100%; + min-height: 0%; + overflow-x: auto; +} + +.table-reflow thead { + float: left; +} + +.table-reflow tbody { + display: block; + white-space: nowrap; +} + +.table-reflow th, +.table-reflow td { + border-top: 1px solid #eceeef; + border-left: 1px solid #eceeef; +} + +.table-reflow th:last-child, +.table-reflow td:last-child { + border-right: 1px solid #eceeef; +} + +.table-reflow thead:last-child tr:last-child th, +.table-reflow thead:last-child tr:last-child td, +.table-reflow tbody:last-child tr:last-child th, +.table-reflow tbody:last-child tr:last-child td, +.table-reflow tfoot:last-child tr:last-child th, +.table-reflow tfoot:last-child tr:last-child td { + border-bottom: 1px solid #eceeef; +} + +.table-reflow tr { + float: left; +} + +.table-reflow tr th, +.table-reflow tr td { + display: block !important; + border: 1px solid #eceeef; +} + +.form-control { + display: block; + width: 100%; + padding: 0.5rem 0.75rem; + font-size: 1rem; + line-height: 1.25; + color: #55595c; + background-color: #fff; + background-image: none; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #55595c; + background-color: #fff; + border-color: #66afe9; + outline: none; +} + +.form-control::-webkit-input-placeholder { + color: #999; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #999; + opacity: 1; +} + +.form-control::placeholder { + color: #999; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #eceeef; + opacity: 1; +} + +.form-control:disabled { + cursor: not-allowed; +} + +select.form-control:not([size]):not([multiple]) { + height: calc(2.5rem - 2px); +} + +select.form-control:focus::-ms-value { + color: #55595c; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; +} + +.col-form-label { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + margin-bottom: 0; +} + +.col-form-label-lg { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + font-size: 0.875rem; +} + +.col-form-legend { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + margin-bottom: 0; + font-size: 1rem; +} + +.form-control-static { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + line-height: 1.25; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-static.form-control-sm, .input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn, .form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), +.input-group-sm > select.input-group-addon:not([size]):not([multiple]), +.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: 1.8125rem; +} + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), +.input-group-lg > select.input-group-addon:not([size]):not([multiple]), +.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: 3.166667rem; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-check { + position: relative; + display: block; + margin-bottom: 0.75rem; +} + +.form-check + .form-check { + margin-top: -.25rem; +} + +.form-check.disabled .form-check-label { + color: #818a91; + cursor: not-allowed; +} + +.form-check-label { + padding-left: 1.25rem; + margin-bottom: 0; + cursor: pointer; +} + +.form-check-input { + position: absolute; + margin-top: .25rem; + margin-left: -1.25rem; +} + +.form-check-input:only-child { + position: static; +} + +.form-check-inline { + position: relative; + display: inline-block; + padding-left: 1.25rem; + margin-bottom: 0; + vertical-align: middle; + cursor: pointer; +} + +.form-check-inline + .form-check-inline { + margin-left: .75rem; +} + +.form-check-inline.disabled { + color: #818a91; + cursor: not-allowed; +} + +.form-control-feedback { + margin-top: 0.25rem; +} + +.form-control-success, +.form-control-warning, +.form-control-danger { + padding-right: 2.25rem; + background-repeat: no-repeat; + background-position: center right 0.625rem; + -webkit-background-size: 1.25rem 1.25rem; + background-size: 1.25rem 1.25rem; +} + +.has-success .form-control-feedback, +.has-success .form-control-label, +.has-success .form-check-label, +.has-success .form-check-inline, +.has-success .custom-control { + color: #5cb85c; +} + +.has-success .form-control { + border-color: #5cb85c; +} + +.has-success .form-control:focus { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #a3d7a3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #a3d7a3; +} + +.has-success .input-group-addon { + color: #5cb85c; + border-color: #5cb85c; + background-color: #eaf6ea; +} + +.has-success .form-control-success { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#5cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E"); +} + +.has-warning .form-control-feedback, +.has-warning .form-control-label, +.has-warning .form-check-label, +.has-warning .form-check-inline, +.has-warning .custom-control { + color: #f0ad4e; +} + +.has-warning .form-control { + border-color: #f0ad4e; +} + +.has-warning .form-control:focus { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f8d9ac; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f8d9ac; +} + +.has-warning .input-group-addon { + color: #f0ad4e; + border-color: #f0ad4e; + background-color: white; +} + +.has-warning .form-control-warning { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E"); +} + +.has-danger .form-control-feedback, +.has-danger .form-control-label, +.has-danger .form-check-label, +.has-danger .form-check-inline, +.has-danger .custom-control { + color: #d9534f; +} + +.has-danger .form-control { + border-color: #d9534f; +} + +.has-danger .form-control:focus { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #eba5a3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #eba5a3; +} + +.has-danger .input-group-addon { + color: #d9534f; + border-color: #d9534f; + background-color: #fdf7f7; +} + +.has-danger .form-control-danger { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E"); +} + +@media (min-width: 576px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + width: auto; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .form-control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-check { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-check-label { + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.btn { + display: inline-block; + font-weight: normal; + line-height: 1.25; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.5rem 1rem; + font-size: 1rem; + border-radius: 0.25rem; +} + +.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:focus, .btn:hover { + text-decoration: none; +} + +.btn.focus { + text-decoration: none; +} + +.btn:active, .btn.active { + background-image: none; + outline: 0; +} + +.btn.disabled, .btn:disabled { + cursor: not-allowed; + opacity: .65; +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary:hover { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:active, .btn-primary.active, +.open > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #025aa5; + border-color: #01549b; + background-image: none; +} + +.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, +.open > .btn-primary.dropdown-toggle:hover, +.open > .btn-primary.dropdown-toggle:focus, +.open > .btn-primary.dropdown-toggle.focus { + color: #fff; + background-color: #014682; + border-color: #01315a; +} + +.btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary:disabled:focus, .btn-primary:disabled.focus { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary.disabled:hover, .btn-primary:disabled:hover { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-secondary { + color: #373a3c; + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary:hover { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:focus, .btn-secondary.focus { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:active, .btn-secondary.active, +.open > .btn-secondary.dropdown-toggle { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; + background-image: none; +} + +.btn-secondary:active:hover, .btn-secondary:active:focus, .btn-secondary:active.focus, .btn-secondary.active:hover, .btn-secondary.active:focus, .btn-secondary.active.focus, +.open > .btn-secondary.dropdown-toggle:hover, +.open > .btn-secondary.dropdown-toggle:focus, +.open > .btn-secondary.dropdown-toggle.focus { + color: #373a3c; + background-color: #d4d4d4; + border-color: #8c8c8c; +} + +.btn-secondary.disabled:focus, .btn-secondary.disabled.focus, .btn-secondary:disabled:focus, .btn-secondary:disabled.focus { + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary.disabled:hover, .btn-secondary:disabled:hover { + background-color: #fff; + border-color: #ccc; +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:active, .btn-info.active, +.open > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; + background-image: none; +} + +.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, +.open > .btn-info.dropdown-toggle:hover, +.open > .btn-info.dropdown-toggle:focus, +.open > .btn-info.dropdown-toggle.focus { + color: #fff; + background-color: #269abc; + border-color: #1f7e9a; +} + +.btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info:disabled:focus, .btn-info:disabled.focus { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info.disabled:hover, .btn-info:disabled:hover { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:active, .btn-success.active, +.open > .btn-success.dropdown-toggle { + color: #fff; + background-color: #449d44; + border-color: #419641; + background-image: none; +} + +.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, +.open > .btn-success.dropdown-toggle:hover, +.open > .btn-success.dropdown-toggle:focus, +.open > .btn-success.dropdown-toggle.focus { + color: #fff; + background-color: #398439; + border-color: #2d672d; +} + +.btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success:disabled:focus, .btn-success:disabled.focus { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success.disabled:hover, .btn-success:disabled:hover { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:focus, .btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:active, .btn-warning.active, +.open > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; + background-image: none; +} + +.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, +.open > .btn-warning.dropdown-toggle:hover, +.open > .btn-warning.dropdown-toggle:focus, +.open > .btn-warning.dropdown-toggle.focus { + color: #fff; + background-color: #d58512; + border-color: #b06d0f; +} + +.btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning:disabled:focus, .btn-warning:disabled.focus { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning.disabled:hover, .btn-warning:disabled:hover { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:active, .btn-danger.active, +.open > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; + background-image: none; +} + +.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, +.open > .btn-danger.dropdown-toggle:hover, +.open > .btn-danger.dropdown-toggle:focus, +.open > .btn-danger.dropdown-toggle.focus { + color: #fff; + background-color: #ac2925; + border-color: #8b211e; +} + +.btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger:disabled:focus, .btn-danger:disabled.focus { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger.disabled:hover, .btn-danger:disabled:hover { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-outline-primary { + color: #0275d8; + background-image: none; + background-color: transparent; + border-color: #0275d8; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-outline-primary:active, .btn-outline-primary.active, +.open > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-outline-primary:active:hover, .btn-outline-primary:active:focus, .btn-outline-primary:active.focus, .btn-outline-primary.active:hover, .btn-outline-primary.active:focus, .btn-outline-primary.active.focus, +.open > .btn-outline-primary.dropdown-toggle:hover, +.open > .btn-outline-primary.dropdown-toggle:focus, +.open > .btn-outline-primary.dropdown-toggle.focus { + color: #fff; + background-color: #014682; + border-color: #01315a; +} + +.btn-outline-primary.disabled:focus, .btn-outline-primary.disabled.focus, .btn-outline-primary:disabled:focus, .btn-outline-primary:disabled.focus { + border-color: #43a7fd; +} + +.btn-outline-primary.disabled:hover, .btn-outline-primary:disabled:hover { + border-color: #43a7fd; +} + +.btn-outline-secondary { + color: #ccc; + background-image: none; + background-color: transparent; + border-color: #ccc; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-outline-secondary:active, .btn-outline-secondary.active, +.open > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-outline-secondary:active:hover, .btn-outline-secondary:active:focus, .btn-outline-secondary:active.focus, .btn-outline-secondary.active:hover, .btn-outline-secondary.active:focus, .btn-outline-secondary.active.focus, +.open > .btn-outline-secondary.dropdown-toggle:hover, +.open > .btn-outline-secondary.dropdown-toggle:focus, +.open > .btn-outline-secondary.dropdown-toggle.focus { + color: #fff; + background-color: #a1a1a1; + border-color: #8c8c8c; +} + +.btn-outline-secondary.disabled:focus, .btn-outline-secondary.disabled.focus, .btn-outline-secondary:disabled:focus, .btn-outline-secondary:disabled.focus { + border-color: white; +} + +.btn-outline-secondary.disabled:hover, .btn-outline-secondary:disabled:hover { + border-color: white; +} + +.btn-outline-info { + color: #5bc0de; + background-image: none; + background-color: transparent; + border-color: #5bc0de; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-outline-info:active, .btn-outline-info.active, +.open > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-outline-info:active:hover, .btn-outline-info:active:focus, .btn-outline-info:active.focus, .btn-outline-info.active:hover, .btn-outline-info.active:focus, .btn-outline-info.active.focus, +.open > .btn-outline-info.dropdown-toggle:hover, +.open > .btn-outline-info.dropdown-toggle:focus, +.open > .btn-outline-info.dropdown-toggle.focus { + color: #fff; + background-color: #269abc; + border-color: #1f7e9a; +} + +.btn-outline-info.disabled:focus, .btn-outline-info.disabled.focus, .btn-outline-info:disabled:focus, .btn-outline-info:disabled.focus { + border-color: #b0e1ef; +} + +.btn-outline-info.disabled:hover, .btn-outline-info:disabled:hover { + border-color: #b0e1ef; +} + +.btn-outline-success { + color: #5cb85c; + background-image: none; + background-color: transparent; + border-color: #5cb85c; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-outline-success:active, .btn-outline-success.active, +.open > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-outline-success:active:hover, .btn-outline-success:active:focus, .btn-outline-success:active.focus, .btn-outline-success.active:hover, .btn-outline-success.active:focus, .btn-outline-success.active.focus, +.open > .btn-outline-success.dropdown-toggle:hover, +.open > .btn-outline-success.dropdown-toggle:focus, +.open > .btn-outline-success.dropdown-toggle.focus { + color: #fff; + background-color: #398439; + border-color: #2d672d; +} + +.btn-outline-success.disabled:focus, .btn-outline-success.disabled.focus, .btn-outline-success:disabled:focus, .btn-outline-success:disabled.focus { + border-color: #a3d7a3; +} + +.btn-outline-success.disabled:hover, .btn-outline-success:disabled:hover { + border-color: #a3d7a3; +} + +.btn-outline-warning { + color: #f0ad4e; + background-image: none; + background-color: transparent; + border-color: #f0ad4e; +} + +.btn-outline-warning:hover { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-outline-warning:active, .btn-outline-warning.active, +.open > .btn-outline-warning.dropdown-toggle { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-outline-warning:active:hover, .btn-outline-warning:active:focus, .btn-outline-warning:active.focus, .btn-outline-warning.active:hover, .btn-outline-warning.active:focus, .btn-outline-warning.active.focus, +.open > .btn-outline-warning.dropdown-toggle:hover, +.open > .btn-outline-warning.dropdown-toggle:focus, +.open > .btn-outline-warning.dropdown-toggle.focus { + color: #fff; + background-color: #d58512; + border-color: #b06d0f; +} + +.btn-outline-warning.disabled:focus, .btn-outline-warning.disabled.focus, .btn-outline-warning:disabled:focus, .btn-outline-warning:disabled.focus { + border-color: #f8d9ac; +} + +.btn-outline-warning.disabled:hover, .btn-outline-warning:disabled:hover { + border-color: #f8d9ac; +} + +.btn-outline-danger { + color: #d9534f; + background-image: none; + background-color: transparent; + border-color: #d9534f; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-outline-danger:active, .btn-outline-danger.active, +.open > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-outline-danger:active:hover, .btn-outline-danger:active:focus, .btn-outline-danger:active.focus, .btn-outline-danger.active:hover, .btn-outline-danger.active:focus, .btn-outline-danger.active.focus, +.open > .btn-outline-danger.dropdown-toggle:hover, +.open > .btn-outline-danger.dropdown-toggle:focus, +.open > .btn-outline-danger.dropdown-toggle.focus { + color: #fff; + background-color: #ac2925; + border-color: #8b211e; +} + +.btn-outline-danger.disabled:focus, .btn-outline-danger.disabled.focus, .btn-outline-danger:disabled:focus, .btn-outline-danger:disabled.focus { + border-color: #eba5a3; +} + +.btn-outline-danger.disabled:hover, .btn-outline-danger:disabled:hover { + border-color: #eba5a3; +} + +.btn-link { + font-weight: normal; + color: #0275d8; + border-radius: 0; +} + +.btn-link, .btn-link:active, .btn-link.active, .btn-link:disabled { + background-color: transparent; +} + +.btn-link, .btn-link:focus, .btn-link:active { + border-color: transparent; +} + +.btn-link:hover { + border-color: transparent; +} + +.btn-link:focus, .btn-link:hover { + color: #014c8c; + text-decoration: underline; + background-color: transparent; +} + +.btn-link:disabled:focus, .btn-link:disabled:hover { + color: #818a91; + text-decoration: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +tr.collapse.in { + display: table-row; +} + +tbody.collapse.in { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height; + -o-transition-property: height; + transition-property: height; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.3em; + vertical-align: middle; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropup .dropdown-toggle::after { + border-top: 0; + border-bottom: 0.3em solid; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #373a3c; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-divider { + height: 1px; + margin: 0.5rem 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 3px 1.5rem; + clear: both; + font-weight: normal; + color: #373a3c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} + +.dropdown-item:focus, .dropdown-item:hover { + color: #2b2d2f; + text-decoration: none; + background-color: #f5f5f5; +} + +.dropdown-item.active, .dropdown-item.active:focus, .dropdown-item.active:hover { + color: #fff; + text-decoration: none; + background-color: #0275d8; + outline: 0; +} + +.dropdown-item.disabled, .dropdown-item.disabled:focus, .dropdown-item.disabled:hover { + color: #818a91; +} + +.dropdown-item.disabled:focus, .dropdown-item.disabled:hover { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #818a91; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 0.3em solid; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 0.125rem; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; + margin-bottom: 0; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + margin-left: -0.5rem; +} + +.btn-toolbar::after { + content: ""; + display: table; + clear: both; +} + +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} + +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 0.5rem; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn + .dropdown-toggle-split::after { + margin-left: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 1.125rem; + padding-left: 1.125rem; +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret, .btn-group-lg > .btn .caret { + border-width: 0.3em 0.3em 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { + border-width: 0 0.3em 0.3em; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group::after { + content: ""; + display: table; + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + width: 100%; + display: table; + border-collapse: separate; +} + +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} + +.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover { + z-index: 3; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: normal; + line-height: 1.25; + color: #55595c; + text-align: center; + background-color: #eceeef; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.input-group-addon.form-control-sm, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.input-group-addon.form-control-lg, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:not(:last-child), +.input-group-addon:not(:last-child), +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group > .btn, +.input-group-btn:not(:last-child) > .dropdown-toggle, +.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.input-group-addon:not(:last-child) { + border-right: 0; +} + +.input-group .form-control:not(:first-child), +.input-group-addon:not(:first-child), +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group > .btn, +.input-group-btn:not(:first-child) > .dropdown-toggle, +.input-group-btn:not(:last-child) > .btn:not(:first-child), +.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.form-control + .input-group-addon:not(:first-child) { + border-left: 0; +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -1px; +} + +.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover { + z-index: 3; +} + +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group { + margin-right: -1px; +} + +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group { + z-index: 2; + margin-left: -1px; +} + +.input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover, +.input-group-btn:not(:first-child) > .btn-group:focus, +.input-group-btn:not(:first-child) > .btn-group:active, +.input-group-btn:not(:first-child) > .btn-group:hover { + z-index: 3; +} + +.custom-control { + position: relative; + display: inline-block; + padding-left: 1.5rem; + cursor: pointer; +} + +.custom-control + .custom-control { + margin-left: 1rem; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-indicator { + color: #fff; + background-color: #0074d9; +} + +.custom-control-input:focus ~ .custom-control-indicator { + -webkit-box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #0074d9; + box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #0074d9; +} + +.custom-control-input:active ~ .custom-control-indicator { + color: #fff; + background-color: #84c6ff; +} + +.custom-control-input:disabled ~ .custom-control-indicator { + cursor: not-allowed; + background-color: #eee; +} + +.custom-control-input:disabled ~ .custom-control-description { + color: #767676; + cursor: not-allowed; +} + +.custom-control-indicator { + position: absolute; + top: .25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: center center; + -webkit-background-size: 50% 50%; + background-size: 50% 50%; +} + +.custom-checkbox .custom-control-indicator { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator { + background-color: #0074d9; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#fff' d='M0 2h4'/%3E%3C/svg%3E"); +} + +.custom-radio .custom-control-indicator { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#fff'/%3E%3C/svg%3E"); +} + +.custom-controls-stacked .custom-control { + float: left; + clear: left; +} + +.custom-controls-stacked .custom-control + .custom-control { + margin-left: 0; +} + +.custom-select { + display: inline-block; + max-width: 100%; + height: calc(2.5rem - 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + padding-right: 0.75rem \9; + color: #55595c; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + background-image: none \9; + -webkit-background-size: 8px 10px; + background-size: 8px 10px; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; + -moz-appearance: none; + -webkit-appearance: none; +} + +.custom-select:focus { + border-color: #51a7e8; + outline: none; +} + +.custom-select:focus::-ms-value { + color: #55595c; + background-color: #fff; +} + +.custom-select:disabled { + color: #818a91; + cursor: not-allowed; + background-color: #eceeef; +} + +.custom-select::-ms-expand { + opacity: 0; +} + +.custom-select-sm { + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} + +.custom-file { + position: relative; + display: inline-block; + max-width: 100%; + height: 2.5rem; + cursor: pointer; +} + +.custom-file-input { + min-width: 14rem; + max-width: 100%; + margin: 0; + filter: alpha(opacity=0); + opacity: 0; +} + +.custom-file-control { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: 2.5rem; + padding: 0.5rem 1rem; + line-height: 1.5; + color: #555; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 0.25rem; +} + +.custom-file-control:lang(en)::after { + content: "Choose file..."; +} + +.custom-file-control::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + z-index: 6; + display: block; + height: 2.5rem; + padding: 0.5rem 1rem; + line-height: 1.5; + color: #555; + background-color: #eee; + border: 1px solid #ddd; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-file-control:lang(en)::before { + content: "Browse"; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: inline-block; +} + +.nav-link:focus, .nav-link:hover { + text-decoration: none; +} + +.nav-link.disabled { + color: #818a91; +} + +.nav-link.disabled, .nav-link.disabled:focus, .nav-link.disabled:hover { + color: #818a91; + cursor: not-allowed; + background-color: transparent; +} + +.nav-inline .nav-item { + display: inline-block; +} + +.nav-inline .nav-item + .nav-item, +.nav-inline .nav-link + .nav-link { + margin-left: 1rem; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs::after { + content: ""; + display: table; + clear: both; +} + +.nav-tabs .nav-item { + float: left; + margin-bottom: -1px; +} + +.nav-tabs .nav-item + .nav-item { + margin-left: 0.2rem; +} + +.nav-tabs .nav-link { + display: block; + padding: 0.5em 1em; + border: 1px solid transparent; + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { + border-color: #eceeef #eceeef #ddd; +} + +.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:focus, .nav-tabs .nav-link.disabled:hover { + color: #818a91; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, .nav-tabs .nav-link.active:focus, .nav-tabs .nav-link.active:hover, +.nav-tabs .nav-item.open .nav-link, +.nav-tabs .nav-item.open .nav-link:focus, +.nav-tabs .nav-item.open .nav-link:hover { + color: #55595c; + background-color: #fff; + border-color: #ddd #ddd transparent; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.nav-pills::after { + content: ""; + display: table; + clear: both; +} + +.nav-pills .nav-item { + float: left; +} + +.nav-pills .nav-item + .nav-item { + margin-left: 0.2rem; +} + +.nav-pills .nav-link { + display: block; + padding: 0.5em 1em; + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, .nav-pills .nav-link.active:focus, .nav-pills .nav-link.active:hover, +.nav-pills .nav-item.open .nav-link, +.nav-pills .nav-item.open .nav-link:focus, +.nav-pills .nav-item.open .nav-link:hover { + color: #fff; + cursor: default; + background-color: #0275d8; +} + +.nav-stacked .nav-item { + display: block; + float: none; +} + +.nav-stacked .nav-item + .nav-item { + margin-top: 0.2rem; + margin-left: 0; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + padding: 0.5rem 1rem; +} + +.navbar::after { + content: ""; + display: table; + clear: both; +} + +@media (min-width: 576px) { + .navbar { + border-radius: 0.25rem; + } +} + +.navbar-full { + z-index: 1000; +} + +@media (min-width: 576px) { + .navbar-full { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} + +@media (min-width: 576px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1030; + width: 100%; +} + +@media (min-width: 576px) { + .navbar-sticky-top { + border-radius: 0; + } +} + +.navbar-brand { + float: left; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; +} + +.navbar-brand:focus, .navbar-brand:hover { + text-decoration: none; +} + +.navbar-divider { + float: left; + width: 1px; + padding-top: 0.425rem; + padding-bottom: 0.425rem; + margin-right: 1rem; + margin-left: 1rem; + overflow: hidden; +} + +.navbar-divider::before { + content: "\00a0"; +} + +.navbar-text { + display: inline-block; + padding-top: .425rem; + padding-bottom: .425rem; +} + +.navbar-toggler { + width: 2.5em; + height: 2em; + padding: 0.5rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background: transparent no-repeat center center; + -webkit-background-size: 24px 24px; + background-size: 24px 24px; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:focus, .navbar-toggler:hover { + text-decoration: none; +} + +.navbar-toggleable-xs::after { + content: ""; + display: table; + clear: both; +} + +@media (max-width: 575px) { + .navbar-toggleable-xs .navbar-brand { + display: block; + float: none; + margin-top: .5rem; + margin-right: 0; + } + .navbar-toggleable-xs .navbar-nav { + margin-top: .5rem; + margin-bottom: .5rem; + } + .navbar-toggleable-xs .navbar-nav .dropdown-menu { + position: static; + float: none; + } +} + +@media (min-width: 576px) { + .navbar-toggleable-xs { + display: block; + } +} + +.navbar-toggleable-sm::after { + content: ""; + display: table; + clear: both; +} + +@media (max-width: 767px) { + .navbar-toggleable-sm .navbar-brand { + display: block; + float: none; + margin-top: .5rem; + margin-right: 0; + } + .navbar-toggleable-sm .navbar-nav { + margin-top: .5rem; + margin-bottom: .5rem; + } + .navbar-toggleable-sm .navbar-nav .dropdown-menu { + position: static; + float: none; + } +} + +@media (min-width: 768px) { + .navbar-toggleable-sm { + display: block; + } +} + +.navbar-toggleable-md::after { + content: ""; + display: table; + clear: both; +} + +@media (max-width: 991px) { + .navbar-toggleable-md .navbar-brand { + display: block; + float: none; + margin-top: .5rem; + margin-right: 0; + } + .navbar-toggleable-md .navbar-nav { + margin-top: .5rem; + margin-bottom: .5rem; + } + .navbar-toggleable-md .navbar-nav .dropdown-menu { + position: static; + float: none; + } +} + +@media (min-width: 992px) { + .navbar-toggleable-md { + display: block; + } +} + +.navbar-toggleable-lg::after { + content: ""; + display: table; + clear: both; +} + +@media (max-width: 1199px) { + .navbar-toggleable-lg .navbar-brand { + display: block; + float: none; + margin-top: .5rem; + margin-right: 0; + } + .navbar-toggleable-lg .navbar-nav { + margin-top: .5rem; + margin-bottom: .5rem; + } + .navbar-toggleable-lg .navbar-nav .dropdown-menu { + position: static; + float: none; + } +} + +@media (min-width: 1200px) { + .navbar-toggleable-lg { + display: block; + } +} + +.navbar-toggleable-xl { + display: block; +} + +.navbar-toggleable-xl::after { + content: ""; + display: table; + clear: both; +} + +.navbar-toggleable-xl .navbar-brand { + display: block; + float: none; + margin-top: .5rem; + margin-right: 0; +} + +.navbar-toggleable-xl .navbar-nav { + margin-top: .5rem; + margin-bottom: .5rem; +} + +.navbar-toggleable-xl .navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-nav .nav-item { + float: left; +} + +.navbar-nav .nav-link { + display: block; + padding-top: .425rem; + padding-bottom: .425rem; +} + +.navbar-nav .nav-link + .nav-link { + margin-left: 1rem; +} + +.navbar-nav .nav-item + .nav-item { + margin-left: 1rem; +} + +.navbar-light .navbar-brand, +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover, +.navbar-light .navbar-toggler:focus, +.navbar-light .navbar-toggler:hover { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .open > .nav-link, .navbar-light .navbar-nav .open > .nav-link:focus, .navbar-light .navbar-nav .open > .nav-link:hover, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .active > .nav-link:focus, +.navbar-light .navbar-nav .active > .nav-link:hover, +.navbar-light .navbar-nav .nav-link.open, +.navbar-light .navbar-nav .nav-link.open:focus, +.navbar-light .navbar-nav .nav-link.open:hover, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .nav-link.active:focus, +.navbar-light .navbar-nav .nav-link.active:hover { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-divider { + background-color: rgba(0, 0, 0, 0.075); +} + +.navbar-dark .navbar-brand, +.navbar-dark .navbar-toggler { + color: white; +} + +.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover, +.navbar-dark .navbar-toggler:focus, +.navbar-dark .navbar-toggler:hover { + color: white; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .open > .nav-link, .navbar-dark .navbar-nav .open > .nav-link:focus, .navbar-dark .navbar-nav .open > .nav-link:hover, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link:focus, +.navbar-dark .navbar-nav .active > .nav-link:hover, +.navbar-dark .navbar-nav .nav-link.open, +.navbar-dark .navbar-nav .nav-link.open:focus, +.navbar-dark .navbar-nav .nav-link.open:hover, +.navbar-dark .navbar-nav .nav-link.active, +.navbar-dark .navbar-nav .nav-link.active:focus, +.navbar-dark .navbar-nav .nav-link.active:hover { + color: white; +} + +.navbar-dark .navbar-toggler { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-divider { + background-color: rgba(255, 255, 255, 0.075); +} + +.navbar-toggleable-xs::after { + content: ""; + display: table; + clear: both; +} + +@media (max-width: 575px) { + .navbar-toggleable-xs .navbar-nav .nav-item { + float: none; + margin-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-toggleable-xs { + display: block !important; + } +} + +.navbar-toggleable-sm::after { + content: ""; + display: table; + clear: both; +} + +@media (max-width: 767px) { + .navbar-toggleable-sm .navbar-nav .nav-item { + float: none; + margin-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-toggleable-sm { + display: block !important; + } +} + +.navbar-toggleable-md::after { + content: ""; + display: table; + clear: both; +} + +@media (max-width: 991px) { + .navbar-toggleable-md .navbar-nav .nav-item { + float: none; + margin-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-toggleable-md { + display: block !important; + } +} + +.card { + position: relative; + display: block; + margin-bottom: 0.75rem; + background-color: #fff; + border-radius: 0.25rem; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-block { + padding: 1.25rem; +} + +.card-block::after { + content: ""; + display: table; + clear: both; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: #f5f5f5; + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header::after { + content: ""; + display: table; + clear: both; +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: #f5f5f5; + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer::after { + content: ""; + display: table; + clear: both; +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-primary { + background-color: #0275d8; + border-color: #0275d8; +} + +.card-primary .card-header, +.card-primary .card-footer { + background-color: transparent; +} + +.card-success { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.card-success .card-header, +.card-success .card-footer { + background-color: transparent; +} + +.card-info { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.card-info .card-header, +.card-info .card-footer { + background-color: transparent; +} + +.card-warning { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.card-warning .card-header, +.card-warning .card-footer { + background-color: transparent; +} + +.card-danger { + background-color: #d9534f; + border-color: #d9534f; +} + +.card-danger .card-header, +.card-danger .card-footer { + background-color: transparent; +} + +.card-outline-primary { + background-color: transparent; + border-color: #0275d8; +} + +.card-outline-secondary { + background-color: transparent; + border-color: #ccc; +} + +.card-outline-info { + background-color: transparent; + border-color: #5bc0de; +} + +.card-outline-success { + background-color: transparent; + border-color: #5cb85c; +} + +.card-outline-warning { + background-color: transparent; + border-color: #f0ad4e; +} + +.card-outline-danger { + background-color: transparent; + border-color: #d9534f; +} + +.card-inverse .card-header, +.card-inverse .card-footer { + border-color: rgba(255, 255, 255, 0.2); +} + +.card-inverse .card-header, +.card-inverse .card-footer, +.card-inverse .card-title, +.card-inverse .card-blockquote { + color: #fff; +} + +.card-inverse .card-link, +.card-inverse .card-text, +.card-inverse .card-subtitle, +.card-inverse .card-blockquote .blockquote-footer { + color: rgba(255, 255, 255, 0.65); +} + +.card-inverse .card-link:focus, .card-inverse .card-link:hover { + color: #fff; +} + +.card-blockquote { + padding: 0; + margin-bottom: 0; + border-left: 0; +} + +.card-img { + border-radius: calc(0.25rem - 1px); +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img-top { + border-top-right-radius: calc(0.25rem - 1px); + border-top-left-radius: calc(0.25rem - 1px); +} + +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +@media (min-width: 576px) { + .card-deck { + display: table; + width: 100%; + margin-bottom: 0.75rem; + table-layout: fixed; + border-spacing: 1.25rem 0; + } + .card-deck .card { + display: table-cell; + margin-bottom: 0; + vertical-align: top; + } + .card-deck-wrapper { + margin-right: -1.25rem; + margin-left: -1.25rem; + } +} + +@media (min-width: 576px) { + .card-group { + display: table; + width: 100%; + table-layout: fixed; + } + .card-group .card { + display: table-cell; + vertical-align: top; + } + .card-group .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group .card:first-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-top { + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0; + } + .card-group .card:last-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-top { + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) { + border-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) .card-img-top, + .card-group .card:not(:first-child):not(:last-child) .card-img-bottom { + border-radius: 0; + } +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.breadcrumb { + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #eceeef; + border-radius: 0.25rem; +} + +.breadcrumb::after { + content: ""; + display: table; + clear: both; +} + +.breadcrumb-item { + float: left; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + padding-left: 0.5rem; + color: #818a91; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #818a91; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin-top: 1rem; + margin-bottom: 1rem; + border-radius: 0.25rem; +} + +.page-item { + display: inline; +} + +.page-item:first-child .page-link { + margin-left: 0; + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.page-item.active .page-link, .page-item.active .page-link:focus, .page-item.active .page-link:hover { + z-index: 2; + color: #fff; + cursor: default; + background-color: #0275d8; + border-color: #0275d8; +} + +.page-item.disabled .page-link, .page-item.disabled .page-link:focus, .page-item.disabled .page-link:hover { + color: #818a91; + pointer-events: none; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} + +.page-link { + position: relative; + float: left; + padding: 0.5rem 0.75rem; + margin-left: -1px; + color: #0275d8; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} + +.page-link:focus, .page-link:hover { + color: #014c8c; + background-color: #eceeef; + border-color: #ddd; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; +} + +.pagination-lg .page-item:first-child .page-link { + border-bottom-left-radius: 0.3rem; + border-top-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-bottom-right-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.275rem 0.75rem; + font-size: 0.875rem; +} + +.pagination-sm .page-item:first-child .page-link { + border-bottom-left-radius: 0.2rem; + border-top-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-bottom-right-radius: 0.2rem; + border-top-right-radius: 0.2rem; +} + +.tag { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} + +.tag:empty { + display: none; +} + +.btn .tag { + position: relative; + top: -1px; +} + +a.tag:focus, a.tag:hover { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.tag-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.tag-default { + background-color: #818a91; +} + +.tag-default[href]:focus, .tag-default[href]:hover { + background-color: #687077; +} + +.tag-primary { + background-color: #0275d8; +} + +.tag-primary[href]:focus, .tag-primary[href]:hover { + background-color: #025aa5; +} + +.tag-success { + background-color: #5cb85c; +} + +.tag-success[href]:focus, .tag-success[href]:hover { + background-color: #449d44; +} + +.tag-info { + background-color: #5bc0de; +} + +.tag-info[href]:focus, .tag-info[href]:hover { + background-color: #31b0d5; +} + +.tag-warning { + background-color: #f0ad4e; +} + +.tag-warning[href]:focus, .tag-warning[href]:hover { + background-color: #ec971f; +} + +.tag-danger { + background-color: #d9534f; +} + +.tag-danger[href]:focus, .tag-danger[href]:hover { + background-color: #c9302c; +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #eceeef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-hr { + border-top-color: #d0d5d8; +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: bold; +} + +.alert-dismissible { + padding-right: 2.5rem; +} + +.alert-dismissible .close { + position: relative; + top: -.125rem; + right: -1.25rem; + color: inherit; +} + +.alert-success { + background-color: #dff0d8; + border-color: #d0e9c6; + color: #3c763d; +} + +.alert-success hr { + border-top-color: #c1e2b3; +} + +.alert-success .alert-link { + color: #2b542c; +} + +.alert-info { + background-color: #d9edf7; + border-color: #bcdff1; + color: #31708f; +} + +.alert-info hr { + border-top-color: #a6d5ec; +} + +.alert-info .alert-link { + color: #245269; +} + +.alert-warning { + background-color: #fcf8e3; + border-color: #faf2cc; + color: #8a6d3b; +} + +.alert-warning hr { + border-top-color: #f7ecb5; +} + +.alert-warning .alert-link { + color: #66512c; +} + +.alert-danger { + background-color: #f2dede; + border-color: #ebcccc; + color: #a94442; +} + +.alert-danger hr { + border-top-color: #e4b9b9; +} + +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: block; + width: 100%; + height: 1rem; + margin-bottom: 1rem; +} + +.progress[value] { + background-color: #eee; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.25rem; +} + +.progress[value]::-ms-fill { + background-color: #0074d9; + border: 0; +} + +.progress[value]::-moz-progress-bar { + background-color: #0074d9; + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.progress[value]::-webkit-progress-value { + background-color: #0074d9; + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.progress[value="100"]::-moz-progress-bar { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.progress[value="100"]::-webkit-progress-value { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.progress[value]::-webkit-progress-bar { + background-color: #eee; + border-radius: 0.25rem; +} + +base::-moz-progress-bar, +.progress[value] { + background-color: #eee; + border-radius: 0.25rem; +} + +@media screen and (min-width: 0\0) { + .progress { + background-color: #eee; + border-radius: 0.25rem; + } + .progress-bar { + display: inline-block; + height: 1rem; + text-indent: -999rem; + background-color: #0074d9; + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; + } + .progress[width="100%"] { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; + } +} + +.progress-striped[value]::-webkit-progress-value { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; +} + +.progress-striped[value]::-moz-progress-bar { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-striped[value]::-ms-fill { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +@media screen and (min-width: 0\0) { + .progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; + } +} + +.progress-animated[value]::-webkit-progress-value { + -webkit-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-animated[value]::-moz-progress-bar { + animation: progress-bar-stripes 2s linear infinite; +} + +@media screen and (min-width: 0\0) { + .progress-animated .progress-bar-striped { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + } +} + +.progress-success[value]::-webkit-progress-value { + background-color: #5cb85c; +} + +.progress-success[value]::-moz-progress-bar { + background-color: #5cb85c; +} + +.progress-success[value]::-ms-fill { + background-color: #5cb85c; +} + +@media screen and (min-width: 0\0) { + .progress-success .progress-bar { + background-color: #5cb85c; + } +} + +.progress-info[value]::-webkit-progress-value { + background-color: #5bc0de; +} + +.progress-info[value]::-moz-progress-bar { + background-color: #5bc0de; +} + +.progress-info[value]::-ms-fill { + background-color: #5bc0de; +} + +@media screen and (min-width: 0\0) { + .progress-info .progress-bar { + background-color: #5bc0de; + } +} + +.progress-warning[value]::-webkit-progress-value { + background-color: #f0ad4e; +} + +.progress-warning[value]::-moz-progress-bar { + background-color: #f0ad4e; +} + +.progress-warning[value]::-ms-fill { + background-color: #f0ad4e; +} + +@media screen and (min-width: 0\0) { + .progress-warning .progress-bar { + background-color: #f0ad4e; + } +} + +.progress-danger[value]::-webkit-progress-value { + background-color: #d9534f; +} + +.progress-danger[value]::-moz-progress-bar { + background-color: #d9534f; +} + +.progress-danger[value]::-ms-fill { + background-color: #d9534f; +} + +@media screen and (min-width: 0\0) { + .progress-danger .progress-bar { + background-color: #d9534f; + } +} + +.media, +.media-body { + overflow: hidden; +} + +.media-body { + width: 10000px; +} + +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} + +.media-middle { + vertical-align: middle; +} + +.media-bottom { + vertical-align: bottom; +} + +.media-object { + display: block; +} + +.media-object.img-thumbnail { + max-width: none; +} + +.media-right { + padding-left: 10px; +} + +.media-left { + padding-right: 10px; +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} + +.list-group-item:first-child { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover { + color: #818a91; + cursor: not-allowed; + background-color: #eceeef; +} + +.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading { + color: inherit; +} + +.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text { + color: #818a91; +} + +.list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover { + z-index: 2; + color: #fff; + text-decoration: none; + background-color: #0275d8; + border-color: #0275d8; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > .small { + color: inherit; +} + +.list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text { + color: #a8d6fe; +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-item-action { + width: 100%; + color: #555; + text-align: inherit; +} + +.list-group-item-action .list-group-item-heading { + color: #333; +} + +.list-group-item-action:focus, .list-group-item-action:hover { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} + +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} + +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} + +a.list-group-item-success:focus, a.list-group-item-success:hover, +button.list-group-item-success:focus, +button.list-group-item-success:hover { + color: #3c763d; + background-color: #d0e9c6; +} + +a.list-group-item-success.active, a.list-group-item-success.active:focus, a.list-group-item-success.active:hover, +button.list-group-item-success.active, +button.list-group-item-success.active:focus, +button.list-group-item-success.active:hover { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} + +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} + +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} + +a.list-group-item-info:focus, a.list-group-item-info:hover, +button.list-group-item-info:focus, +button.list-group-item-info:hover { + color: #31708f; + background-color: #c4e3f3; +} + +a.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover, +button.list-group-item-info.active, +button.list-group-item-info.active:focus, +button.list-group-item-info.active:hover { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} + +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} + +a.list-group-item-warning:focus, a.list-group-item-warning:hover, +button.list-group-item-warning:focus, +button.list-group-item-warning:hover { + color: #8a6d3b; + background-color: #faf2cc; +} + +a.list-group-item-warning.active, a.list-group-item-warning.active:focus, a.list-group-item-warning.active:hover, +button.list-group-item-warning.active, +button.list-group-item-warning.active:focus, +button.list-group-item-warning.active:hover { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} + +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} + +a.list-group-item-danger:focus, a.list-group-item-danger:hover, +button.list-group-item-danger:focus, +button.list-group-item-danger:hover { + color: #a94442; + background-color: #ebcccc; +} + +a.list-group-item-danger.active, a.list-group-item-danger.active:focus, a.list-group-item-danger.active:hover, +button.list-group-item-danger.active, +button.list-group-item-danger.active:focus, +button.list-group-item-danger.active:hover { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9 { + padding-bottom: 42.857143%; +} + +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +.embed-responsive-4by3 { + padding-bottom: 75%; +} + +.embed-responsive-1by1 { + padding-bottom: 100%; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; +} + +.close:focus, .close:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; +} + +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + transition: transform .3s ease-out, -webkit-transform .3s ease-out, -o-transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.in { + opacity: 0.5; +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header::after { + content: ""; + display: table; + clear: both; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + padding: 15px; +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer::after { + content: ""; + display: table; + clear: both; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 600px; + margin: 30px auto; + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 900px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.in { + opacity: 0.9; +} + +.tooltip.tooltip-top, .tooltip.bs-tether-element-attached-bottom { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.tooltip-top .tooltip-inner::before, .tooltip.bs-tether-element-attached-bottom .tooltip-inner::before { + bottom: 0; + left: 50%; + margin-left: -5px; + content: ""; + border-width: 5px 5px 0; + border-top-color: #000; +} + +.tooltip.tooltip-right, .tooltip.bs-tether-element-attached-left { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.tooltip-right .tooltip-inner::before, .tooltip.bs-tether-element-attached-left .tooltip-inner::before { + top: 50%; + left: 0; + margin-top: -5px; + content: ""; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} + +.tooltip.tooltip-bottom, .tooltip.bs-tether-element-attached-top { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.tooltip-bottom .tooltip-inner::before, .tooltip.bs-tether-element-attached-top .tooltip-inner::before { + top: 0; + left: 50%; + margin-left: -5px; + content: ""; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip.tooltip-left, .tooltip.bs-tether-element-attached-right { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip.tooltip-left .tooltip-inner::before, .tooltip.bs-tether-element-attached-right .tooltip-inner::before { + top: 50%; + right: 0; + margin-top: -5px; + content: ""; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.tooltip-inner::before { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + padding: 1px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover.popover-top, .popover.bs-tether-element-attached-bottom { + margin-top: -10px; +} + +.popover.popover-top::before, .popover.popover-top::after, .popover.bs-tether-element-attached-bottom::before, .popover.bs-tether-element-attached-bottom::after { + left: 50%; + border-bottom-width: 0; +} + +.popover.popover-top::before, .popover.bs-tether-element-attached-bottom::before { + bottom: -11px; + margin-left: -11px; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-top::after, .popover.bs-tether-element-attached-bottom::after { + bottom: -10px; + margin-left: -10px; + border-top-color: #fff; +} + +.popover.popover-right, .popover.bs-tether-element-attached-left { + margin-left: 10px; +} + +.popover.popover-right::before, .popover.popover-right::after, .popover.bs-tether-element-attached-left::before, .popover.bs-tether-element-attached-left::after { + top: 50%; + border-left-width: 0; +} + +.popover.popover-right::before, .popover.bs-tether-element-attached-left::before { + left: -11px; + margin-top: -11px; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-right::after, .popover.bs-tether-element-attached-left::after { + left: -10px; + margin-top: -10px; + border-right-color: #fff; +} + +.popover.popover-bottom, .popover.bs-tether-element-attached-top { + margin-top: 10px; +} + +.popover.popover-bottom::before, .popover.popover-bottom::after, .popover.bs-tether-element-attached-top::before, .popover.bs-tether-element-attached-top::after { + left: 50%; + border-top-width: 0; +} + +.popover.popover-bottom::before, .popover.bs-tether-element-attached-top::before { + top: -11px; + margin-left: -11px; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-bottom::after, .popover.bs-tether-element-attached-top::after { + top: -10px; + margin-left: -10px; + border-bottom-color: #f7f7f7; +} + +.popover.popover-bottom .popover-title::before, .popover.bs-tether-element-attached-top .popover-title::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 20px; + margin-left: -10px; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.popover.popover-left, .popover.bs-tether-element-attached-right { + margin-left: -10px; +} + +.popover.popover-left::before, .popover.popover-left::after, .popover.bs-tether-element-attached-right::before, .popover.bs-tether-element-attached-right::after { + top: 50%; + border-right-width: 0; +} + +.popover.popover-left::before, .popover.bs-tether-element-attached-right::before { + right: -11px; + margin-top: -11px; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-left::after, .popover.bs-tether-element-attached-right::after { + right: -10px; + margin-top: -10px; + border-left-color: #fff; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 0.2375rem 0.2375rem 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover::before, +.popover::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover::before { + content: ""; + border-width: 11px; +} + +.popover::after { + content: ""; + border-width: 10px; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .carousel-item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} + +.carousel-inner > .carousel-item > img, +.carousel-inner > .carousel-item > a > img { + line-height: 1; +} + +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .carousel-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out, -o-transform .6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .carousel-item.next, .carousel-inner > .carousel-item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .carousel-item.prev, .carousel-inner > .carousel-item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .carousel-item.next.left, .carousel-inner > .carousel-item.prev.right, .carousel-inner > .carousel-item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:focus, .carousel-control:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; + line-height: 1; +} + +.carousel-control .icon-prev { + left: 50%; + margin-left: -10px; +} + +.carousel-control .icon-next { + right: 50%; + margin-right: -10px; +} + +.carousel-control .icon-prev::before { + content: "\2039"; +} + +.carousel-control .icon-next::before { + content: "\203a"; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: transparent; + border: 1px solid #fff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media (min-width: 576px) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-faded { + background-color: #f7f7f9; +} + +.bg-primary { + background-color: #0275d8 !important; +} + +a.bg-primary:focus, a.bg-primary:hover { + background-color: #025aa5 !important; +} + +.bg-success { + background-color: #5cb85c !important; +} + +a.bg-success:focus, a.bg-success:hover { + background-color: #449d44 !important; +} + +.bg-info { + background-color: #5bc0de !important; +} + +a.bg-info:focus, a.bg-info:hover { + background-color: #31b0d5 !important; +} + +.bg-warning { + background-color: #f0ad4e !important; +} + +a.bg-warning:focus, a.bg-warning:hover { + background-color: #ec971f !important; +} + +.bg-danger { + background-color: #d9534f !important; +} + +a.bg-danger:focus, a.bg-danger:hover { + background-color: #c9302c !important; +} + +.bg-inverse { + background-color: #373a3c !important; +} + +a.bg-inverse:focus, a.bg-inverse:hover { + background-color: #1f2021 !important; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-top { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.rounded-right { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.rounded-left { + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.rounded-circle { + border-radius: 50%; +} + +.clearfix::after { + content: ""; + display: table; + clear: both; +} + +.d-block { + display: block !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-inline { + display: inline !important; +} + +.float-xs-left { + float: left !important; +} + +.float-xs-right { + float: right !important; +} + +.float-xs-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +.w-100 { + width: 100% !important; +} + +.h-100 { + height: 100% !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.m-0 { + margin: 0 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mr-0 { + margin-right: 0 !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.ml-0 { + margin-left: 0 !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.m-1 { + margin: 1rem 1rem !important; +} + +.mt-1 { + margin-top: 1rem !important; +} + +.mr-1 { + margin-right: 1rem !important; +} + +.mb-1 { + margin-bottom: 1rem !important; +} + +.ml-1 { + margin-left: 1rem !important; +} + +.mx-1 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.my-1 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.m-2 { + margin: 1.5rem 1.5rem !important; +} + +.mt-2 { + margin-top: 1.5rem !important; +} + +.mr-2 { + margin-right: 1.5rem !important; +} + +.mb-2 { + margin-bottom: 1.5rem !important; +} + +.ml-2 { + margin-left: 1.5rem !important; +} + +.mx-2 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.my-2 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.m-3 { + margin: 3rem 3rem !important; +} + +.mt-3 { + margin-top: 3rem !important; +} + +.mr-3 { + margin-right: 3rem !important; +} + +.mb-3 { + margin-bottom: 3rem !important; +} + +.ml-3 { + margin-left: 3rem !important; +} + +.mx-3 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.my-3 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.p-0 { + padding: 0 0 !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pr-0 { + padding-right: 0 !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pl-0 { + padding-left: 0 !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.p-1 { + padding: 1rem 1rem !important; +} + +.pt-1 { + padding-top: 1rem !important; +} + +.pr-1 { + padding-right: 1rem !important; +} + +.pb-1 { + padding-bottom: 1rem !important; +} + +.pl-1 { + padding-left: 1rem !important; +} + +.px-1 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.py-1 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.p-2 { + padding: 1.5rem 1.5rem !important; +} + +.pt-2 { + padding-top: 1.5rem !important; +} + +.pr-2 { + padding-right: 1.5rem !important; +} + +.pb-2 { + padding-bottom: 1.5rem !important; +} + +.pl-2 { + padding-left: 1.5rem !important; +} + +.px-2 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.py-2 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.p-3 { + padding: 3rem 3rem !important; +} + +.pt-3 { + padding-top: 3rem !important; +} + +.pr-3 { + padding-right: 3rem !important; +} + +.pb-3 { + padding-bottom: 3rem !important; +} + +.pl-3 { + padding-left: 3rem !important; +} + +.px-3 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-3 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pos-f-t { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-xs-left { + text-align: left !important; +} + +.text-xs-right { + text-align: right !important; +} + +.text-xs-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-normal { + font-weight: normal; +} + +.font-weight-bold { + font-weight: bold; +} + +.font-italic { + font-style: italic; +} + +.text-white { + color: #fff !important; +} + +.text-muted { + color: #818a91 !important; +} + +a.text-muted:focus, a.text-muted:hover { + color: #687077 !important; +} + +.text-primary { + color: #0275d8 !important; +} + +a.text-primary:focus, a.text-primary:hover { + color: #025aa5 !important; +} + +.text-success { + color: #5cb85c !important; +} + +a.text-success:focus, a.text-success:hover { + color: #449d44 !important; +} + +.text-info { + color: #5bc0de !important; +} + +a.text-info:focus, a.text-info:hover { + color: #31b0d5 !important; +} + +.text-warning { + color: #f0ad4e !important; +} + +a.text-warning:focus, a.text-warning:hover { + color: #ec971f !important; +} + +.text-danger { + color: #d9534f !important; +} + +a.text-danger:focus, a.text-danger:hover { + color: #c9302c !important; +} + +.text-gray-dark { + color: #373a3c !important; +} + +a.text-gray-dark:focus, a.text-gray-dark:hover { + color: #1f2021 !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.invisible { + visibility: hidden !important; +} + +.hidden-xs-up { + display: none !important; +} + +@media (max-width: 575px) { + .hidden-xs-down { + display: none !important; + } +} + +@media (min-width: 576px) { + .hidden-sm-up { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-sm-down { + display: none !important; + } +} + +@media (min-width: 768px) { + .hidden-md-up { + display: none !important; + } +} + +@media (max-width: 991px) { + .hidden-md-down { + display: none !important; + } +} + +@media (min-width: 992px) { + .hidden-lg-up { + display: none !important; + } +} + +@media (max-width: 1199px) { + .hidden-lg-down { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xl-up { + display: none !important; + } +} + +.hidden-xl-down { + display: none !important; +} + +.visible-print-block { + display: none !important; +} + +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} + +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} + +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/public/stylesheets/main.css b/public/stylesheets/main.css new file mode 100644 index 0000000..9100eed --- /dev/null +++ b/public/stylesheets/main.css @@ -0,0 +1,25 @@ +body { color:black; } +body, p, label { font-size:15px; } +.label { font-size:13px; line-height:16px; } +.alert-info { border-color:transparent; background-color:#3A87AD; +color:white; font-weight:bold; } +div.screenshot { width: 800px; margin:20px; background-color:#D0E7EF; } +.navbar-fixed-top .navbar-inner { padding-left:20px; } +.navbar .nav > li > a { color:#bbb; } +.screenshot > .container { width: 760px; padding: 20px; } +.navbar-fixed-top, .navbar-fixed-bottom { position:relative; } +h1 { font-size:125%; } +table { border-collapse: collapse; width:100%; } +th, td { text-align:left; padding: 0.3em 0; +border-bottom: 1px solid white; } +tr.odd td { } +form { float:left; margin-right: 1em; } +legend { border: none; } +fieldset > div { margin: 12px 0; } +.help-block { display: inline; vertical-align: middle; } +.error .help-block { display: none; } +.error .help-inline { padding-left: 9px; color: #B94A48; } +footer { clear: both; text-align: right; } +dl.products { margin-top: 0; } +dt { clear: right; } +.barcode { float:right; margin-bottom: 10px; border: 4px solid white; } \ No newline at end of file diff --git a/test/ApplicationSpec.scala b/test/ApplicationSpec.scala new file mode 100644 index 0000000..63693b6 --- /dev/null +++ b/test/ApplicationSpec.scala @@ -0,0 +1,42 @@ +import org.scalatestplus.play._ +import play.api.test._ +import play.api.test.Helpers._ + +/** + * Add your spec here. + * You can mock out a whole application including requests, plugins etc. + * For more information, consult the wiki. + */ +class ApplicationSpec extends PlaySpec with OneAppPerTest { + + "Routes" should { + + "send 404 on a bad request" in { + route(app, FakeRequest(GET, "/boum")).map(status(_)) mustBe Some(NOT_FOUND) + } + + } + + "HomeController" should { + + "render the index page" in { + val home = route(app, FakeRequest(GET, "/")).get + + status(home) mustBe OK + contentType(home) mustBe Some("text/html") + contentAsString(home) must include ("Your new application is ready.") + } + + } + + "CountController" should { + + "return an increasing count" in { + contentAsString(route(app, FakeRequest(GET, "/count")).get) mustBe "0" + contentAsString(route(app, FakeRequest(GET, "/count")).get) mustBe "1" + contentAsString(route(app, FakeRequest(GET, "/count")).get) mustBe "2" + } + + } + +} diff --git a/test/IntegrationSpec.scala b/test/IntegrationSpec.scala new file mode 100644 index 0000000..02637cd --- /dev/null +++ b/test/IntegrationSpec.scala @@ -0,0 +1,20 @@ +import org.scalatestplus.play._ +import play.api.test._ +import play.api.test.Helpers._ + +/** + * add your integration spec here. + * An integration test will fire up a whole play application in a real (or headless) browser + */ +class IntegrationSpec extends PlaySpec with OneServerPerTest with OneBrowserPerTest with HtmlUnitFactory { + + "Application" should { + + "work from within a browser" in { + + go to ("http://localhost:" + port) + + pageSource must include ("Your new application is ready.") + } + } +}