Student's t-test: sequential design


Student's t-test: block design


Pearson's correlation: sequential design


Pearson's correlation: block design


Binomial test: sequential design


Binomial test: block design


show with app
binomial.test <- function(x, n, H0 = 0.5){
  y <- pbinom(x, size = 2, prob = H0, lower.tail = F)
  return(c(y, n))
}

binomial.bayes <- function(x, n, a, b, p){ # Savage-Dickey density ratio
  a2 <- a + x # posterior alpha, updated with the number of successes
  b2 <- b + (n - x) # posterior beta, updated with the number of failures
  prior <- dbeta(p, a, b) # prior height at midpoint
  posterior <- dbeta(p, a2, b2) # posterior height at midpoint ###ONLY WHEN p=0.05
  BF10 <- prior / posterior 
  BF01 <- 1 / BF10 
  return(c(BF10, BF01))
}

binomial.bayes.custom <- function(x, a, b, p = 0.5){
  n <- x[3]; X <- x[1]
  a2 <- a + X # posterior alpha, updated with the number of successes
  b2 <- b + (n - X) # posterior beta, updated with the number of failures
  prior <- dbeta(p, a, b) # prior height at midpoint
  posterior <- dbeta(p, a2, b2) # posterior height at midpoint ###ONLY WHEN p=0.05
  BF01 <- posterior / prior 
  res <- c(X, x[2], n, BF01)
  names(res) <- c("n successes", "p-value", "n trials", "BF01")
  return(res)
}

binomial.test.custom <- function(x, H0 = 0.5){
  n <- x[2]
  sucx <- x[1]

  y <- binom.test(x = sucx, n = n, p = H0, alternative = "two.sided")$p.value
  # y <- pbinom(sucx, size = n, prob = H0, lower.tail = F) # one-sided
 # y <- pbinom(sucx, size = n, prob = H0, lower.tail = !(H0 <= sucx/n))*2 # two-sided
  
  res <- c(sucx, y, n)
  names(res) <- c("n of successes", "p-value", "n trials")
  return(res)
}

sequential.BF.binom <- function(X, cutpoint, nmin, nmax){
  x <- X[4,]
  i <- which(x < cutpoint)[1]
  if(is.na(i)){ # | is.null(i) | !is.numeric(i)
    i <- length(x)
  }
  res <- c(X[1,i], X[2,i], i+nmin-1, (x[i]))
  names(res) <- c("n successes", "p-value", "n trials", "BF01")
  return(res)
}

sequential.BF.corrected.binom <- function(X, cutpoint, nmin, nmax){
  x <- X[,4]
  i <- which(x < cutpoint[1] | x > cutpoint[2])[1]
  if(is.na(i)){
   # i <- which(x >= cutpoint[1] & x <= cutpoint[2])[length(x)]
    i <- length(x)
  }
  res <- c(X[i,1], X[i,2], i+nmin-1, (x[i]))
  names(res) <- c("n successes", "p-value", "n trials", "BF01")
  
  return( res )
}

sequential.alpha.binom <- function(x, alpha = 0.05, nmin, nmax){
  i <- which(x[,2] < alpha)[1]
  j <- which(x[,2] >= alpha)[nrow(x)] # maxn
  
  p <- x[i, 2]; n <- x[i,3]; nx <- x[i, 1]
  
  p[is.na(p)] <- x[j, 2]; n[is.na(n)] <- nmax; nx[is.na(nx)] <- x[j,1]
  res <- c(nx,p,n)
  names(res) <- c("n of successes", "p-value", "n trials")
  return( res )
}

sequential.COAST.binom <- function(x, nmin, nmax, alpha = c(0.01, 0.36)){
  i <- which(x[,2] < alpha[1] | x[,2] > alpha[2])[1]
 # j <- which(x[,2] >= alpha[1] & x[,2] < alpha[2])[nrow(x)]
  j <- nrow(x)
  p <- x[i, 2]; n <- i+nmin-1; nx <- x[i, 1]
  
  p[is.na(p)] <- x[j, 2]; nx[is.na(nx)] <- x[j, 1]; n[is.na(n)] <- nmax
  res <- c(nx,p,n)
  names(res) <- c("n of successes", "p-value", "n trials")
  return( res )
}

sequential.BF.binom2 <- function(X, cutpoint, nmin, nmax){
  x <- X[4,]
  i <- which(x < cutpoint)[1]
  j <- which(x >= cutpoint)[length(x)] # maxn  if(is.na(i)){ # | is.null(i) | !is.numeric(i)
  BF <- x[i]; n <- i+nmin-1; nx <- X[1,i]; p <- X[3,i]
  BF[is.na(BF)] <- x[j]; n[is.na(n)] <- nmax; nx[is.na(nx)] <- X[1,j]; p[is.na(p)] <- X[3,j]
  return( c(nx, n, p, BF) )
}

.posteriorSecondMoment <- function(n, r, kappa){
  check.r <- abs(r) >= 1
  if (kappa >= 1 && n > 2 && check.r) {
    return(r) }
  hyper.term.1 <- Re(hypergeo::genhypergeo(U=c(3/2, (n-1)/2, (n-1)/2), 
                                           L=c(1/2, (2+(n+2)*kappa)/(2*kappa)), z=r^2))
  hyper.term.2 <- Re(hypergeo::genhypergeo(U=c((n-1)/2, (n-1)/2), L=c((2+n*kappa)/(2*kappa)), z=r^2))
  result <- kappa/(n*kappa+2)*hyper.term.1/hyper.term.2
  return(result)
}

.posteriorVariance <- function(n, r, kappa=1){
  result <- .posteriorSecondMoment(n,r,kappa)-(.posteriorMean(n,r,kappa))^2
  return(result)
}

.posteriorMean <- function(n, r, kappa=1){
  check.r <- abs(r) >= 1
  if (kappa >= 1 && n > 2 && check.r) return(r)
  hyper.term.1 <- Re(hypergeo::genhypergeo(U=c(n/2, n/2), L=c((2+(n+2)*kappa)/(2*kappa)), z=r^2))
  hyper.term.2 <- Re(hypergeo::genhypergeo(U=c((n-1)/2, (n-1)/2), L=c((2+n*kappa)/(2*kappa)), z=r^2))
  log.result <- 2*(lgamma(n/2)-lgamma((n-1)/2))
  result <- (2*kappa*r)/(2+n*kappa)*exp(log.result)*hyper.term.1/hyper.term.2
  return(result)
}

.betaParameterEstimates <- function(someMean, someVar){
  some.a <- someMean*(someMean*(1-someMean)/someVar-1)
  some.b <- (1-someMean)*(someMean*(1-someMean)/someVar-1)
  result <- list(betaA=some.a, betaB=some.b)
  return(result)
}

.posteriorBetaParameters <- function(n, r, kappa=1){
  some.mu <- try((.posteriorMean(n, r, kappa)+1)/2)
  some.var <- try(.posteriorVariance(n, r, kappa)/2^2)
  return(.betaParameterEstimates(some.mu, some.var))
}

.posterior <- function(n, r, kappa = 1, method = "exact", ciValue = 0.95){
  output <- list(betaA = NA, betaB = NA)
  someFit <- .posteriorBetaParameters(n, r, kappa)
  output$betaA <- someFit$betaA
  output$betaB <- someFit$betaB
  return(output)
}

correlation <- function(x, samplesize){
  data <- matrix(x, nrow = samplesize, ncol = 2, byrow = FALSE)
  rxy <- cor(data)[2,1]
  tstat <- rxy * sqrt( (samplesize-2) / (1-rxy^(2)) )
  pval <- 2*pt(-abs(tstat),samplesize-2)
  res <- c(tstat, pval, rxy, samplesize)
  names(res) <- c("t", "p-value", "r", "n")
  return(res)
}

correlation.bayes <- function(x, kappa = 1){
  r <- x[3]; samplesize <- x[4]
  logint <- function(x, r, samplesize) log(1+x)*(samplesize/2-1) - log(1+(1-r^2)*x)*((samplesize-1)/2) - log(x)*(3/2) - samplesize/(2*x) ### CHANGES HERE (bug fixed; check the order of the arguments) ###
  int <- function(x, r, samplesize) exp(logint(x, r, samplesize))
  BF01 <- gamma(0.5) / (sqrt(samplesize/2)*integrate(int, lower = 0, upper = Inf, r = r, samplesize = samplesize, stop.on.error = TRUE)$value)
  res <- c(x, BF01)
  names(res) <- c("t", "p-value", "r", "n", "BF01")
  return(res)
}

correlation.bayes2 <- function(x, kappa = 1){ # Ly et. al. (2015)
  r <- x[3]; samplesize <- x[4]
  log.hyper.term <- log(hypergeo::genhypergeo(U=c((samplesize-1)/2, (samplesize-1)/2), L=((samplesize+2/kappa)/2), z=r^2))
  log.result <- log(2^(1-2/kappa))+0.5*log(pi)-lbeta(1/kappa, 1/kappa)+
    lgamma((samplesize+2/kappa-1)/2)-lgamma((samplesize+2/kappa)/2)+log.hyper.term
  BF10 <- exp(Re(log.result))
  BF01 <- 1/BF10
  posterior.parameters <- .posterior(n=samplesize, r=r, kappa = kappa)
  alpha <- posterior.parameters$betaA
  beta <- posterior.parameters$betaB
  res <- c(x, BF01)
  names(res) <- c("t", "p-value", "r", "n", "BF01")
  return(res)
}

sequential.alpha.cor <- function(x, alpha = 0.05){
  i <- which(x[,2] < alpha)[1]
  j <- nrow(x)
  
 # if(is.na(i)){
#    i <- ncol(x)
#  }
  
  p <- x[i, 2]; t <- x[i, 1]; r <- x[i, 3]; n <- x[i, 4]
  
  p[is.na(p)] <- x[j, 2]; t[is.na(t)] <- x[j, 1]; r[is.na(r)] <- x[j, 3]; n[is.na(n)] <- x[j, 4]
  
  res <- c(t,p,r,n)
  names(res) <- c("t", "p-value", "r", "n")
  return( res )
}

sequential.COAST.cor <- function(x, alpha = c(0.05, 0.36) ){
  i <- which(x[,2] < alpha[1] | x[,2] > alpha[2])[1]
  j <- ncol(x)
  
  # if(is.na(i)){
  #    i <- ncol(x)
  #  }
  
  p <- x[i, 2]; t <- x[i, 1]; r <- x[i, 3]; n <- x[i, 4]
  
  p[is.na(p)] <- x[j, 2]; t[is.na(t)] <- x[j, 1]; r[is.na(r)] <- x[j, 3]; n[is.na(n)] <- x[j, 4]
  
  res <- c(t,p,r,n)
  names(res) <- c("t", "p-value", "r", "n")
  return( res )
}

sequential.bayes.cor <- function(x, thres = 1){
  
  i <- which(x[5,] < thres)[1]
  j <- ncol(x)
  
  p <- x[2, i]; t <- x[1, i]; r <- x[3, i]; n <- x[4, i]; BF01 <- x[5, i]
  
  p[is.na(p)] <- x[2, j]; t[is.na(t)] <- x[1, j]
  r[is.na(r)] <- x[3, j]; n[is.na(n)] <- x[4, j]
  BF01[is.na(BF01)] <- x[5, j]
  
  res <- c(t, p, r, n, BF01)
  names(res) <- c("t", "p-value", "r", "n", "BF01")
  return(res)
}

sequential.bayes.corrected.cor <- function(x, thres = c(1/3, 3)){
  
  i <- which(x[5,] < thres[1] | x[5,] > thres[2])[1]
  j <- ncol(x)
  
  p <- x[2, i]; t <- x[1, i]; r <- x[3, i]; n <- x[4, i]; BF01 <- x[5, i]
  
  p[is.na(p)] <- x[2, j]; t[is.na(t)] <- x[1, j]
  r[is.na(r)] <- x[3, j]; n[is.na(n)] <- x[4, j]
  BF01[is.na(BF01)] <- x[5, j]
  
  res <- c(t, p, r, n, BF01)
  names(res) <- c("t", "p-value", "r", "n", "BF01")
  return(res)
}

# Scatterplot of p-values against BFs

plot.scatterplot <- function(results, samplesize, nrep, alpha = 0.05, thres = 1, nmin = 15, nmax = 100) {

    xleft <- min(log10(results[,2]))
    yleft <- min(log10(results[,4]))
    xbound <- c(xleft, 0)
    ybound <- c(yleft, 2)
  
  power.error <- round(length(results[results[,2]<alpha,1]) / nrep, digits = 3) # for p-values
  hit.error  <- round(length(results[results[,4]<thres,1]) / nrep, digits = 3) # for Bayes Factors
  
  par(col.lab="black", las="1", xaxs="i", yaxs="i", cex = 1.8, pty = "s", family = "sans",
      cex.axis = 0.8, cex.lab=0.8, cex.main = 0.8)
  plot(xbound, ybound, type="n", main = "", xlab = "", ylab = "")
  title(main = expression(paste(bold("Log Bayes Factors against log "), bolditalic(p), bold("-values"))),
        ylab="log Bayes factor", xlab=expression(paste("log ",italic("p"),"-value")),
        line = 1.7)
  abline(h = log10(thres), lty = 2, col = "skyblue4")
  abline(v = log10(alpha), lty = 2, col = "skyblue4")
  text(x = (xbound[1]*0.875), y = (ybound[1]*0.1), labels = as.character(hit.error), cex = 0.8, col = "black")
  text(x = (xbound[1]*0.208333333), y = (ybound[1]*0.86), labels = as.character(power.error), cex = 0.8, col = "black")
  
  maxndots <- which(results[,3] == nmax & !results[,3] == nmin)
  minndots <- which(results[,3] == nmin)
  restdosts <- which(results[,3] < nmax & results[,3] > nmin)
  
  
  points(log10(results[restdosts,2]), log10(results[restdosts,4]),
         pch = 21, col = rgb(1, 1, 1, 0.2),
         bg =  rgb(0.6078, 0.1882, 1, 0.2), cex = 1) #0.2
  points(log10(results[minndots,2]), log10(results[minndots,4]),
         pch = 21, col = rgb(1, 1, 1, 0.2),
         bg = rgb(0.4863, 0.8039, 0.4863, 0.2), cex = 1) #0.2
  points(log10(results[maxndots,2]), log10(results[maxndots,4]),
         pch = 21, col = rgb(1, 1, 1, 0.2),
         bg = rgb(1, 0.6471, 0, 0.2), cex = 1) #0.2
  
  
}

# Histograms

plot.histograms <- function(results, nrep, alpha = 0.05, thres = 1) {
  
  alpha2 <- alpha[2]; thres2 <- thres[2]
  alpha <- alpha[1]
  thres <- thres[1]
  
  par(mfrow=c(2,1), mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA)
  fac.plot <- 1.02
  fac.plot2 <- fac.plot+0.1*fac.plot
  
  # Bayes Factors
  
  bounds <- log10(c(1/1000, 1/300, 1/100, 1/30, 1/10, 1/3, 1, 3, 10, 30, 100, 300, 1000))
  last <- length(bounds)  
  xlabels <- c("<",expression(frac(1,300)), expression(frac(1,100)),expression(frac(1,30)), expression(frac(1,10)), expression(frac(1,3)),
               1, 3, 10, 30, 100, 300, ">") 
  data <- pmax(pmin(log10(results[,4]), mean(bounds[(last-1):last])), mean(bounds[1:2]))
  
  BFless <- mean(results[,4] < thres)
  BFmore <- mean(results[,4] >= thres)
  
  mydata_hist <- hist(data, breaks = bounds, plot = F)
  ymaxlab <- (floor(max(mydata_hist$counts)/100)+1)*100
  
  plot(c(bounds[1], bounds[last]), c(0, ymaxlab), type="n",
       xlab="BF for the null", ylab="Frequency", adj=0.6, axes=F, 
       main = "Histogram of log Bayes Factors")
  
  # 1:last ??
  axis(1, at=bounds[1:last],labels=xlabels, tick=T, padj = 0.5)
  axis(2, at=seq(0,ymaxlab, length.out=6 ), labels=T, las="1")
  
  rect(xleft=bounds[1:(last-1)], ybottom=0, xright=bounds[2:last],ytop=mydata_hist$counts, col="cornflowerblue", border = "white")
  
  lines(c(log10(thres),log10(thres)), c(0,fac.plot*ymaxlab), lwd=3)
  arrows(log10(thres)-0.85, fac.plot*ymaxlab, log10(thres)+0.85, fac.plot*ymaxlab, length=0.07, angle=25, lwd=2, code=3)
  
  if(!is.na(thres2)){
    lines(c(log10(thres2),log10(thres2)), c(0,fac.plot*ymaxlab), lwd=3)
    arrows(log10(thres2)-0.85, fac.plot*ymaxlab, log10(thres2)+0.85, fac.plot*ymaxlab, length=0.07, angle=25, lwd=2, code=3)
  }
  
  #BFless <- sum(mydata_hist$counts[1:((last-1)/2)])/nrep
  #BFmore <- sum(mydata_hist$counts[((last+1)/2): (last-1)])/nrep
  
  text(log10(thres)-0.03, ymaxlab*(fac.plot2+0.03), labels=round(BFless, digits=3), adj=c(1,1), col = "royalblue")
  text(log10(thres)+0.03, ymaxlab*(fac.plot2+0.03), labels=round(BFmore, digits=3), adj=c(0,1), col = "black")
  
  # P-values
  
  bounds_2 <- xlabels_2 <- seq(0, 1, 0.05)
  last_2 <- length(bounds_2)

  mydata_hist_2 <- hist(results[,2], breaks = bounds_2, plot = FALSE)
  ymaxlab_2 <- floor(max(mydata_hist_2$counts/100)+1)*100
  
  plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=expression(paste(italic("p"), "-value")),
       ylab="Frequency", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values"))))
  axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5)
  axis(2, at= round(seq(0,ymaxlab_2, length.out=6)), labels=T, las="1")
  rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col="indianred3", border = "white")
  
  lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_2), lwd=3)
  arrows(alpha-0.15, fac.plot*ymaxlab_2, alpha+0.15, fac.plot*ymaxlab_2, length=0.07, angle=25, lwd=2, code=3)
  
  if(!is.na(alpha2)){
    lines (c(alpha2,alpha2), c(0,fac.plot*ymaxlab_2), lwd=3)
    arrows(alpha2-0.15, fac.plot*ymaxlab_2, alpha2+0.15, fac.plot*ymaxlab_2, length=0.07, angle=25, lwd=2, code=3)
  }
  
  Pmore <- mean(results[,2] >= alpha)
  Pless <- mean(results[,2] < alpha) 
  
  text(alpha-0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pless, digits=3), adj=c(1,1), col = "firebrick1")
  text(alpha+0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pmore, digits=3), adj=c(0,1), col = "black")  
}

default.histogram <- function(){
  par(mfrow=c(2,1), mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA)
  bounds <- log10(c(1/1000, 1/300, 1/100, 1/30, 1/10, 1/3, 1, 3, 10, 30, 100, 300, 1000))
  last <- length(bounds)  
  xlabels <- c("<",expression(frac(1,300)), expression(frac(1,100)),expression(frac(1,30)), expression(frac(1,10)), expression(frac(1,3)),
               1, 3, 10, 30, 100, 300, ">") 
  plot(c(bounds[1], bounds[last]), c(0, 1000), type="n",
       xlab="BF for the null", ylab="Frequency", adj=0.6, axes=F, 
       main = "Histogram of log Bayes Factors")
  axis(1, at=bounds[1:last],labels=xlabels, tick=T, padj = 0.5)
  axis(2, at=seq(0,1000, length.out=6 ), labels=T, las="1")
  
  bounds_2 <- seq(0, 1, 0.05)
  last_2 <- length(bounds_2)
  xlabels_2 <- c(seq(0, 1, 0.05))
  plot(c(bounds_2[1], bounds_2[last_2]), c(0, 1000), type="n", xlab=expression(paste(italic("p"), "-value")),
       ylab="Frequency", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values"))))
  axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5)
  axis(2, at= round(seq(0,1000, length.out=6)), labels=T, las="1")
}

default.histogram.n <- function(){
  par(mfrow=c(1,1), mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA)
  plot(c(5, 100), c(0, 500), type = "n", xlab = expression(paste("Sample size, ", italic(n))),
       ylab = "Frequency", adj = 0.6, main = "Histogram of sample sizes", axes = F)
  axis(1, at = seq(5, 100, by = 10), labels=T, tick=T, padj = 0.5)
  axis(2, at = seq(0, 500, length = 6), labels=T, las="1")
}

plot.histogram.n <- function(results, nmax = 100, nmin = 15){
  
  if(all(results[,3] == results[1,3])){
    default.histogram.n()
    legend("center", legend = paste("All sample sizes equal", results[1,3]), bty = "n")
  } else {
    
    par(mfrow=c(1,1), mar=c(4,4,4,4), cex.axis = 1, xaxs = "i",
        cex.lab = 1.2, xpd = T, xaxs = "r", mgp = c(3, 1, 0)) # mgp = c(3, 1, 0)
    
    datos <- results[,3]

    labels_hist <- bounds <- round(seq(min(datos), max(datos), length = min(c(15, length(min(datos):max(datos)) )) ))
    
    mydata_hist <- hist(datos, breaks = labels_hist, plot = F)
    
   # bounds <- (seq(floor(min(mydata_hist$mids))-0.5,
  #    ceiling(max(mydata_hist$mids))+0.5,
   #   length = min(c(13, length(floor(min(mydata_hist$mids)):ceiling(max(mydata_hist$mids))) ))))
   
     last <- length(bounds)
    
#    print(bounds); print(labels_hist)

    ymaxlab <- (floor(max(mydata_hist$counts)/100)+1)*100
    
     plot(c(bounds[1], bounds[last]), c(0, ymaxlab), type="n",
         xlab=expression(paste("Sample size, ", italic(n))), ylab="Frequency", adj=0.6, axes=F, 
         main = "Histogram of sample sizes")
    
   # barplot(mydata_hist$counts, border = "white", col = "gray72",
  #          xlab=expression(paste("Sample size, ", italic(n))), ylab="Frequency", adj=0.6, 
  #       main = "Histogram of sample sizes", names.arg = bounds[-last] )

    axis(1, at=bounds,labels=bounds, tick=T, padj = 0.5)
    axis(2, at=seq(0,ymaxlab, length.out=6 ), labels=T, las="1")
    
    rect(xleft=bounds[1:(last-1)], ybottom=0, xright=bounds[2:last],ytop=mydata_hist$counts,
         col="mistyrose4", border = "white")
  
  legend("topleft", legend = paste("Median = ", median(datos)), bty = "n")
  
  }
}

legend.plot <- function(){
    par(col.lab="black", las="1", xaxs="i", yaxs="i", cex = 1.8, pty = "m", family = "sans",
      cex.axis = 0.8, cex.lab=0.8, cex.main = 0.8, xpd = T)
  plot(c(0, 10), c(0, 10), type="n", main = "", xlab = "", ylab = "", axes = F)
  
    points(0, 14,
         pch = 21, col = rgb(1, 1, 1, 0.2),
         bg =  rgb(0.6078, 0.1882, 1, 0.7), cex = 1.3) #0.2
  points(0, 12,
         pch = 21, col = rgb(1, 1, 1, 0.2),
         bg = rgb(0.4863, 0.8039, 0.4863, 0.7), cex = 1.3) #0.2
  points(0, 16,
         pch = 21, col = rgb(1, 1, 1, 0.2),
         bg = rgb(1, 0.6471, 0, 0.7), cex = 1.3) 
  
  text(0, 14.5, labels = "Ended when stopping threshold reached", pos = 4, cex = 0.65)
  text(0, 13.5, labels = "(mixed sample sizes)", pos = 4, cex = 0.65)
  
  text(0, 12, labels = "Ended with min. sample size", pos = 4, cex = 0.65)
  
  text(0, 16, labels = "Ended with max. sample size", pos = 4, cex = 0.65)
  
  
}

default.scatterplot <- function(){
  par(col.lab="black", las="1", xaxs="i", yaxs="i", cex = 1.8, pty = "s", family = "sans",
      cex.axis = 0.8, cex.lab=0.8, cex.main = 0.8)
  plot(c(-12, 0), c(-10, 2), type="n", main = "", xlab = "", ylab = "")
  title(main = expression(paste(bold("Log Bayes Factors against log "), bolditalic(p), bold("-values"))),
        ylab="log Bayes factor", xlab=expression(paste("log ",italic("p"),"-value")),
        line = 1.7)
}

prior.flow <- function(results, freq.results, nmin, nmax, alpha, type = "p-values", x, y){
  
  poslabels <- c("Prior correlation", "Prior probability of success", "Prior effect size")

  par(mfrow = c(1,2), col.lab="black", las="1", xaxs="i", yaxs="i",
      cex = 1.8, pty = "s", family = "sans",
      cex.axis = 0.8, cex.lab=0.8, cex.main = 0.8, xpd = T,
      omi = c(0,0,0,0) , mar = c(4,4,4,4),  mgp = c(2, 1, 0))

  if(min(x) < -1){
    ulength <- 2
    i <- 3
  } else {
  ulength <- qunif(1/10, min = min(x), max = max(x))
  i <- round(min(x)+2)
  }
  
  # Prior plot
  plot(c(min(x), max(x)), c(0, max(y)+1), type = "n", axes = F, ylab = "Density",
       xlab = poslabels[i],
       main = "Prior distribution")
  
  axis(1, at = seq(min(x), max(x), by = abs(ulength) ) ); axis(2)
  lines(x, y, lwd = 3, col = "indianred")
  
  if(all(results[,3] == results[1,3])){
    plot(c(5, 100), c(0, 1), type = "n",
         xlab = " ", adj = 0.6,
         ylab = " ", main = "Sequential chart")
    mid <- c(52.5, 0.5)
    text(mid[1], mid[2], paste("This chart cannot be plotted","when all sample sizes are equal", sep = "\n"), cex = 0.6)
  } else {
  
    # Other plot
    
  if(type == "p-values"){
    
    nmax <-  max(results[,3])
   # MX <- max(results[,2])
   # MX <- ceiling(max(sapply(freq.results, FUN = function(x) max(x[2,]))))
    
    unitlength.x <- length(nmin:nmax)/30
    
  
  plot(c(nmin, max(results[,3])), c(0, 1), type = "n", xlab = "Number of observations", adj = 0.6,
       ylab = expression(paste(italic(p),"-value")), main = "Sequential chart")
  
  abline(h = alpha[1], lwd = 2, lty = 2, col = rgb(0, 0, 0, 0.7), xpd = F)
  abline(h = alpha[2], lwd = 2, lty = 2, col = rgb(0, 0, 0, 0.7), xpd = F)
  
  if(!is.na(alpha[2])){
    arrows(nmax+unitlength.x, alpha[1], nmax+unitlength.x, 0, length = .05, lwd = 2, col = "indianred")
    arrows(nmax+unitlength.x, alpha[2]+0.01, nmax+unitlength.x, 1, length = .1, lwd = 2, col = "black")
    arrows(nmax+unitlength.x, median(alpha), nmax+unitlength.x, alpha[1]+0.02,
           length = .1, lwd = 2, col = "seagreen3")
    arrows(nmax+unitlength.x, median(alpha), nmax+unitlength.x, alpha[2]-0.02,
           length = .1, lwd = 2, col = "seagreen3")
    text(nmax, y = median(alpha), labels = paste("Continue", "sampling", sep = "\n"),
         col = "seagreen4", pos = 4, cex = .6)
    text(nmax, y = median(c(alpha[1], 0)), labels = expression(paste("Reject ", H[0])),
         pos = 4, col = "indianred4", cex = .6)
    text(nmax, y = median(c(alpha[2]+0.01, 1)), labels = expression(atop("Not reject ", H[0], sep = "\n")),
         pos = 4, col = "black", cex = .6)
  } else {
    arrows(nmax+unitlength.x, alpha[1], nmax+unitlength.x, 0, length = .1, lwd = 2, col = "indianred")
    arrows(nmax+unitlength.x, alpha[1]+0.01, nmax+unitlength.x, 1, length = .1, lwd = 2, col = "black")
    text(nmax, y = median(c(alpha[1], 0)), labels = expression(paste("Reject ", H[0])),
         pos = 4, col = "indianred4", cex = .6)
    text(nmax, y = median(c(alpha[1]+0.01, 1)), labels = expression(atop("Not reject ", H[0], sep = "\n")),
         pos = 4, col = "black", cex = .6)
  }
  
  total <- sample(1:nrow(results), 1000) # Choose only 500 simulations
  for(i in 1:1000){
    j <- which(freq.results[[total[i] ]][,2] == results[total[i],2])
    lines(nmin:(j-1+nmin), freq.results[[total[i]]][(1:j),2], lwd = 2,
          col = rgb(0.39, 0.58, 0.92, 0.3))
  }
  
  } else {
    nmax <-  max(results[,3])
    
    MX <- ceiling(max(sapply(freq.results, FUN = function(x) max(x[1,]))))
    MN <- floor(min(sapply(freq.results, FUN = function(x) min(x[1,]))))
    unitlength.y <- qunif(1/30, min = MN, max = MX)
    unitlength.x <- length(nmin:nmax)/30
    
    plot(c(nmin, max(results[,3])), c(MN, MX), type = "n", xlab = "Number of observations", adj = 0.6,
         ylab = "BF for the null", main = "Sequential chart")
  
   total <- sample(1:nrow(results), 1000) # Choose only 500 simulations
    for(i in 1:1000){
      j <- which(freq.results[[total[i] ]][1,] == results[total[i],4])
      lines(nmin:(j-1+nmin), freq.results[[total[i]]][1,(1:j)], lwd = 2,
            col =rgb(0.39, 0.58, 0.92, 0.3))
    }
   
   abline(h = alpha[1], lwd = 2, lty = 2, col = rgb(0.8, 0.36, 0.36, 0.7), xpd = F)
   abline(h = alpha[2], lwd = 2, lty = 2, col = rgb(0.8, 0.36, 0.36, 0.7), xpd = F)
   
   if(!is.na(alpha[2])){
     arrows(nmax+unitlength.x, alpha[1], nmax+unitlength.x, MX, length = .05, lwd = 2, col = "indianred")
     arrows(nmax+unitlength.x, alpha[2], nmax+unitlength.x, MN, length = .1, lwd = 2, col = "black")
     arrows(nmax+unitlength.x, median(alpha), nmax+unitlength.x, alpha[1]-unitlength.y,
            length = .1, lwd = 2, col = "seagreen3")
     arrows(nmax+unitlength.x, median(alpha), nmax+unitlength.x, alpha[2]+unitlength.y,
            length = .1, lwd = 2, col = "seagreen3")
     text(nmax+unitlength.x*(2/3), y = median(alpha), labels = paste("Continue", "sampling", sep = "\n"),
          col = "seagreen4", pos = 4, cex = .6)
     text(nmax+unitlength.x*(2/3), y = median(c(MN,alpha[2]))-unitlength.y, labels = expression(atop("In favor of ", H[1])),
          pos = 4, col = "black", cex = .6) # y = median(c(alpha[2], MN))
     text(nmax+unitlength.x*(2/3), y = median(c(alpha[1]+unitlength.y, MX)),
          labels = expression(atop("In favor of ", H[0], sep = "\n")),
          pos = 4, col = "indianred4", cex = .6)
   } else {
     arrows(nmax+unitlength.x, alpha[1], nmax+unitlength.x, 0, length = .1, lwd = 2, col = "indianred")
     arrows(nmax+unitlength.x, alpha[1]+unitlength.y, nmax+unitlength.x, MX, length = .1, lwd = 2, col = "black")
     text(nmax+unitlength.x*(2/3), y = median(c(alpha[1], MN)), labels = expression(atop("In favor of ", H[1])),
          pos = 4, col = "indianred4", cex = .6)
     text(nmax+unitlength.x*(2/3), y = median(c(alpha[1]+unitlength.y, MX)), labels = expression(atop("In favor of ", H[0], sep = "\n")),
          pos = 4, col = "black", cex = .6)
   }
   
  }
  }
}

default.priorflow <- function(){
  par(mfrow = c(1,2), col.lab="black", las="1", xaxs="i", yaxs="i", cex = 1.8, pty = "m", family = "sans",
      cex.axis = 0.8, cex.lab=0.8, cex.main = 0.8, xpd = F)
  plot(c(-5, 5), c(0, 1), type = "n", axes = F, ylab = " ",
       xlab = " ",
       main = "Prior distribution"); axis(1); axis(2)
  plot(c(5, 100), c(0, 1), type = "n",
       xlab = " ", adj = 0.6,
       ylab = " ", main = "Sequential chart")
}


# (Frequentist) One sample t test (fixed n)
onesample.ttest <- function(x, H0 = 0, n){
  tstat <- t.test(x, mu = H0)
  return(c(tstat$statistic, tstat$p.value, abs(tstat$statistic)/sqrt(n)))
}

# (sequential sampling)
onesample.ttest.custom <- function(x, H0 = 0, returnn = FALSE){
  n <- x[1]
  t <- (x[2] - H0) / (x[3] / sqrt(as.numeric(x[1])))
  p <- pt(t, df = x[1] - 1, lower.tail = t < 0)*2
  if(returnn == T){
    res <- c(t, p, n); names(res) <- c("t", "p-value", "n")
  } else {
  res <- append(t, p); names(res) <- c("t", "p-value")
  }
  return(res)
}

# Apply decision rule to each simulation
sequential.alpha <- function(x, alpha = 0.05, nmin, nmax){
  i <- which(x[,2] < alpha)[1]
  j <- which(x[,2] >= alpha)[nrow(x)] # maxn
  p <- x[i, 2]; n <- i+nmin-1; t <- x[i, 1]
  p[is.na(p)] <- x[j, 2]; t[is.na(t)] <- x[j, 1]; n[is.na(n)] <- nmax
  res <- c(t, p,n); names(res) <- c("t statistic", "p-value", "n")
  return( res )
}

# COAST
sequential.COAST <- function(x, nmin, nmax, alpha = c(0.01, 0.36)){
  i <- which(x[,2] < alpha[1] | x[,2] > alpha[2])[1]
  j <- which(x[,2] >= alpha[1] & x[,2] < alpha[2])[nrow(x)]
  p <- x[i, 2]; n <- i+nmin-1; t <- x[i, 1]
  p[is.na(p)] <- x[j, 2]; t[is.na(t)] <- x[j, 1]; n[is.na(n)] <- nmax
  res <- c(t, p,n); names(res) <- c("t statistic", "p-value", "n")
  
  return( res )
}

sequential.BF <- function(X, cutpoint, nmin, nmax){
  x <- (X[1,])
  i <- which(x < cutpoint)[1]
  if(is.na(i)){ # | is.null(i) | !is.numeric(i)
    #i <- tail(which(x >= cutpoint), n = 1) # Equivalent
    i <- length(x)
  }
  res <- c(X[3,i], X[2,i], i+nmin-1, (x[i]))
  names(res) <- c("t statistic", "p-value", "n", "BF01")
  return( res )
}

sequential.BF.corrected <- function(X, cutpoint, nmin, nmax){
  x <- X[1,]
  i <- which(x < cutpoint[1] | x > cutpoint[2])[1]
  if(is.na(i)){
    i <- which(x >= cutpoint[1] | x <= cutpoint[2])[nrow(X)]
  }
  res <- c(X[3,i], X[2,i], i+nmin-1, (x[i]))
  names(res) <- c("t statistic", "p-value", "n", "BF01")
  return( res )
}

# (Bayesian) One sample t test (fixed n)
onesample.ttest.bayes <- function(tstat, r = 1, samplesize){ 
  degfree <- samplesize-1
  int <- function(x) ((1 + samplesize*x*r^2)^(-0.5)) * ((1 + (tstat^2) /
      ((1+samplesize*x*r^2)*degfree))^(-samplesize/2)) * ((2*pi)^-0.5) * (x^(-3/2)) * exp(-1/(2*x))
  numerator <- (1 + (tstat^2)/degfree)^(-(samplesize)/2)
  denominator <- integrate(int, lower = 0, upper = Inf)$value
  BF01 <- numerator/denominator
  return(BF01)
}

onesample.ttest.bayes.custom <- function(x, r = 1){ 
  tstat <- x[1]
  samplesize <- x[3]
  degfree <- samplesize-1
  int <- function(x) ((1 + samplesize*x*r^2)^(-0.5)) * ((1 + (tstat^2)
    / ((1+samplesize*x*r^2)*degfree))^(-samplesize/2)) * ((2*pi)^-0.5) * (x^(-3/2)) * exp(-1/(2*x))
  numerator <- (1 + (tstat^2)/degfree)^(-(samplesize)/2)
  denominator <- integrate(int, lower = 0, upper = Inf)$value
  BF01 <- numerator/denominator 
  names(BF01) <- "BF01"
  return(c(BF01, x[2], tstat) )
}

# New Bayesian procedure

onesample.ttest.bayes2 <- function(t, mu.delta = 0, g = 1, n) {
  
  neff <- n
  nu <- n - 1
  
  numerator <- .term_normalprior(t = t, n = neff, nu  = nu,
                                 mu.delta = mu.delta, g = g)
  denominator <- (1 + t^2/nu)^(-(nu + 1)/2)
  
  BF01 <- denominator/numerator
  
  return(BF01)
  
}

onesample.ttest.bayes.custom2 <- function(x, mu.delta = 0, g = 1) {
  
  t <- x[1]
  
  neff <- x[3]
  nu <- x[3] - 1
  
  numerator <- .term_normalprior(t = t, n = neff, nu  = nu,
                                 mu.delta = mu.delta, g = g)
  denominator <- (1 + t^2/nu)^(-(nu + 1)/2)
  
  BF01 <- denominator/numerator
  
  res <- c(BF01, x[2], t)
  names(res) <- c("BF01", "p-value", "t statistic")
  
  return(res)
  
}

.term_normalprior <- function(t, n, nu, mu.delta, g) {
  
  (1 + n*g)^(-1/2) * exp(-mu.delta^2/(2*(1/n + g))) *
    (1 + t^2/(nu*(1 + n*g)))^(-(nu + 1)/2) *
    (.A(t, n, nu, mu.delta, g) + .B(t, n, nu, mu.delta, g))
  
}

.A <- function(t, n, nu, mu.delta, g) {
  
  Re(hypergeo::genhypergeo(U = (nu + 1)/2, L = 1/2,
                           z = mu.delta^2*t^2/
                             (2*(1/n + g)*((1 + n*g)*nu + t^2))))
  
}

.B <- function(t, n, nu, mu.delta, g) {
  
  out <- mu.delta*t/sqrt(1/2*(1/n + g)*((1 + n*g)*nu + t^2)) *
    exp(lgamma((nu + 2)/2) - lgamma((nu + 1)/2)) *
    Re(hypergeo::genhypergeo(U = (nu + 2)/2, L = 3/2,
                             z = mu.delta^2*t^2/
                               (2*(1/n + g)*((1 + n*g)*nu + t^2))))
  
  return(out)
  
}
# REMEMBER: p-values in freq.results must be strictly above 0 and below 1

server <- function(input, output, session) {
  
  shinyjs::hide("fakerunT"); shinyjs::hide("fakerunT2"); shinyjs::hide("fakerunC")
  shinyjs::hide("fakerunC2")
  shinyjs::hide("fakerunB"); shinyjs::hide("fakerunB2")
  

  options("scipen"=4, "digits"=4) # print numbers in fixed notation
  
  # Fix input boundaries
  
  maxbf <- 80
  minbf <- 1/maxbf
  
  maxsamplesizemin <- 100
  minsamplesizemin <- 15
  
  maxblocks <- 100
  minblocks <- 2
  minsizeblock <- 1
  
  maxsize <- 100
  minsize <- 5
  
  maxmu <- 3
  minmu <- -3
  
  maxsamplesizemax <- 500
  minsamplesizemax <- 15
  
  # Correlation
  
  maxcorrelation <- 0.995

  # Binomial
  
  minbeta <- 0
  maxbeta <- 50
  
  # Boundaries for probabilities
  
  minalpha <- 0.0001
  maxalpha <- 0.9999
  
  # Info
  # b<sub>1<\sub> &#x2264 p &#x2264 b<sub>2</sub>
  
  output$informationT <- renderUI({
    HTML('

      <p> This program simulates data and performs <b> two-sided </b> <b> Student&#39s <i>t</i>-tests </b>
      within sequential sampling designs.
      It reports the distributions of the corresponding <i>p</i>-values and Bayes Factors for the null (<i>BF<sub>01</sub></i>),
      in addition to a histogram of final sample sizes.

<h4> Usage </h4>


      Choose the method used to define the stopping criterion for the sampling process (either <i>p</i>-values or Bayes Factors) and
      the stopping threshold for rejecting H<sub>0</sub> or gathering enough evidence in favor
      of H<sub>1</sub> respectively, as well as the minimum and maximum sample size allowed. Whenever the minimum
      and maximum sample sizes are set equal, the procedure corresponds to a fixed sampling design.
      
      The application only requires one stopping threshold (<i>b<sub>1</sub></i>),
but it gives the option to add an extra upper threshold (<i>b<sub>2</sub></i>), which yields the sampling procedure described below.
Also, a reference value for the other method can be entered, which will be shown as a mere benchmark in the output plots.
In the frequentist framework, if <i>p < b<sub>1</sub></i>,
      the sampling stops and the null hypothesis is rejected; if <i>p > b<sub>2</sub> </i>, the sampling stops 
      and the null hypothesis is not rejected; if <i> b<sub>1</sub> &#x2264 p &#x2264 b<sub>2</sub> </i> the
      sampling continues. In the Bayesian framework, the sampling procedure with two thresholds is analogous to the one just described
(i.e., BF<sub>01</sub> < b&#39<sub>1</sub> leads to acceptance of H<sub>1</sub>; BF<sub>01</sub> > b&#39<sub>2</sub> leads to acceptance of H<sub>0</sub>;
and if b&#39<sub>1</sub> &#x2264 BF<sub>01</sub> &#x2264 b&#39<sub>2</sub> further data are gathered). When <i> b<sub>1</sub> = 0.01 </i> and <i> b<sub>2</sub> = 0.36 </i>
      this procedure corresponds to Frick&#39s (1998) Composite Adaptive Sequential Test (COAST), which fixes the rate of
      Type I errors to roughly <i>0.05</i>. The sampling procedure with two boundaries for the Bayesian framework is analogous
      to the one just described.
      Also, the user can also change the specifications for the Normal prior distribution over effect sizes
      (Cohen&#39s <i>d</i>), which are set to <i>N(0,1)</i> by default (the null and alternative hypotheses can be expressed in terms of effect sizes).
      </p>

<h4> Output </h4>


  <p> The <b> scatter plot on the left </b> displays log BF<sub>01</sub> against log <i>p</i>-values,
including the proportion of <i>p</i>-values (bottom right) and BF<sub>01</sub> (top left)
smaller than their corresponding boundaries (either the stopping threshold or the reference value, as selected).
The green dots show simulations which stopped with the minimum sample size,
the orange dots represent those that ended with the maximum sample size,
and the purple dots correspond to simulations with other sample sizes (i.e.,
the stopping threshold was reached at some point during the sampling process).
When all sample sizes are the same, all dots are colored green.

Note that the offset of the relation between log <i>p</i>-values and log Bayes Factors
depends on the sample size.

When H0 is true and there is a mismatch between H0 and the mean for the prior distribution,
the relation between log BF<sub>01</sub> and log <i>p</i>-values turns into a two-limbed curve.
The lower limb corresponds to those simulations where the evidence (i.e., data) gathered
lies to the left of H<sub>0</sub>, whilst the upper limb corresponds to evidence that lies to the right of such point.
In the frequentist framework, it can be seen that the empirical type I error rate differs from the nominal
rate under sequential sampling (both, with and without an extra stopping threshold).

        The blue and red <b> histograms on the right </b> show the distribution of log BF<sub>01</sub>
         (top) and <i>p</i>-values (bottom), with tags indicating the proportion of <i>p < b<sub>1</sub></i>, <i> p &#8805 b<sub>1</sub> </i>,
         <i> BF<sub>01</sub> < b&#39<sub>1</sub> </i> and <i> BF<sub>01</sub> &#8805 b&#39<sub>1</sub></i>, as appropriate.
The extra threshold used for data collection (if set) is not shown in the histograms.
The green histogram displays the distribution of
         final sample sizes.</p>

<p> Two additional plots can be accessed by pressing the button between the information and warning icons. To the left, a
plot with the specified <b>prior distribution</b> is displayed; to the right, a <b>sequential chart</b> plots either the <i>p</i>-value
or the BF<sub>01</sub> as a function of sample sizes for each simulation. </p>
         
      </br>
      <p> <b> References </b> </p>
      <p>Frick, R. W. (1998). A better stopping rule for conventional statistical tests. Behavior Research Methods, <i>Instruments, & Computers</i>, 30(4), 690-697.</p>
<p> Garc&iacute;a-P&eacute;rez, M. A. (2016). Thou shalt not bear false witness against null hypothesis significance testing. <i>Educational and Psychological Measurement</i>, 0013164416668232. </p>
      <p>Gronau, Q. F., Ly, A., & Wagenmakers, E. J. (2017). Informed Bayesian t-tests. arXiv preprint arXiv:1704.02479.</p>
         ')
  })
  
  output$informationT2 <- renderUI({
    HTML('<p> This program simulates data and performs <b> two-sided </b> <b> Student&#39s <i>t</i>-tests </b>
      within block sampling designs. It reports the distributions of the corresponding <i>p</i>-values and
      Bayes Factors for the null (<i>BF<sub>01</sub></i>), in addition to a histogram of final sample sizes.
      
<h4> Usage </h4>

      Choose the method used to define the stopping criterion for the sampling process (either <i>p</i>-values or Bayes Factors) and
      the stopping threshold for rejecting H<sub>0</sub> or gathering enough evidence in favor
      of H<sub>1</sub> respectively, as well as the minimum sample size, the size of the sample blocks,
      and the maximum number of blocks allowed.

In both the frequentist and Bayesian frameworks, data are gathered in blocks of the specified size
until the stopping criterion is met. Inflated type I error rates due to multiple comparisons are
inherent to sequential sampling procedures under the frequentist approach.
Those are controlled by default with the (overly conservative) Bonferroni correction,
but the user is allowed to uncheck this option and not correct for multiple comparisons.

Whenever the size of the blocks is set to <i>1</i>,
the procedure corresponds to a sequential sampling design.

Also, the user can also change the specifications for the Normal prior distribution over effect sizes
      (Cohen&#39s <i>d</i>), which are set at <i>N(0,1)</i> by default (the null and alternative hypotheses can be expressed in terms of effect sizes).
      </p>

<h4> Output </h4>

         
  <p> The <b> scatter plot on the left </b> displays log BF<sub>01</sub> against log <i>p</i>-values,
including the proportion of <i>p</i>-values (bottom right) and BF<sub>01</sub> (top left)
smaller than their corresponding boundaries (either the stopping threshold or the reference value, as selected).
The green dots show simulations which stopped with the minimum sample size,
the orange dots represent those that ended with the maximum sample size,
and the purple dots correspond to simulations with other sample sizes (i.e.,
the stopping threshold was reached at some point during the sampling process).

When all sample sizes are the same, all dots are colored green.

Note that the offset of the relation between log <i>p</i>-values and log Bayes Factors
depends on the sample size.

When H0 is true and there is a mismatch between H0 and the mean for the prior distribution,
the relation between log BF<sub>01</sub> and log <i>p</i>-values turns into a two-limbed curve.
The lower limb corresponds to those simulations where the evidence (i.e., data) gathered
lies to the left of H<sub>0</sub>, whilst the upper limb corresponds to evidence that lies to the right of such point.
In the frequentist framework, it can be seen that the empirical type I error rate differs from the nominal
rate under sequential sampling (both, with and without an extra stopping threshold).
         
        The blue and red <b> histograms on the right </b> show the distribution of log BF<sub>01</sub>
         (top) and <i>p</i>-values (bottom), with tags indicating the proportion of <i>p < b<sub>1</sub></i>, <i> p &#8805 b<sub>1</sub> </i>,
         <i> BF<sub>01</sub> < b&#39<sub>1</sub> </i> and <i> BF<sub>01</sub> &#8805 b&#39<sub>1</sub></i>, as appropriate.
The extra threshold used for data collection (if set) is not shown in the histograms.
The green histogram displays the distribution of
         final sample sizes.</p>

      </br>
      <p> <b> References </b> </p>
<p> Garc&iacute;a-P&eacute;rez, M. A. (2016). Thou shalt not bear false witness against null hypothesis significance testing. <i>Educational and Psychological Measurement</i>, 0013164416668232. </p>

      <p>Gronau, Q. F., Ly, A., & Wagenmakers, E. J. (2017). Informed Bayesian t-tests. <i>arXiv preprint arXiv:1704.02479</i>.</p>

         ')
  })
  
  output$informationC <- renderUI({
    HTML('

         <p> This program simulates data and performs <b> two-sided </b> tests for <b> Pearson&#39s correlation </b> with H<sub>0</sub> : <i>&#961; = 0</i>
         within sequential sampling designs. It
          reports the distributions of the corresponding <i>p</i>-values and Bayes Factors for the null (<i>BF<sub>01</sub></i>),
         in addition to a histogram of final sample sizes.

<h4> Usage </h4>


         Choose the method used to define the stopping criterion for the sampling process (either <i>p</i>-values or Bayes Factors) and
         the stopping threshold for rejecting H<sub>0</sub> or gathering enough evidence in favor
         of H<sub>1</sub> respectively, as well as the minimum and maximum sample size allowed.
         Whenever the minimum
      and maximum sample sizes are set equal, the procedure corresponds to a fixed sampling design.
The application only requires one stopping threshold (<i>b<sub>1</sub></i>),
but it gives the option to add an extra upper threshold (<i>b<sub>2</sub></i>), which yields the sampling procedure described below.

Also, a reference value for the other method can be entered, which will be shown as a mere benchmark in the output plots.
In the frequentist framework, if <i>p < b<sub>1</sub></i>,
         the sampling stops and the null hypothesis is rejected; if <i>p > b<sub>2</sub> </i>, the sampling stops 
         and the null hypothesis is not rejected; if <i> b<sub>1</sub> &#x2264 p &#x2264 b<sub>2</sub> </i> the
         sampling continues. In the Bayesian framework, the sampling procedure with two thresholds is analogous to the one just described
(i.e., BF<sub>01</sub> < b&#39<sub>1</sub> leads to acceptance of H<sub>1</sub>; BF<sub>01</sub> > b&#39<sub>2</sub> leads to acceptance of H<sub>0</sub>;
and if b&#39<sub>1</sub> &#x2264 BF<sub>01</sub> &#x2264 b&#39<sub>2</sub> further data are gathered).

        The null hypothesis is fixed to <i>&#961; = 0</i> across all conditions.
         </p>

<h4> Output </h4>

         
  <p> The <b> scatter plot on the left </b> displays log BF<sub>01</sub> against log <i>p</i>-values,
including the proportion of <i>p</i>-values (bottom right) and BF<sub>01</sub> (top left)
smaller than their corresponding boundaries (either the stopping threshold or the reference value, as selected).
The green dots show simulations which stopped with the minimum sample size,
the orange dots represent those that ended with the maximum sample size,
and the purple dots correspond to simulations with other sample sizes (i.e.,
the stopping threshold was reached at some point during the sampling process).
When all sample sizes are the same, all dots are colored green.

         Note that the offset of the relation between log <i>p</i>-values and log Bayes Factors depends on the number
         of observations.
         
        The blue and red <b> histograms on the right </b> show the distribution of log BF<sub>01</sub>
         (top) and <i>p</i>-values (bottom), with tags indicating the proportion of <i>p < b<sub>1</sub></i>, <i> p &#8805 b<sub>1</sub> </i>,
         <i> BF<sub>01</sub> < b&#39<sub>1</sub> </i> and <i> BF<sub>01</sub> &#8805 b&#39<sub>1</sub></i>, as appropriate.
The extra threshold used for data collection (if set) is not shown in the histograms.
The green histogram displays the distribution of
         final sample sizes.</p>
         
<p> Two additional plots can be accessed by pressing the button between the information and warning icons. To the left, a
plot with the specified <b>prior distribution</b> is displayed; to the right, a <b>sequential chart</b> plots either the <i>p</i>-value
or the BF<sub>01</sub> as a function of sample sizes for each simulation. </p>
         
         </br>
         <p> <b> References </b> </p>
<p> Garc&iacute;a-P&eacute;rez, M. A. (2016). Thou shalt not bear false witness against null hypothesis significance testing. <i>Educational and Psychological Measurement</i>, 0013164416668232. </p>

<p> Wetzels, R., & Wagenmakers, E. J. (2012). A default Bayesian hypothesis test for correlations and partial correlations. <i> Psychonomic Bulletin & Review </i>, 19(6), 1057-1064. </p>
         ')
  })
  
  output$informationC2 <- renderUI({
    HTML('<p> This program simulates data and performs <b> two-sided </b> tests for <b> Pearson&#39s correlation </b> with H<sub>0</sub> : <i>&#961; = 0</i>
      within block sampling designs. It reports the distributions of the corresponding <i>p</i>-values and
         Bayes Factors for the null (<i>BF<sub>01</sub></i>), in addition to a histogram of final sample sizes.
         
<h4> Usage </h4>


      Choose the method used to define the stopping criterion for the sampling process (either <i>p</i>-values or Bayes Factors) and
         the stopping threshold for rejecting H<sub>0</sub> or gathering enough evidence in favor
         of H<sub>1</sub> respectively, as well as the minimum sample size, the size of the sample blocks,
         and the maximum number of blocks allowed.

In both the frequentist and Bayesian frameworks, data are gathered in blocks of the specified size
until the stopping criterion is met. Inflated type I error rates due to multiple comparisons are
inherent to sequential sampling procedures under the frequentist approach.
Those are controlled by default with the (overly conservative) Bonferroni correction,
but the user is allowed to uncheck this option and not correct for multiple comparisons.

Whenever the size of the blocks is set to <i>1</i>,
the procedure corresponds to a sequential sampling design.

        The null hypothesis is fixed to <i>&#961; = 0</i> across all conditions.
         </p>

<h4> Output </h4>

         
  <p> The <b> scatter plot on the left </b> displays log BF<sub>01</sub> against log <i>p</i>-values,
including the proportion of <i>p</i>-values (bottom right) and BF<sub>01</sub> (top left)
smaller than their corresponding boundaries (either the stopping threshold or the reference value, as selected).
The green dots show simulations which stopped with the minimum sample size,
the orange dots represent those that ended with the maximum sample size,
and the purple dots correspond to simulations with other sample sizes (i.e.,
the stopping threshold was reached at some point during the sampling process).

When all sample sizes are the same, all dots are colored green.

         Note that the offset of the relation between log <i>p</i>-values and log Bayes Factors depends on the number
         of observations.
         
        The blue and red <b> histograms on the right </b> show the distribution of log BF<sub>01</sub>
         (top) and <i>p</i>-values (bottom), with tags indicating the proportion of <i>p < b<sub>1</sub></i>, <i> p &#8805 b<sub>1</sub> </i>,
         <i> BF<sub>01</sub> < b&#39<sub>1</sub> </i> and <i> BF<sub>01</sub> &#8805 b&#39<sub>1</sub></i>, as appropriate.
The extra threshold used for data collection (if set) is not shown in the histograms.
The green histogram displays the distribution of
         final sample sizes.</p>
         
         
         </br>
         <p> <b> References </b> </p>
<p> Garc&iacute;a-P&eacute;rez, M. A. (2016). Thou shalt not bear false witness against null hypothesis significance testing. <i>Educational and Psychological Measurement</i>, 0013164416668232. </p>

<p> Wetzels, R., & Wagenmakers, E. J. (2012). A default Bayesian hypothesis test for correlations and partial correlations. <i> Psychonomic Bulletin & Review </i>, 19(6), 1057-1064. </p>
         
         ')
  })
  
  output$informationB <- renderUI({
    HTML('

         <p> This program simulates data and performs <b> two-sided </b> tests for a single proportion in a (finite) <b> Bernoulli process </b>
         within sequential sampling designs.
         It reports the distributions of the corresponding <i>p</i>-values and Bayes Factors for the null (<i>BF<sub>01</sub></i>),
         in addition to a histogram of final sample sizes.

<h4> Usage </h4>

         
         Choose the method used to define the stopping criterion for the sampling process (either <i>p</i>-values or Bayes Factors) and
         the stopping threshold for rejecting H<sub>0</sub> or gathering enough evidence in favor
         of H<sub>1</sub> respectively, as well as the minimum and maximum sample size allowed.

Whenever the minimum
      and maximum sample sizes are set equal, the procedure corresponds to a fixed sampling design.
         The application only requires one stopping threshold (<i>b<sub>1</sub></i>),
but it gives the option to add an extra upper threshold (<i>b<sub>2</sub></i>), which yields the sampling procedure described below. 
Also, a reference value for the other method can be entered, which will be shown as a mere benchmark in the output plots.
In the frequentist framework, if <i>p < b<sub>1</sub></i>,
         the sampling stops and the null hypothesis is rejected; if <i>p > b<sub>2</sub> </i>, the sampling stops 
         and the null hypothesis is not rejected; if <i> b<sub>1</sub> &#x2264 p &#x2264 b<sub>2</sub> </i> the
         sampling continues. In the Bayesian framework, the sampling procedure with two thresholds is analogous to the one just described
(i.e., BF<sub>01</sub> < b&#39<sub>1</sub> leads to acceptance of H<sub>1</sub>; BF<sub>01</sub> > b&#39<sub>2</sub> leads to acceptance of H<sub>0</sub>;
and if b&#39<sub>1</sub> &#x2264 BF<sub>01</sub> &#x2264 b&#39<sub>2</sub> further data are gathered). The sampling procedure with two boundaries for the Bayesian framework is analogous
         to the one just described.

         In any case, the user can also change the specifications for the Beta prior distribution over the probability
          of success, which are set at <i>Beta(1,1)</i> by default.

         </p>

<h4> Output </h4>

         
  <p> The <b> scatter plot on the left </b> displays log BF<sub>01</sub> against log <i>p</i>-values,
including the proportion of <i>p</i>-values (bottom right) and BF<sub>01</sub> (top left)
smaller than their corresponding boundaries (either the stopping threshold or the reference value, as selected).
The green dots show simulations which stopped with the minimum sample size,
the orange dots represent those that ended with the maximum sample size,
and the purple dots correspond to simulations with other sample sizes (i.e.,
the stopping threshold was reached at some point during the sampling process).
When all sample sizes are the same, all dots are colored green.

    Note that the offset of the relation between log <i> p</i>-values and log Bayes Factors depends on the number
    of observations.

In addition, specifiying a Beta prior that concentrates mass relatively far from the true
probability of success when H<sub>0</sub> holds turns the scatter plot into a two-limbed curve.
The lower limb corresponds to those simulations where the evidence (i.e., data)
gathered lies to the left of H<sub>0</sub>, whilst the upper limb corresponds to evidence
that lies to the right of such point.

        The blue and red <b> histograms on the right </b> show the distribution of log BF<sub>01</sub>
         (top) and <i>p</i>-values (bottom), with tags indicating the proportion of <i>p < b<sub>1</sub></i>, <i> p &#8805 b<sub>1</sub> </i>,
         <i> BF<sub>01</sub> < b&#39<sub>1</sub> </i> and <i> BF<sub>01</sub> &#8805 b&#39<sub>1</sub></i>, as appropriate.
The extra threshold used for data collection (if set) is not shown in the histograms.
The green histogram displays the distribution of
         final sample sizes.</p>
         
<p> Two additional plots can be accessed by pressing the button between the information and warning icons. To the left, a
plot with the specified <b>prior distribution</b> is displayed; to the right, a <b>sequential chart</b> plots either the <i>p</i>-value
or the BF<sub>01</sub> as a function of sample sizes for each simulation. </p>
         
         </br>
         <p> <b> References </b> </p>
<p> Garc&iacute;a-P&eacute;rez, M. A. (2016). Thou shalt not bear false witness against null hypothesis significance testing. <i>Educational and Psychological Measurement</i>, 0013164416668232. </p>

        <p> Wagenmakers, E. J., Lodewyckx, T., Kuriyal, H., & Grasman, R. (2010). Bayesian hypothesis testing for psychologists: A tutorial on the Savage–Dickey method. <i> Cognitive psychology </i>, 60(3), 158-189. </p>
         ')
  })
  
  output$informationB2 <- renderUI({
    HTML('<p> This program simulates data and performs <b> two-sided </b> tests for a single proportion in a (finite) <b> Bernoulli process </b>
      within block sampling designs. It reports the distributions of the corresponding <i>p</i>-values and
         Bayes Factors for the null (<i>BF<sub>01</sub></i>), in addition to a histogram of final sample sizes.

<h4> Usage </h4>


         Choose the method used to define the stopping criterion for the sampling process (either <i>p</i>-values or Bayes Factors) and
         the stopping threshold for rejecting H<sub>0</sub> or gathering enough evidence in favor
         of H<sub>1</sub> respectively, as well as the minimum sample size, the size of the sample blocks,
         and the maximum number of blocks allowed.

In both the frequentist and Bayesian frameworks, data are gathered in blocks of the specified size
until the stopping criterion is met. Inflated type I error rates due to multiple comparisons are
inherent to sequential sampling procedures under the frequentist approach.
Those are controlled by default with the (overly conservative) Bonferroni correction,
but the user is allowed to uncheck this option and not correct for multiple comparisons.

Whenever the size of the blocks is set to <i>1</i>,
the procedure corresponds to a sequential sampling design.

          In any case, the user can also change the specifications for the Beta prior distribution over the probability
          of success, which are set at <i>Beta(1,1)</i> by default.
         </p>

<h4> Output </h4>

         
  <p> The <b> scatter plot on the left </b> displays log BF<sub>01</sub> against log <i>p</i>-values,
including the proportion of <i>p</i>-values (bottom right) and BF<sub>01</sub> (top left)
smaller than their corresponding boundaries (either the stopping threshold or the reference value, as selected).
The green dots show simulations which stopped with the minimum sample size,
the orange dots represent those that ended with the maximum sample size,
and the purple dots correspond to simulations with other sample sizes (i.e.,
the stopping threshold was reached at some point during the sampling process).

When all sample sizes are the same, all dots are colored green.

    Note that the offset of the relation between log <i> p</i>-values and log Bayes Factors depends on the number
    of observations.

In addition, specifiying a Beta prior that concentrates mass relatively far from the true
probability of success when H<sub>0</sub> holds turns the scatter plot into a two-limbed curve.
The lower limb corresponds to those simulations where the evidence (i.e., data)
gathered lies to the left of H<sub>0</sub>, whilst the upper limb corresponds to evidence
that lies to the right of such point.

        The blue and red <b> histograms on the right </b> show the distribution of log BF<sub>01</sub>
         (top) and <i>p</i>-values (bottom), with tags indicating the proportion of <i>p < b<sub>1</sub></i>, <i> p &#8805 b<sub>1</sub> </i>,
         <i> BF<sub>01</sub> < b&#39<sub>1</sub> </i> and <i> BF<sub>01</sub> &#8805 b&#39<sub>1</sub></i>, as appropriate.
The extra threshold used for data collection (if set) is not shown in the histograms.
The green histogram displays the distribution of
         final sample sizes.</p>
         
         
         </br>
         <p> <b> References </b> </p>
<p> Garc&iacute;a-P&eacute;rez, M. A. (2016). Thou shalt not bear false witness against null hypothesis significance testing. <i>Educational and Psychological Measurement</i>, 0013164416668232. </p>

<p> Wetzels, R., & Wagenmakers, E. J. (2012). A default Bayesian hypothesis test for correlations and partial correlations. <i> Psychonomic Bulletin & Review </i>, 19(6), 1057-1064. </p>
         
         ')
  })
  
  
  # Show blank plots
  
  output$plott <- output$plott2 <- output$plotc <- output$plotc2 <- output$plotb <- output$plotb2 <- renderPlot(default.scatterplot())
  output$histogramst <- output$histogramst2 <- output$histogramsc <- output$histogramsc2 <- output$histogramsb <- output$histogramsb2 <- renderPlot(default.histogram())
  
  output$histogramsnt <-  output$histogramsnt2 <-  output$histogramsnc <-  output$histogramsnc2 <-  output$histogramsnb <-  output$histogramsnb2 <- renderPlot(default.histogram.n())
  output$priorTdist <- output$priorBdist <- output$priorCdist <- renderPlot(default.priorflow())

  output$warningsT <- output$warningsT2 <- output$warningsB <- output$warningsB2 <- output$warningsC <- output$warningsC2 <- renderUI(HTML('<center><h2> There are no warnings to display </h2></center>'))

  # Dynamic part of the UI
  
  # T test
  

  
  observe({
    
    if(input$typetest == "p-values"){
        output$ptitle_ttest <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))
        output$btitle_ttest <- renderUI(HTML("<p> <center> <b> Reference BF<sub>01</sub> </b> </center> </p>"))

    } else {
      output$ptitle_ttest <- renderUI(HTML("<p> <center> <b> Reference <i>p</i>-value </b> </center> </p>"))
      output$btitle_ttest <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))

    }
    
        if(input$typetest2 == "p-values"){
        output$ptitle_ttest2 <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))
        output$btitle_ttest2 <- renderUI(HTML("<p> <center> <b> Reference BF<sub>01</sub> </b> </center> </p>"))

    } else {
      output$ptitle_ttest2 <- renderUI(HTML("<p> <center> <b> Reference <i>p</i>-value </b> </center> </p>"))
      output$btitle_ttest2 <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))

    }
    
  if(input$bnd == T & input$typetest == "p-values"){
    
    shinyjs::show("thres2"); shinyjs::hide("thres3")
    
  } else if (input$bnd == T & input$typetest == "Bayes Factors") {
  
    shinyjs::hide("thres2"); shinyjs::show("thres3")
    
  } else {
    
    shinyjs::hide("thres2"); shinyjs::hide("thres3")
    
  }
  })
  
  # Binomial test
  
    observe({
      
      if(input$typetest.binom == "p-values"){
        output$ptitle_btest <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))
        output$btitle_btest <- renderUI(HTML("<p> <center> <b> Reference BF<sub>01</sub> </b> </center> </p>"))

    } else {
      output$ptitle_btest <- renderUI(HTML("<p> <center> <b> Reference <i>p</i>-value </b> </center> </p>"))
      output$btitle_btest <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))

    }
      
            if(input$typetest2binom == "p-values"){
        output$ptitle_btest2 <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))
        output$btitle_btest2 <- renderUI(HTML("<p> <center> <b> Reference BF<sub>01</sub> </b> </center> </p>"))

    } else {
      output$ptitle_btest2 <- renderUI(HTML("<p> <center> <b> Reference <i>p</i>-value </b> </center> </p>"))
      output$btitle_btest2 <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))

    }
      
  if(input$bnd.binom == T & input$typetest.binom == "p-values"){
    shinyjs::show("thres2.binom"); shinyjs::hide("thres3.binom")
  } else if (input$bnd.binom == T & input$typetest.binom == "Bayes Factors") {
    shinyjs::hide("thres2.binom"); shinyjs::show("thres3.binom")
  } else {
    shinyjs::hide("thres2.binom"); shinyjs::hide("thres3.binom")
  }
  })
    
  # Correlation
    
      observe({
        
            if(input$typetest.cor == "p-values"){
        output$ptitle_ctest <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))
        output$btitle_ctest <- renderUI(HTML("<p> <center> <b> Reference BF<sub>01</sub> </b> </center> </p>"))

    } else {
      output$ptitle_ctest <- renderUI(HTML("<p> <center> <b> Reference <i>p</i>-value </b> </center> </p>"))
      output$btitle_ctest <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))

    }
        
                    if(input$typetestC == "p-values"){
        output$ptitle_ctest2 <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))
        output$btitle_ctest2 <- renderUI(HTML("<p> <center> <b> Reference BF<sub>01</sub> </b> </center> </p>"))

    } else {
      output$ptitle_ctest2 <- renderUI(HTML("<p> <center> <b> Reference <i>p</i>-value </b> </center> </p>"))
      output$btitle_ctest2 <- renderUI(HTML("<p> <center> <b> Stopping threshold </b> </center> </p>"))

    }
        
  if(input$bnd.cor == T & input$typetest.cor == "p-values"){
    shinyjs::show("thresC2"); shinyjs::hide("thresC3")
  } else if (input$bnd.cor == T & input$typetest.cor == "Bayes Factors") {
    shinyjs::hide("thresC2"); shinyjs::show("thresC3")
  } else {
    shinyjs::hide("thresC2"); shinyjs::hide("thresC3")
  }
  })
  
  
  ################################################################################
  #                                    T TEST                                    #
  ################################################################################
  
  
  upperb <- NULL
  
  ################################ SEQUENTIAL DESIGN ############################
  
  observeEvent(input$runT, ignoreNULL = T, {
    
    warnings.t.sequential <- list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
    
    
    shinyjs::hide("runT"); shinyjs::show("fakerunT")
    
    if (is.na(input$nmin) || input$nmin < minsamplesizemin || input$nmin > maxsamplesizemin || !is.integer(input$nmin)) {
      warnings.t.sequential[[1]] <- paste("The minimum sample size must be an integer between ", minsamplesizemin, " and ", maxsamplesizemin, ".", sep = "")
      nmin.t <- 5
    } else {
      nmin.t <- input$nmin
    }
    
    
    if (is.na(input$nmax) || input$nmax < minsamplesizemax || input$nmax > maxsamplesizemax || !is.integer(input$nmax)) {
      warnings.t.sequential[[2]] <- paste("The maximum sample size must be an integer between ", minsamplesizemax, " and ", maxsamplesizemax, ".", sep = "")
      nmax.t <- 100
    } else {
      nmax.t <- input$nmax
    }
    
    if (is.na(input$thres1) || input$thres1 < minalpha || input$thres1 > maxalpha){
      warnings.t.sequential[[3]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
      alpha <- 0.05
    } else {
      alpha <- input$thres1
    }
    
    if(input$bnd == T & input$typetest == "p-values"){
      if(is.na(input$thres2) || input$thres2 < minalpha || input$thres2 > maxalpha){
        warnings.t.sequential[[4]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
        upperb <- alpha2 <- 0.36
      } else {
        upperb <- alpha2 <- input$thres2
      }
    } else {
      alpha2 <- NA
    }
    
    if (is.na(input$scale) || input$scale <= 0){
      warnings.t.sequential[[5]] <- paste("The standard deviation of the Bayesian prior distribution must be a positive real.", sep = "")
    } else {
      r <- input$scale
    }
    
    if(is.na(input$mu) || input$mu > maxmu || input$mu < minmu){
      warnings.t.sequential[[6]] <- paste("The true mean must be between ", minmu, " and ", maxmu, ".", sep = "")
    } else {
      mu <- input$mu
    }
    
    if(is.na(input$H0) || input$H0 > maxmu || input$H0 < minmu){
      warnings.t.sequential[[7]] <- paste("The mean under the null must be between ", minmu, " and ", maxmu, ".", sep = "")
    } else {
      H0 <- input$H0
    }
    
    if(is.na(input$thres4) || input$thres4 > maxbf || input$thres4 < minbf){
      warnings.t.sequential[[8]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
    }
    
    if(input$bnd == T & input$typetest == "Bayes Factors"){
      if(is.na(input$thres3) || input$thres3 < minbf || input$thres3 > maxbf){
        warnings.t.sequential[[9]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
      } else {
        upperb <- bf2 <- input$thres3
      }
    } else {
      bf2 <- NA
    }
    
    if(is.na(input$muprior) || input$muprior > maxmu || input$muprior < minmu){
      warnings.t.sequential[[10]] <- paste("The prior mean must be between ", minmu, " and ", maxmu, ".", sep = "")
    } else {
      muprior <- input$muprior
    }
    
    if(input$nmin > input$nmax){
      warnings.t.sequential[[11]] <- paste("The minimum sample size must be smaller than the maximum sample size.", sep = "")
    }
  
  # If there's an error, show blank plots, display warnings, and terminate execution
  
  if (any(sapply(warnings.t.sequential, is.null) == FALSE)){
    output$plott <- renderPlot(default.scatterplot())
    output$histogramst <- renderPlot(default.histogram())
    output$histogramsnt <- renderPlot(default.histogram.n())
    output$priorTdist <- renderPlot(default.priorflow())
    output$warningsT <- renderUI(HTML(paste("<p>", warnings.t.sequential[!(sapply(warnings.t.sequential, is.null))], "</p><p>")))
    output$alertT <- renderUI(HTML('<script> sweetAlert(\'Simulation failed!\',\' It appears you have entered at least one incorrect input. Check the warnings for details. \',\'error\') </script>'))
    shinyjs::hide("fakerunT"); shinyjs::show("runT")
    return()
  }
    
    std <- 1
    nrep <- 1000
    
    somedata <- matrix(data = rnorm(mean = mu, sd = std, n = nrep*nmax.t),
                     nrow = nrep, ncol = nmax.t, byrow = TRUE)
    
    R <- (apply(somedata, MARGIN = 1,
    FUN = function(somedata, nmin, nmax) data.frame(sapply(0:(nmax-nmin),
      FUN = function(x, nmin){
        mu <- mean(somedata[(1:(nmin+x) )])
        std <- sd(somedata[(1:(nmin+x) )])
        return(c(nmin+x, mu, std))
      },
    nmin = nmin)), nmin = nmin.t, nmax = nmax.t))
    
    freq.results <- lapply(lapply(R,
      FUN = function(x, H0) apply(x, MARGIN = 2,
      FUN = onesample.ttest.custom,
      H0 = H0, returnn = T), H0 = H0), FUN = t)
    
    if(input$typetest == "p-values" & input$bnd == F){
      RS <- t(sapply(freq.results, sequential.alpha, alpha = alpha, nmin = nmin.t, nmax = nmax.t))
      colnames(RS) <- c("t", "p-value", "n")
      bayes.results <- apply(X = RS, 1, FUN = onesample.ttest.bayes.custom2, g = input$scale,
                             mu.delta = muprior)
      results <- cbind(RS, bayes.results[1,])
      colnames(results) <- c("t", "p-value", "n", "BF01")
      lowerb <- alpha
      
      
    } else if(input$typetest == "p-values" & input$bnd == T){
      RS <- t(sapply(freq.results, sequential.COAST, nmin = nmin.t, nmax = nmax.t, alpha = c(alpha, upperb)))
      colnames(RS) <- c("t", "p-value", "n")
      bayes.results <- apply(X = RS, 1, FUN = onesample.ttest.bayes.custom2, g = input$scale,
                             mu.delta = muprior)
      results <- cbind(RS, bayes.results[1,])
      colnames(results) <- c("t", "p-value", "n", "BF01")
      lowerb <- alpha
      
    } else if(input$typetest == "Bayes Factors" & input$bnd == F){
      
      lowerb <- input$thres4
      
      bayes.results <- lapply(X = freq.results, FUN = function(x) apply(x, 1,
        FUN = onesample.ttest.bayes.custom2, g = input$scale, mu.delta = muprior))
      results <- matrix(unlist(sapply(bayes.results, sequential.BF, cutpoint = lowerb,
        nmin = nmin.t, nmax = nmax.t)), ncol = 4, byrow = T)
      colnames(results) <- c("t", "p-value", "n", "BF01")
      
      freq.results <- bayes.results
      
 
      
    } else if(input$typetest == "Bayes Factors" & input$bnd == T){
      bayes.results <- lapply(X = freq.results, FUN = function(x) apply(x, 1,
        FUN = onesample.ttest.bayes.custom2, g = input$scale, mu.delta = muprior))
      results <- matrix(unlist(sapply(bayes.results, sequential.BF.corrected, cutpoint = c(input$thres2, input$thres4),
        nmin = nmin.t, nmax = nmax.t)), ncol = 4, byrow = T)
      colnames(results) <- c("t", "p-value", "n", "BF01")
      freq.results <- bayes.results
      lowerb <- input$thres4
    }
    
    x <- seq(-5, 5, length = 500)
    y <- dnorm(x, muprior, r^2)
    
    output$histogramsnt <- renderPlot({
      plot.histogram.n(results, nmax = nmax.t, nmin = nmin.t)
    })
    
    output$plott <- renderPlot({
      plot.scatterplot(results = results, nrep = nrep, alpha = alpha, thres = isolate(input$thres4), nmin = nmin.t, nmax = nmax.t)
    })
    
    output$histogramst <- renderPlot({
      plot.histograms(results = results, nrep = nrep, alpha = c(alpha, alpha2), thres = c(isolate(input$thres4), bf2) )
    })
    
    output$priorTdist <- renderPlot({
      prior.flow(results = results, freq.results = freq.results,
                 nmin = nmin.t, nmax = nmax.t, alpha = c(lowerb, upperb),
                 type = isolate(input$typetest), x = x, y = y)
    })
    
          output$legendplott <- renderPlot({
      legend.plot()
    })

    output$alertT <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
  
    shinyjs::hide("fakerunT"); shinyjs::show("runT")
    
  })
  
  ################################ BLOCK DESIGN ############################
  
  
  observeEvent(input$runT2, ignoreNULL = T, {
    
    warnings.t.block <- list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
    
    
    shinyjs::hide("runT2"); shinyjs::show("fakerunT2")
    
    if (is.na(input$nmin.block) || input$nmin.block < minsamplesizemin || input$nmin.block > maxsamplesizemin || !is.integer(input$nmin.block)) {
      warnings.t.block[[1]] <- paste("The minimum sample size must be an integer between ", minsamplesizemin, " and ", maxsamplesizemin, ".", sep = "")
      nmin <- 5
    } else {
      nmin <- input$nmin.block
    }
    
    if (is.na(input$alpha.block) || input$alpha.block < minalpha || input$alpha.block > maxalpha){
      warnings.t.block[[2]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", cat("\n"), sep = "")
      alpha <- 0.05
    } else {
      alpha <- input$alpha.block
    }
    
    if (is.na(input$nblocks) || input$nblocks < minblocks || input$nblocks > maxblocks || !is.integer(input$nblocks)) {
      warnings.t.block[[3]] <- paste("The number of blocks must be an integer between ", minblocks, " and ", maxblocks, ".", sep = "")
      nblocks <- 5
    } else {
      nblocks <- input$nblocks
    }
    
    if (is.na(input$bsize) || input$bsize < minsizeblock || input$bsize > maxsize || !is.integer(input$bsize)) {
      warnings.t.block[[4]] <- paste("The size of the blocks must be an integer between ", minsizeblock, " and ", maxsize, ".", sep = "")
      blocksize <- 10
    } else {
      blocksize <- input$bsize
    }
    
    if (is.na(input$scale.block) || input$scale.block <= 0){
      warnings.t.block[[5]] <- paste("The standard deviation of the Bayesian prior distribution must be a positive real.", sep = "")
    } else {
      r <- input$scale.block
    }
    
    if(is.na(input$mu.block) || input$mu.block > maxmu || input$mu.block < minmu){
      warnings.t.block[[6]] <- paste("The true mean must be between ", minmu, " and ", maxmu, ".", sep = "")
    } else {
      mu <- input$mu.block
    }
    
    if(is.na(input$H0.block) || input$H0.block > maxmu || input$H0.block < minmu){
      warnings.t.block[[7]] <- paste("The mean under the null must be between ", minmu, " and ", maxmu, ".", sep = "")
    } else {
      H0 <- input$H0.block
    }
    
    if(is.na(input$thres.block) || input$thres.block < minbf || input$thres.block > maxbf){
      warnings.t.block[[8]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
    }
    
    if(is.na(input$muprior.block) || input$muprior.block > maxmu || input$muprior.block < minmu){
      warnings.t.block[[9]] <- paste("The prior mean must be between ", minmu, " and ", maxmu, ".", sep = "")
    } else {
      muprior <- input$muprior.block
    }
    
    
    # If there's an error, show blank plots, display warnings, and terminate execution
    
    if (any(sapply(warnings.t.block, is.null) == FALSE)){
      output$plott2 <- renderPlot(default.scatterplot())
      output$histogramst2 <- renderPlot(default.histogram())
      output$histogramsnt2 <- renderPlot(default.histogram.n())
      output$warningsT2 <- renderUI(HTML(paste("<p>", warnings.t.block[!(sapply(warnings.t.block, is.null))], "</p><p>")))
      output$alertT2 <- renderUI(HTML('<script> sweetAlert(\'Simulation failed!\',\' It appears you have entered at least one incorrect input. Check the warnings for details. \',\'error\') </script>'))
      shinyjs::hide("fakerunT2"); shinyjs::show("runT2")
      return()
    }
    
    
    std <- 1
    nmax <- nmin + blocksize*nblocks
    nrep <- 1000
    if(input$bonf == T){
      alpha <- alpha/(nblocks+1) # Bonferroni (according to the total n of comparisons)
    }
    
    somedata <- matrix(data = rnorm(mean = mu, sd = std, n = nrep*nmax),
                     nrow = nrep, ncol = nmax, byrow = TRUE)
    
    I <- seq(nmin, nmax, by = blocksize)
    
    R <- apply(somedata, MARGIN = 1,
      FUN = function(somedata, nmin, nmax, blocksize, I) data.frame(sapply(I,
      FUN = function(x) {
      return(c(x, mean(somedata[(1:x)]), sd(somedata[(1:x)])))
        })), nmin = nmin, nmax = nmax, I = I, blocksize = blocksize)
    
    freq.results <- lapply(lapply(R,
    FUN = function(x, H0) apply(x, MARGIN = 2,
    FUN = onesample.ttest.custom,
    H0 = H0, returnn = TRUE), H0 = H0), FUN = t)
    
    if(input$typetest2 == "p-values"){
      RS <- t(sapply(freq.results, sequential.alpha, alpha = alpha, nmin = nmin, nmax = nmax))
      colnames(RS) <- c("t", "p-value", "n")
      bayes.results <- apply(X = RS, 1, FUN = onesample.ttest.bayes.custom2, g = input$scale.block,
                             mu.delta = muprior)
      results <- cbind(RS, bayes.results[1,])
    } else if (input$typetest2 == "Bayes Factors"){
      bayes.results <- lapply(X = freq.results, FUN = function(x) apply(x, 1,
      FUN = onesample.ttest.bayes.custom2, g = input$scale.block, mu.delta = muprior))
      results <- matrix(unlist(sapply(bayes.results, sequential.BF, cutpoint = input$thres.block,
      nmin = nmin, nmax = nmax)), ncol = 4, byrow = T)
    }
    colnames(results) <- c("t", "p-value", "n", "BF01")
    
    output$plott2 <- renderPlot({
      plot.scatterplot(results = results, nrep = nrep, alpha = alpha, thres = isolate(input$thres.block), nmin = nmin, nmax = nmax)
    })
    
    output$histogramst2 <- renderPlot({
      plot.histograms(results = results, nrep = nrep, alpha = alpha, thres = isolate(input$thres.block))
    })
    
    output$histogramsnt2 <- renderPlot({
      plot.histogram.n(results)
    })
    
       output$legendplott2 <- renderPlot({
      legend.plot()
    })
    
    
    
    output$alertT2 <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
  
    shinyjs::hide("fakerunT2"); shinyjs::show("runT2")
    
    })
  
  ###############################################################################
  #                                CORRELATION                                  #
  ###############################################################################
  
  ################################ SEQUENTIAL DESIGN ############################
  
  
  observeEvent(input$runC, ignoreNULL = T, {
    
    warnings.c.sequential <- list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
    
    shinyjs::hide("runC"); shinyjs::show("fakerunC")
    
    # Evaluate warnings
    
    if(input$nmin.cor > input$nmax.cor){
      warnings.c.sequential[[8]] <- paste("The minimum sample size must be smaller than the maximum sample size.", sep = "")
    }
    
    if (is.na(input$nmin.cor) || input$nmin.cor < minsamplesizemin || input$nmin.cor > maxsamplesizemin || !is.integer(input$nmin.cor)) {
      warnings.c.sequential[[1]] <- paste("The minimum sample size must be an integer between ", minsamplesizemin, " and ", maxsamplesizemin, ".", sep = "")
      nmin <- 5
    } else {
      nmin <- input$nmin.cor
    }
    
    
    if (is.na(input$nmax.cor) || input$nmax.cor < minsamplesizemax || input$nmax.cor > maxsamplesizemax || !is.integer(input$nmax.cor)) {
      warnings.c.sequential[[2]] <- paste("The maximum sample size must be an integer between ", minsamplesizemax, " and ", maxsamplesizemax, ".", sep = "")
      nmax <- 100
    } else {
      nmax <- input$nmax.cor
    }
    
    if (is.na(input$thresC1) || input$thresC1 < minalpha || input$thresC1 > maxalpha){
      warnings.c.sequential[[3]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
      alpha <- 0.05
    } else {
      alpha <- input$thresC1
    }
    
    if(input$bnd.cor == T & input$typetest.cor == "p-values"){
      if(is.na(input$thresC2) || input$thresC2 < minalpha || input$thresC2 > maxalpha){
        warnings.c.sequential[[4]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
        upperb <- 0.36
      } else {
        upperb <- input$thresC2
      }
    }
    
    
    if(is.na(input$rho) || input$rho > maxcorrelation || input$rho < -maxcorrelation){
      warnings.c.sequential[[6]] <- paste("The true correlation must be between ", -maxcorrelation, " and ", maxcorrelation, ".", sep = "")
    } else {
      rho <- input$rho
    }

    if(is.na(input$thresC4) || input$thresC4 > maxbf || input$thresC4 < minbf){
      warnings.c.sequential[[7]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
    }
    
    if(input$bnd.cor == T & input$typetest.cor == "Bayes Factors"){
      if(is.na(input$thresC3) || input$thresC3 < minbf || input$thresC3 > maxbf){
        warnings.c.sequential[[5]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
      } else {
        upperb <- input$thresC3
      }
    }
    
    if (any(sapply(warnings.c.sequential, is.null) == FALSE)){
      output$plotc <- renderPlot(default.scatterplot())
      output$histogramsc <- renderPlot(default.histogram())
      output$histogramsnc <- renderPlot(default.histogram.n())
      output$priorCdist <- renderPlot(default.priorflow())
      output$warningsC <- renderUI(HTML(paste("<p>", warnings.c.sequential[!(sapply(warnings.c.sequential, is.null))], "</p><p>")))
      output$alertC <- renderUI(HTML('<script> sweetAlert(\'Simulation failed!\',\' It appears you have entered at least one incorrect input. Check the warnings for details. \',\'error\') </script>'))
      shinyjs::hide("fakerunC"); shinyjs::show("runC")
      return()
    }
    
    # Common for all tests
    
    nrep <- 1000
    mu <- 0
    sigma <- 1
    i <- nmin:nmax
    
    vcov.mx <- matrix(c(sigma^2, rho * sigma * sigma, rho * sigma * sigma, sigma^2), nrow=2)
    
    # half of a row is a "max sample"
    # each row is a simulation
    somedata <- matrix(data = as.vector(mvrnorm(nmax*nrep,
        c(mu, mu), vcov.mx)), nrow = nrep, ncol = nmax*2, byrow = FALSE)
    
    freq.results <- apply(somedata, MARGIN = 1, FUN = function(somedata, i, nmax){
      data.frame(t(sapply(i, FUN = function(i, somedata, nmax){
        # picks i observations from each population (i being nmin to nmax)
        correlation(c(somedata[1:i], somedata[(nmax+1):(nmax+i)]), samplesize = i)
      }, somedata = somedata, nmax = nmax)))
    }, i = i, nmax = nmax)
    
    # Specific tests depending on input
    
    if(input$typetest.cor == "p-values" & input$bnd.cor == F){
      seq.results <- t(sapply(freq.results, FUN = sequential.alpha.cor, alpha = alpha))
      results <- t(apply(seq.results, MARGIN = 1, FUN = correlation.bayes))
      lowerb <- alpha
      
    } else if(input$typetest.cor == "p-values" & input$bnd.cor == T){
      seq.results <- t(sapply(freq.results, FUN = sequential.COAST.cor, alpha = c(alpha, upperb)))
      results <- t(apply(seq.results, MARGIN = 1, FUN = correlation.bayes))
      lowerb <- alpha
      
    } else if(input$typetest.cor == "Bayes Factors" & input$bnd.cor == F){
      
      bayes.results <- lapply(freq.results, FUN = function(seq.results, k){
        apply(seq.results, MARGIN = 1, FUN = correlation.bayes)
      }, k = k)
      
      freq.results <- lapply(bayes.results, FUN = function(x){
        res <- rbind(x[5,], x[2,], x[1,])
        rownames(res) <- c("BF01", "p-value", "t statistic")
        return(res)
      })
      
      results <- t(sapply(bayes.results, FUN = sequential.bayes.cor, thres = input$thresC4))
      lowerb <- input$thresC4
      
    } else if(input$typetest.cor == "Bayes Factors" & input$bnd.cor == T){
      bayes.results <- lapply(freq.results, FUN = function(seq.results, k){
        apply(seq.results, MARGIN = 1, FUN = correlation.bayes)
      }, k = k)

      freq.results <- lapply(bayes.results, FUN = function(x){
        res <- rbind(x[5,], x[2,], x[1,])
        rownames(res) <- c("BF01", "p-value", "t statistic")
        return(res)
      })      

      results <- t(sapply(bayes.results, FUN = sequential.bayes.corrected.cor, thres =  c(input$thresC2, input$thresC4)))
      lowerb <- input$thresC4
    }
    
    x <- seq(0, 1, length = 500)
    fakex <- seq(-1, 1, length = 500)
    y <- dbeta(x, 1, 1)*2-1
    
    output$histogramsnc <- renderPlot({
      plot.histogram.n(results[,-3])
    })
    
    output$plotc <- renderPlot({
      plot.scatterplot(results = results[,-3], nrep = nrep, alpha = alpha, thres = isolate(input$thresC4), nmin = nmin, nmax = nmax)
    })
    
    output$histogramsc <- renderPlot({
      plot.histograms(results = results[,-3], nrep = nrep, alpha = alpha, thres = isolate(input$thresC4))
    })
    
    output$priorCdist <- renderPlot({
      prior.flow(results = results[,-3], freq.results = freq.results,
                 nmin = nmin, nmax = nmax, alpha = c(lowerb, upperb),
                 type = isolate(input$typetest.cor), x = fakex, y = y)
    })
    
      output$legendplotc <- renderPlot({
      legend.plot()
    })
    
    output$alertC <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
    
    shinyjs::hide("fakerunC"); shinyjs::show("runC")
    
  })
  
  ################################ BLOCK DESIGN ############################
  
  
  observeEvent(input$runC2, ignoreNULL = T, {
    
    warnings.c.block <- list(NULL, NULL, NULL, NULL, NULL, NULL)
    
    shinyjs::hide("runC2"); shinyjs::show("fakerunC2")
    
    if (is.na(input$nmin.block.corr) || input$nmin.block.corr < minsamplesizemin || input$nmin.block.corr > maxsamplesizemin || !is.integer(input$nmin.block.corr)) {
    warnings.c.block[[1]] <- paste("The minimum sample size must be an integer between ", minsamplesizemin, " and ", maxsamplesizemin, ".", sep = "")
      nmin <- 5
    } else {
      nmin <- input$nmin.block.corr
    }
    
    if (is.na(input$alpha.block.corr) || input$alpha.block.corr < minalpha || input$alpha.block.corr > maxalpha){
      warnings.c.block[[2]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", cat("\n"), sep = "")
      alpha <- 0.05
    } else {
      alpha <- input$alpha.block.corr
    }
    
    if (is.na(input$nblocks.corr) || input$nblocks.corr < minblocks || input$nblocks.corr > maxblocks || !is.integer(input$nblocks.corr)) {
      warnings.c.block[[3]] <- paste("The number of blocks must be an integer between ", minblocks, " and ", maxblocks, ".", sep = "")
      nblocks <- 5
    } else {
      nblocks <- input$nblocks.corr
    }
    
    if (is.na(input$bsize.corr) || input$bsize.corr < minsizeblock || input$bsize.corr > maxsize || !is.integer(input$bsize.corr)) {
      warnings.c.block[[4]] <- paste("The size of the blocks must be an integer between ", minsizeblock, " and ", maxsize, ".", sep = "")
      blocksize <- 10
    } else {
      blocksize <- input$bsize.corr
    }
    
    if(is.na(input$rho.block) || input$rho.block > maxmu || input$rho.block < minmu){
      warnings.c.block[[5]] <- paste("The true correlation must be between ", -maxcorrelation, " and ", maxcorrelation, ".", sep = "")
    } else {
      rho <- input$rho.block
    }
    
    if(is.na(input$thres.block.corr) || input$thres.block.corr < minbf || input$thres.block.corr > maxbf){
      warnings.c.block[[6]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
    }
    
    
    
    if (any(sapply(warnings.c.block, is.null) == FALSE)){
      output$plotc2 <- renderPlot(default.scatterplot())
      output$histogramsc2 <- renderPlot(default.histogram())
      output$histogramsnc2 <- renderPlot(default.histogram.n())
      output$warningsC2 <- renderUI(HTML(paste("<p>", warnings.c.block[!(sapply(warnings.c.block, is.null))], "</p><p>")))
      output$alertC2 <- renderUI(HTML('<script> sweetAlert(\'Simulation failed!\',\' It appears you have entered at least one incorrect input. Check the warnings for details. \',\'error\') </script>'))
      shinyjs::hide("fakerunC2"); shinyjs::show("runC2")
      return()
    }
    
    
    nmax <- nmin + blocksize*nblocks
    nrep <- 1000
    if(input$bonf.corr == T){
      alpha <- alpha/(nblocks+1) # Bonferroni (according to the total n of comparisons)
    }
    mu <- 0
    std <- 1
    i <- seq(nmin, nmax, by = blocksize) # Sample sizes for all the blocks
    
    somedata <- matrix(data = rnorm(mean = mu, sd = std, n = nrep*nmax),
                       nrow = nrep, ncol = nmax, byrow = TRUE)
    
    vcov.mx <- matrix(c(std^2, rho * std * std, rho * std * std, std^2), nrow=2)
    
    somedata <- matrix(data = as.vector(mvrnorm(nmax*nrep,
        c(mu, mu), vcov.mx)), nrow = nrep, ncol = nmax*2, byrow = FALSE)
    
    freq.results <- apply(somedata, MARGIN = 1, FUN = function(somedata, i, nmax){
      data.frame(t(sapply(i, FUN = function(i, somedata, nmax){
        correlation(c(somedata[1:i], somedata[(nmax+1):(nmax+i)]), samplesize = i)
      }, somedata = somedata, nmax = nmax)))
    }, i = i, nmax = nmax)
    
    
    if(input$typetestC == "p-values"){
      
      seq.results <- t(sapply(freq.results, FUN = sequential.alpha.cor, alpha = alpha))
      results <- t(apply(seq.results, MARGIN = 1, FUN = correlation.bayes))
      
    } else if (input$typetestC == "Bayes Factors"){
      
      
      bayes.results <- lapply(freq.results, FUN = function(seq.results){
        apply(seq.results, MARGIN = 1, FUN = correlation.bayes)
      })
      
      results <- t(sapply(bayes.results, FUN = sequential.bayes.cor, thres = isolate(input$thres.block.corr)))
      
    }
    
    
    
    output$histogramsnc2 <- renderPlot({
      plot.histogram.n(results[,-3])
    })
    
    output$plotc2 <- renderPlot({
      plot.scatterplot(results = results[,-3], nrep = nrep, alpha = alpha, thres = isolate(input$thresC4), nmin = nmin, nmax = nmax)
    })
    
    output$histogramsc2 <- renderPlot({
      plot.histograms(results = results[,-3], nrep = nrep, alpha = alpha, thres = isolate(input$thresC4))
    })
    
      output$legendplotc2 <- renderPlot({
      legend.plot()
    })
    
    output$alertC2 <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
    
    shinyjs::hide("fakerunC2"); shinyjs::show("runC2")
    
  })
  
  ###############################################################################
  #                               BINOMIAL TEST                                 #
  ###############################################################################
  
  ################################ SEQUENTIAL DESIGN ############################
  
  
  observeEvent(input$runB, ignoreNULL = T, {
    
    warnings.b.sequential <- list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
    
    shinyjs::hide("runB"); shinyjs::show("fakerunB")
    
    if(input$nmin.binom > input$nmax.binom){
      warnings.b.sequential[[11]] <- paste("The minimum sample size must be smaller than the maximum sample size.", sep = "")
    }
    
    if (is.na(input$nmin.binom) || input$nmin.binom < minsamplesizemin || input$nmin.binom > maxsamplesizemin || !is.integer(input$nmin.binom)) {
      warnings.b.sequential[[1]] <- paste("The minimum sample size must be an integer between ", minsamplesizemin, " and ", maxsamplesizemin, ".", sep = "")
      nmin <- 15
    } else {
      nmin <- input$nmin.binom
    }
    
    
    if (is.na(input$nmax.binom) || input$nmax.binom < minsamplesizemax || input$nmax.binom > maxsamplesizemax || !is.integer(input$nmax.binom)) {
      warnings.b.sequential[[2]] <- paste("The maximum sample size must be an integer between ", minsamplesizemax, " and ", maxsamplesizemax, ".", sep = "")
      nmax <- 100
    } else {
      nmax <- input$nmax.binom
    }
    
    if (is.na(input$thres1.binom) || input$thres1.binom < minalpha || input$thres1.binom > maxalpha){
      warnings.b.sequential[[3]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
      alpha <- 0.05
    } else {
      alpha <- input$thres1.binom
    }
    
    if(input$bnd.binom == T & input$typetest.binom == "p-values"){
      if(is.na(input$thres2.binom) || input$thres2.binom < minalpha || input$thres2.binom > maxalpha){
        warnings.b.sequential[[4]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
        upperb <- 0.36
      } else {
        upperb <- input$thres2.binom
      }
    }
    
    if (is.na(input$a) || input$a < minbeta || input$a > maxbeta){
      warnings.b.sequential[[5]] <- paste("The parameters for the prior Beta distribution must be defined betweeen ", minbeta, " and ", maxbeta, "." , sep = "")
    } else {
      a <- input$a
    }
    
    if (is.na(input$b) || input$b < minbeta || input$b > maxbeta){
      warnings.b.sequential[[6]] <- paste("The parameters for the prior Beta distribution must be defined betweeen ", minbeta, " and ", maxbeta, "." , sep = "")
    } else {
      b <- input$b
    }
    
    if(is.na(input$H0.p) || input$H0.p > maxalpha || input$H0.p < minalpha){
      warnings.b.sequential[[7]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
    } else {
      H0 <- input$H0.p
    }
    
    if(is.na(input$thres4.binom) || input$thres4.binom > maxbf || input$thres4.binom < minbf){
      warnings.b.sequential[[8]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
    } else {
      thresbf <- input$thres4.binom
    }
    
    if(input$bnd.binom == T & input$typetest.binom == "Bayes Factors"){
      if(is.na(input$thres3.binom) || input$thres3.binom < minbf || input$thres3.binom > maxbf){
        warnings.b.sequential[[9]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
      } else {
        upperb <- input$thres3.binom
      }
    }
    
    if(is.na(input$p) || input$p > maxalpha || input$p < minalpha){
      warnings.b.sequential[[10]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
    } else {
      truep <- input$p
    }
    
    
    if (any(sapply(warnings.b.sequential, is.null) == FALSE)){
      output$plotb <- renderPlot(default.scatterplot())
      output$histogramsb <- renderPlot(default.histogram())
      output$histogramsnb <- renderPlot(default.histogram.n())
      output$priorBdist <- renderPlot(default.priorflow())
      output$warningsB <- renderUI(HTML(paste("<p>", warnings.b.sequential[!(sapply(warnings.b.sequential, is.null))], "</p><p>")))
      output$alertB <- renderUI(HTML('<script> sweetAlert(\'Simulation failed!\',\' It appears you have entered at least one incorrect input. Check the warnings for details. \',\'error\') </script>'))
      shinyjs::hide("fakerunB"); shinyjs::show("runB")
      return()
    }
    
    # Common for all tests
    
    nrep <- 1000
    
    somedata <- matrix(data = rbinom(size = 1, prob = truep, n = nrep*nmax),
                       nrow = nrep, ncol = nmax, byrow = TRUE)
    
    nsuccess <- apply(somedata, MARGIN = 1,
              FUN = function(somedata, nmin, nmax) data.frame(sapply(0:(nmax-nmin),
              FUN = function(x, nmin, somedata){
              return( c(sum(somedata[1:(nmin+x)]), nmin+x ))
              }, nmin = nmin, somedata = somedata)), nmin = nmin, nmax = nmax)
    
    freq.results <- lapply(lapply(nsuccess, FUN = function(x, H0) apply(x, MARGIN = 2,
            FUN = binomial.test.custom, H0 = H0), H0 = H0), FUN = t)
    
    # Specific tests depending on input
    
    if(input$typetest.binom == "p-values" & input$bnd.binom == F){
      
      seq.results <- t(sapply(freq.results, sequential.alpha.binom, alpha = alpha, nmin = nmin, nmax = nmax))
      colnames(seq.results) <- c("n success", "p-value", "n")
      results <- t(apply(X = seq.results, 1, FUN = binomial.bayes.custom, a = a, b = b, p = H0))
      
      lowerb <- alpha
      
    } else if(input$typetest.binom == "p-values" & input$bnd.binom == T){
      
      seq.results <- t(sapply(freq.results, sequential.COAST.binom, alpha = c(alpha, upperb), nmin = nmin, nmax = nmax))
      colnames(seq.results) <- c("n success", "p-value", "n")
      results <- t(apply(X = seq.results, 1, FUN = binomial.bayes.custom, a = a, b = b, p = H0))
      lowerb <- alpha
      
    } else if(input$typetest.binom == "Bayes Factors" & input$bnd.binom == F){
      
      bayes.results <- lapply(X = freq.results, FUN = function(seq.results) {
        apply(X = seq.results, 1, FUN = binomial.bayes.custom, a = a, b = b, p = H0)
      })
      results <- t(sapply(bayes.results, sequential.BF.binom,
                          cutpoint = thresbf, nmin = nmin, nmax = nmax))

      freq.results <- lapply(bayes.results, FUN = function(x){
        res <- rbind(x[4,], x[2,], x[1,])
        rownames(res) <- c("BF01", "p-value", "n successes")
        return(res)
      })      
      
      lowerb <- input$thres4.binom
      
    } else if(input$typetest.binom == "Bayes Factors" & input$bnd.binom == T){
      bayes.results <- lapply(X = freq.results, FUN = function(seq.results) {
        t(apply(X = seq.results, 1, FUN = binomial.bayes.custom, a = a, b = b, p = H0))
      })
      results <- t(sapply(bayes.results, sequential.BF.corrected.binom,
                          cutpoint = c(upperb, thresbf), nmin = nmin, nmax = nmax))
      
      freq.results <- lapply(bayes.results, FUN = function(x){
        res <- rbind(x[,4], x[,2], x[,1])
        rownames(res) <- c("BF01", "p-value", "n successes")
        return(res)
      })
      
       lowerb <- input$thres4.binom
    }
    
    output$histogramsnb <- renderPlot({
      plot.histogram.n(results)
    })
    
    output$plotb <- renderPlot({
      plot.scatterplot(results = results, nrep = nrep, alpha = alpha, thres = thresbf, nmin = nmin, nmax = nmax)
    })
    
    output$histogramsb <- renderPlot({
      plot.histograms(results = results, nrep = nrep, alpha = alpha, thres = thresbf)
    })
    
    output$legendplotb <- renderPlot({
      legend.plot()
    })
    
    x <- seq(0, 1, .001)
    y <- dbeta(x, a, b)
    
    output$priorBdist <- renderPlot({
      prior.flow(results = results, freq.results = freq.results,
                 nmin = nmin, nmax = nmax, alpha = c(lowerb, upperb),
                 type = isolate(input$typetest.binom), x = x, y = y)
    })
    
    output$alertB <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
    
    shinyjs::hide("fakerunB"); shinyjs::show("runB")
    
  })
  
  ################################ BLOCK DESIGN ############################
  
  
  observeEvent(input$runB2, ignoreNULL = T, {
    
    warnings.b.block <- list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
    
    shinyjs::hide("runB2"); shinyjs::show("fakerunB2")
    
    
    if (is.na(input$nmin.block.binom) || input$nmin.block.binom < minsamplesizemin || input$nmin.block.binom > maxsamplesizemin || !is.integer(input$nmin.block.binom)) {
      warnings.b.block[[1]] <- paste("The minimum sample size must be an integer between ", minsamplesizemin, " and ", maxsamplesizemin, ".", sep = "")
      nmin <- 5
    } else {
      nmin <- input$nmin.block.binom
    }
    
    if (is.na(input$alpha.block.binom) || input$alpha.block.binom < minalpha || input$alpha.block.binom > maxalpha){
      warnings.b.block[[2]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", cat("\n"), sep = "")
      alpha <- 0.05
    } else {
      alpha <- input$alpha.block.binom
    }
    
    if (is.na(input$nblocks.binom) || input$nblocks.binom < minblocks || input$nblocks.binom > maxblocks || !is.integer(input$nblocks.binom)) {
      warnings.b.block[[3]] <- paste("The number of blocks must be an integer between ", minblocks, " and ", maxblocks, ".", sep = "")
      nblocks <- 5
    } else {
      nblocks <- input$nblocks.binom
    }
    
    if (is.na(input$bsize.binom) || input$bsize.binom < minsizeblock || input$bsize.binom > maxsize || !is.integer(input$bsize.binom)) {
      warnings.b.block[[4]] <- paste("The size of the blocks must be an integer between ", minsizeblock, " and ", maxsize, ".", sep = "")
      blocksize <- 10
    } else {
      blocksize <- input$bsize.binom
    }
    
    if (is.na(input$a.block) || input$a.block < minbeta || input$a.block > maxbeta){
      warnings.b.block[[5]] <- paste("The parameters for the prior Beta distribution must be defined betweeen ", minbeta, " and ", maxbeta, "." , sep = "")
    } else {
      a <- input$a.block
    }
    
    if (is.na(input$b.block) || input$b.block < minbeta || input$b.block > maxbeta){
      warnings.b.block[[6]] <- paste("The parameters for the prior Beta distribution must be defined betweeen ", minbeta, " and ", maxbeta, "." , sep = "")
    } else {
      b <- input$b.block
    }
    
    if(is.na(input$H0.block.binom) || input$H0.block.binom > maxalpha || input$H0.block.binom < minalpha){
      warnings.b.block[[7]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
    } else {
      H0 <- input$H0.block.binom
    }
    
    if(is.na(input$thres.block.binom) || input$thres.block.binom < minbf || input$thres.block.binom > maxbf){
      warnings.b.block[[8]] <- paste("The boundaries for Bayes Factors must be between ", minbf, " and ", maxbf, ".", sep = "")
    } else {
      thresbf <- input$thres.block.binom
    }
    
    if(is.na(input$p.block) || input$p.block > maxalpha || input$p.block < minalpha){
      warnings.b.block[[9]] <- paste("Probabilities must be defined between ", minalpha," and ", maxalpha, ".", sep = "")
    } else {
      truep <- input$p.block
    }
    
    if (any(sapply(warnings.b.block, is.null) == FALSE)){
      output$plotb2 <- renderPlot(default.scatterplot())
      output$histogramsb2 <- renderPlot(default.histogram())
      output$histogramsnb2 <- renderPlot(default.histogram.n())
      output$warningsB2 <- renderUI(HTML(paste("<p>", warnings.b.block[!(sapply(warnings.b.block, is.null))], "</p><p>")))
      output$alertB2 <- renderUI(HTML('<script> sweetAlert(\'Simulation failed!\',\' It appears you have entered at least one incorrect input. Check the warnings for details. \',\'error\') </script>'))
      shinyjs::hide("fakerunB2"); shinyjs::show("runB2")
      return()
    }
    
    nmax <- nmin + blocksize*nblocks
    nrep <- 1000
    
    somedata <- matrix(data = rbinom(size = 1, prob = truep, n = nrep*nmax),
                       nrow = nrep, ncol = nmax, byrow = TRUE)
    
    I <- seq(nmin, nmax, by = blocksize) # Sample sizes for all the blocks
    
    nsuccess <- apply(somedata, MARGIN = 1,
          FUN = function(somedata, nmin, nmax, blocksize, I) data.frame(sapply(I,
          FUN = function(x) {
          return( c( sum(somedata[1:(x)]), x ))
          }
          )), nmin = nmin, nmax = nmax, I = I, blocksize = blocksize)
    freq.results <- lapply(lapply(nsuccess, FUN = function(x, H0) apply(x, MARGIN = 2,
      FUN = binomial.test.custom, H0 = H0), H0 = H0), FUN = t)
    
    if(input$typetest2binom == "p-values"){
      
      seq.results <- t(sapply(freq.results, sequential.alpha.binom, alpha = alpha, nmin = nmin, nmax = nmax))
      results <- t(apply(X = seq.results, 1, FUN = binomial.bayes.custom, a = a, b = b, p = H0))
      
    } else if (input$typetest2binom == "Bayes Factors"){
      
      bayes.results <- lapply(X = freq.results, FUN = function(seq.results) {
        apply(X = seq.results, 1, FUN = binomial.bayes.custom, a = a, b = b, p = H0)
      })
      
      results <- t(sapply(bayes.results, sequential.BF.binom,
                          cutpoint = thresbf, nmin = nmin, nmax = nmax))
      
    }
    
    
    output$histogramsnb2 <- renderPlot({
      plot.histogram.n(results)
    })
    
    output$plotb2 <- renderPlot({
      plot.scatterplot(results = results, nrep = nrep, alpha = alpha, thres = thresbf, nmin = nmin, nmax = nmax)
    })
    
    output$histogramsb2 <- renderPlot({
      plot.histograms(results = results, nrep = nrep, alpha = alpha, thres = thresbf)
    })
    
      output$legendplotb2 <- renderPlot({
      legend.plot()
    })
    
    
    output$alertB2 <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
    
    shinyjs::hide("fakerunB2"); shinyjs::show("runB2")
    
  })
  
  
  
}
#####################################################################
# ShinyApp 2017: Sequential testing with p-values and Bayes Factors #
#               Universidad Complutense de Madrid                   #
#####################################################################

rm(list = ls())

library('shiny')
library('shinyBS')
library('shinyjs')
library('sweetalertR') # install with devtools::install_github("timelyportfolio/sweetalertR")
library('htmltools')
library('hypergeo')
library('MASS')

source("funplots.R"); source("funttest.R"); source("functest.R"); source("funbtest.R")

ui <- fluidPage(theme = "bootstrap.css",
  includeScript("../../../Matomo-tquant.js"),
  navbarPage(HTML("SEQUENTIAL TESTING W/ <i>P</i>-VALUES AND BAYES FACTORS"),
             
# FIRST TAB
             
navbarMenu("t-test",
           
## SEQUENTIAL DESIGN
           
  tabPanel("sequential design",
  useShinyjs(),
  tags$p(),
  
  tags$head(tags$style(HTML('.modal-sm {
                            width: 650px;
                           }'))),
  
  sidebarLayout(
    sidebarPanel(width = 3,

    
    fluidRow(
      column(width = 6,
      numericInput(inputId = "mu", label = HTML("True </br> mean"), value = 0, min = -50, max = 50, step = 0.5)),
      column(width = 6,
      numericInput(inputId = "H0", label = HTML('Mean under </br> H<sub>0</sub>'), value = 0, min = -50, max = 50, step = 0.5)
      )
      ),
    
    fluidRow(
      column(width = 6,
             numericInput(inputId = "nmin", label = HTML("Min. sample size"), value = 15, min = 15, max = 100, step = 1)),
      column(width = 6,
             numericInput(inputId = "nmax", label = HTML('Max. sample size'), value = 100, min = 10, max = 500, step = 1)
      )),

   
   
   fluidRow(
     column(width = 6,
            selectInput(inputId = "typetest", label = "Stopping rule based on", choices = c("p-values", "Bayes Factors"), selected = "p-values")
     ),
     column(width = 6,
            checkboxInput(inputId = "bnd", label = HTML("Add extra threshold"), value = FALSE)
     )),

   fluidRow(
         column(width = 6,
      uiOutput("ptitle_ttest")
      ),
    column(width = 6,
           uiOutput("btitle_ttest")
           )
   ),
   
  fluidRow(
    
  column(width = 6,
  numericInput(inputId = "thres1", label = NULL,
  value = 0.05, min = 0.000001, max = 0.99999, step = 0.001)),
    bsTooltip("thres1", "Boundary for rejecting H<sub>0</sub>"),
  column(width = 6,
  numericInput(inputId = "thres4", label = NULL,
  value = 3, min = 0.000001, max = 100, step = 0.1)),
  bsTooltip("thres4", "Boundary for BF<sub>01</sub>")
  ),
  
  fluidRow(
    column(width = 6,
    numericInput(inputId = "thres2", label = NULL, value = 0.36, min = 0.000001, max = 0.99999, step = 0.001),
    bsTooltip("thres2", "Boundary for mantaining H<sub>0</sub>")
    ),
  column(width = 6,
  numericInput(inputId = "thres3", label = NULL, value = 1/3, min = 0.000001, max = 100, step = 0.1),
  bsTooltip("thres3", "Lower boundary for BF<sub>01</sub>")
   )
  ),
  
  
  fluidRow(
    HTML("<p> <center> <b> Prior specifications (Bayes only) </b> </center> </p>"),
    column(width = 6,
           numericInput(inputId = "muprior", label = "Mean", value = 0, min = -50, max = 50, step = 0.5)
    ),
    #   bsTooltip("muprior", "Mean of the Normal prior distribution over effect sizes"),
    column(width = 6,
           numericInput(inputId = "scale", label = "St. deviation", value = 1, min = 0.1, max = 10, step = 0.01)
    )
  ),
  
  # last line
      
      fluidRow(
      column(width = 1, offset = 0,
      actionButton("infoT", label = "", icon = icon("info-circle"),
      style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
      ),
      column(width = 1, offset = 1,
      actionButton("priorT", label = "", icon = icon("bar-chart"),
      style="color: #fff; background-color: #337ab7; border-color: #2e6da4")),
      column(width = 1, offset = 1,
      actionButton("warnT", label = "", icon = icon("exclamation-triangle"),
      style="color: #fff; background-color: #FF8000; border-color: #FF8000"),
      bsTooltip("warnT", "Check for warnings (recommended)", "right", trigger = "hover", options = list(container = "body"))
      ),
      column(width = 2, offset = 1,
      HTML('
      <button id="runT" type="button" class="btn btn-primary action-button">
      <i class="glyphicon glyphicon-triangle-right"></i>
      Run simulation
      </button>
      '),
      HTML('
      <button id="fakerunT" type="button" class="btn btn-primary action-button">
      <i class="fa fa-spinner fa-spin"></i>
      Run simulation
      </button>
      ')
      # fa fa-spinner fa-spin
      # glyphicon glyphicon-refresh fast-right-spinner
    )
  
  )
  
  ##
),
    
    mainPanel(
      h1("Student's t-test: sequential design", align = "center"),
      hr(),
      fluidRow(
      column(width = 6,
        plotOutput(outputId = "plott", height = "500px")),
      column(width = 6,
        plotOutput(outputId = "histogramst", height = "500px")),
      bsModal("modalT", "Warnings", "warnT", size = "large", htmlOutput("warningsT")),
      bsModal("modalInfoT", "Student's t-test: sequential design", "infoT", size = "large", htmlOutput("informationT"))
      ,bsModal("priordensityT", " ", "priorT", size = "large", plotOutput("priorTdist"))
      ,fluidRow(column(width = 6,
        plotOutput("legendplott")
                       ),
        column(width = 6,
        plotOutput(outputId = "histogramsnt", height = "250px")
      ))
      ,htmlOutput("alertT")
      ,sweetalert()
      )
    )
  )
),
  
## BLOCK DESIGN
  
  tabPanel("block design",
  useShinyjs(),
  tags$p(),
  
  sidebarLayout(
    sidebarPanel(width = 3,
    fluidRow(
    column(width = 6,
    numericInput(inputId = "mu.block", label = HTML("True </br> mean"), value = 0, min = -50, max = 50, step = 0.5)),
    column(width = 6,
    numericInput(inputId = "H0.block", label = HTML('Mean under </br> H<sub>0</sub>'), value = 0, min = -50, max = 50, step = 0.5)
    )),
    
                 
    fluidRow(
      column(width = 4,
      numericInput(inputId = "nmin.block", label = HTML("Min. sample"), value = 15, min = 15, max = 100, step = 1)
      ),
    column(width = 4,
    numericInput(inputId = "bsize", label = HTML("Block size"), value = 5, min = 5, max = 100, step = 1)),
    column(width = 4,
    numericInput(inputId = "nblocks", label = HTML('Num. of blocks'), value = 10, min = 2, max = 100, step = 1)
    )),
    
 #   bsTooltip("nmin.block", "Minimum sample size", trigger = "hover"),
    

 
 selectInput(inputId = "typetest2", label = "Stopping rule based on", choices = c("p-values", "Bayes Factors"), selected = "p-values"),
 
    
   fluidRow(
         column(width = 6,
      uiOutput("ptitle_ttest2")
      ),
    column(width = 6,
           uiOutput("btitle_ttest2")
           )
   ),
#  conditionalPanel('input.typetest2 == "p-values" ',

  fluidRow(
  column(width = 6,
  numericInput(inputId = "alpha.block", label = NULL,
  value = 0.05, min = 0.000001, max = 0.99999, step = 0.001)),
  
  column(width = 6,

         numericInput(inputId = "thres.block", label = NULL,
      value = 3, min = 0.000001, max = 100, step = 0.1),
  bsTooltip("thres.block", "Bayes Factor for the null")
  
  ),
  bsTooltip("alpha.block", "Nominal type one error rate"),
  bsTooltip("bonf", "Bonferroni correction")
  ),

#  ),
                 

  fluidRow(
  column(width = 6,
         
         checkboxInput(inputId = "bonf", label = "Correct for multiple comparisons", value = T)

  )),

fluidRow(
  HTML("<p> <center> <b> Prior specifications (Bayes only) </b> </center> </p>"),
  column(width = 6,
         numericInput(inputId = "muprior.block", label = "Mean", value = 0, min = -50, max = 50, step = 0.5)
  ),
  #    bsTooltip("muprior.block", "Mean of the Normal prior distribution over effect sizes"),
  column(width = 6,
         numericInput(inputId = "scale.block", label = "St. deviation", value = 1, min = 0.1, max = 10, step = 0.01)
  )
),

  # last line
                 
  fluidRow(
  column(width = 1, offset = 0,
  actionButton("infoT2", label = "", icon = icon("info-circle"),
  style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
  ),

  column(width = 1, offset = 1,
  actionButton("warnT2", label = "", icon = icon("exclamation-triangle"),
  style="color: #fff; background-color: #FF8000; border-color: #FF8000"),
  bsTooltip("warnT2", "Check for warnings (recommended)", "right", trigger = "hover", options = list(container = "body"))
  ),
  column(width = 2, offset = 1,
  HTML('
  <button id="runT2" type="button" class="btn btn-primary action-button">
  <i class="glyphicon glyphicon-triangle-right"></i>
  Run simulation
  </button>
  '),
  HTML('
      <button id="fakerunT2" type="button" class="btn btn-primary action-button">
      <i class="fa fa-spinner fa-spin"></i>
      Run simulation
      </button>
      ')
  )
  )

 ##
  ),
 
  
  mainPanel(
    h1("Student's t-test: block design", align = "center"),
    hr(),
    fluidRow(
      column(width = 6,
             plotOutput(outputId = "plott2", height = "500px")),
      column(width = 6,
             plotOutput(outputId = "histogramst2", height = "500px")),
      bsModal("modalT2", "Warnings", "warnT2", size = "large", htmlOutput("warningsT2")),
      bsModal("modalInfoT2", "Student's t-test: block design", "infoT2",
              size = "large", htmlOutput("informationT2"))
    #  ,bsModal("priordensityT2", " ", "priorT2", size = "large", plotOutput("priorT2dist"))
      
      ,fluidRow(column(width = 6,        plotOutput("legendplott2")
),
                column(width = 6,
                       plotOutput(outputId = "histogramsnt2", height = "250px")
                ))
      ,htmlOutput("alertT2")
      ,sweetalert()
      )
    )
  ) # Sidebarlayout
  )
),


# SECOND TAB

navbarMenu("correlation",

  tabPanel("sequential design",
  useShinyjs(),
  tags$p(),

                    
  sidebarLayout(
  sidebarPanel(width = 3,

    fluidRow(
      column(width = 6,
      numericInput(inputId = "rho", label = "True correlation", min = -1, max = 1, step = 0.01, value = 0)
      ),
      column(width = 6,
             HTML("<p> </br> <b> H <sub>0</sub> : &#961; = 0 </b> </p>")
             )
    ),
    
    fluidRow(
      column(width = 6,
        numericInput(inputId = "nmin.cor", label = HTML("Min. sample size"), value = 15, min = 15, max = 100, step = 1)),
      column(width = 6,
        numericInput(inputId = "nmax.cor", label = HTML('Max. sample size'), value = 100, min = 10, max = 500, step = 1)
      )),
    
    fluidRow(
      column(width = 6,
             selectInput(inputId = "typetest.cor", label = "Stopping rule based on", choices = c("p-values", "Bayes Factors"), selected = "p-values")
      ),
      column(width = 6,
             checkboxInput(inputId = "bnd.cor", label = HTML("Add extra threshold"), value = FALSE)
      )),
    
   fluidRow(
         column(width = 6,
      uiOutput("ptitle_ctest")
      ),
    column(width = 6,
           uiOutput("btitle_ctest")
           )
   ),
   
    fluidRow(

            column(width = 6,
             numericInput(inputId = "thresC1", label = NULL,
                          value = 0.05, min = 0.000001, max = 0.99999, step = 0.001)),
      
      bsTooltip("thresC1", "Boundary for rejecting H<sub>0</sub>"),
      
      
      column(width = 6,
             numericInput(inputId = "thresC4", label = NULL,
                          value = 3, min = 0.000001, max = 100, step = 0.1)),
      bsTooltip("thresC4", "Boundary for BF<sub>01</sub>")
    ),
    
    fluidRow(
      column(width = 6,
             numericInput(inputId = "thresC2", label = NULL, value = 0.36, min = 0.000001, max = 0.99999, step = 0.001),
             bsTooltip("thresC2", "Boundary for mantaining H<sub>0</sub>")
      ),
      column(width = 6,
             numericInput(inputId = "thresC3", label = NULL, value = 1/3, min = 0.000001, max = 100, step = 0.1),
             bsTooltip("thresC3", "Lower boundary for BF<sub>01</sub>")
      )
    ),
    
    # last line
    
    fluidRow(
      column(width = 1, offset = 0,
             actionButton("infoC", label = "", icon = icon("info-circle"),
                          style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
      ),

      column(width = 1, offset = 1,
             actionButton("priorC", label = "", icon = icon("bar-chart"),
                          style="color: #fff; background-color: #337ab7; border-color: #2e6da4")),
      column(width = 1, offset = 1,
             actionButton("warnC", label = "", icon = icon("exclamation-triangle"),
                          style="color: #fff; background-color: #FF8000; border-color: #FF8000"),
             bsTooltip("warnC", "Check for warnings (recommended)", "right", trigger = "hover", options = list(container = "body"))
      ),
      column(width = 2, offset = 1,
             HTML('
                  <button id="runC" type="button" class="btn btn-primary action-button">
                  <i class="glyphicon glyphicon-triangle-right"></i>
                  Run simulation
                  </button>
                  '),
             HTML('
                  <button id="fakerunC" type="button" class="btn btn-primary action-button">
                  <i class="fa fa-spinner fa-spin"></i>
                  Run simulation
                  </button>
                  ')
             # fa fa-spinner fa-spin
             # glyphicon glyphicon-refresh fast-right-spinner
             )
      
             )
    
    
    ),
  
  mainPanel(
    h1("Pearson's correlation: sequential design", align = "center"),
    hr(),
    fluidRow(
      column(width = 6,
             plotOutput(outputId = "plotc", height = "500px")),
      column(width = 6,
             plotOutput(outputId = "histogramsc", height = "500px")),
      bsModal("modalC", "Warnings", "warnC", size = "large", htmlOutput("warningsC")),
      bsModal("modalInfoC", "Pearson's correlation: sequential design", "infoC", size = "large", htmlOutput("informationC"))
      ,bsModal("priordensityC", " ", "priorC", size = "large", plotOutput("priorCdist"))
      
      ,fluidRow(column(width = 6,        plotOutput("legendplotc")
),
                column(width = 6,
                       plotOutput(outputId = "histogramsnc", height = "250px")
                ))
      ,htmlOutput("alertC")
      ,sweetalert()
    )
  )
  
  )),
  
  tabPanel("block design",
           useShinyjs(),
           tags$p(),
           
           sidebarLayout(
             sidebarPanel(width = 3,
   
   fluidRow(
     column(width = 6,
            numericInput(inputId = "rho.block", label = "True correlation", min = -1, max = 1, step = 0.01, value = 0)
     ),
     column(width = 6,
            HTML("<p> </br> <b> H <sub>0</sub> : &#961; = 0 </b> </p>")
     )
   ),
                          
                          
  fluidRow(
  column(width = 4,
  numericInput(inputId = "nmin.block.corr", label = HTML("Min. sample"), value = 15, min = 15, max = 100, step = 1)
  ),
  column(width = 4,
  numericInput(inputId = "bsize.corr", label = HTML("Block size"), value = 5, min = 5, max = 100, step = 1)),
  column(width = 4,
  numericInput(inputId = "nblocks.corr", label = HTML('Num. of blocks'), value = 10, min = 2, max = 100, step = 1)
  )),
                          
  #   bsTooltip("nmin.block", "Minimum sample size", trigger = "hover"),
  selectInput(inputId = "typetestC", label = "Stopping rule based on", choices = c("p-values", "Bayes Factors"), selected = "p-values"),
  
                          
   fluidRow(
         column(width = 6,
      uiOutput("ptitle_ctest2")
      ),
    column(width = 6,
           uiOutput("btitle_ctest2")
           )
   ),
  
  fluidRow(
  column(width = 6,
  numericInput(inputId = "alpha.block.corr", label = NULL,
  value = 0.05, min = 0.000001, max = 0.99999, step = 0.001)),
  bsTooltip("alpha.block.corr", "Nominal type one error rate"),
  column(width = 6,
         
         numericInput(inputId = "thres.block.corr", label = NULL,
                      value = 3, min = 0.000001, max = 100, step = 0.1)
  
  ),
  bsTooltip("bonf.corr", "Bonferroni correction")
  ),
  
                          
  
  fluidRow(
  column(width = 6,
         

  
  checkboxInput(inputId = "bonf.corr", label = "Correct for multiple comparisons", value = T)
  
  ),
  bsTooltip("thres.block.corr", "Bayes Factor for the null")
  ),
                          
                          # last line
                          
    fluidRow(
    column(width = 1, offset = 0,
    actionButton("infoC2", label = "", icon = icon("info-circle"),
    style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
    ),

 #   column(width = 1, offset = 1,
#    actionButton("priorC2", label = "", icon = icon("bar-chart"),
 #   style="color: #fff; background-color: #337ab7; border-color: #2e6da4")),
    
    column(width = 1, offset = 1,
    actionButton("warnC2", label = "", icon = icon("exclamation-triangle"),
    style="color: #fff; background-color: #FF8000; border-color: #FF8000"),
    bsTooltip("warnC2", "Check for warnings (recommended)", "right", trigger = "hover", options = list(container = "body"))
    ),
    column(width = 2, offset = 1,
    HTML('
    <button id="runC2" type="button" class="btn btn-primary action-button">
    <i class="glyphicon glyphicon-triangle-right"></i>
    Run simulation
    </button>
    '),
    HTML('
    <button id="fakerunC2" type="button" class="btn btn-primary action-button">
    <i class="fa fa-spinner fa-spin"></i>
    Run simulation
    </button>
    ')

    )
                            
    )
),
             mainPanel(
               h1("Pearson's correlation: block design", align = "center"),
               hr(),
               fluidRow(
                 column(width = 6,
                        plotOutput(outputId = "plotc2", height = "500px")),
                 column(width = 6,
                        plotOutput(outputId = "histogramsc2", height = "500px")),
                 bsModal("modalC2", "Warnings", "warnC2", size = "large", htmlOutput("warningsC2")),
                 bsModal("modalInfoC2", "Pearson's correlation: block design", "infoC2", size = "large", htmlOutput("informationC2"))
           #      ,bsModal("priordensityC2", " ", "priorC2", size = "large", plotOutput("priorC2dist"))
                 
                 ,fluidRow(column(width = 6,        plotOutput("legendplotc2")
),
                           column(width = 6,
                                  plotOutput(outputId = "histogramsnc2", height = "250px")
                           ))
                 ,htmlOutput("alertC2")
                 ,sweetalert()
               )
             )
           )
  )
           
  ),

# THIRD TAB

navbarMenu("binomial test",


           tabPanel("sequential design",
                    useShinyjs(),
                    tags$p(),
                    
                    
                    sidebarLayout(
                      sidebarPanel(width = 3,

                                   
    fluidRow(
    column(width = 6,
    numericInput(inputId = "p", label = HTML("True probability </br> of success"), value = 0.5, min = 0, max = 1, step = 0.05)),
    column(width = 6,
    numericInput(inputId = "H0.p", label = HTML('Prob. of success </br> under H<sub>0</sub>'), value = 0.5, min = 0, max = 1, step = 0.05)
    )),
                                   
    fluidRow(
    column(width = 6,
    numericInput(inputId = "nmin.binom", label = HTML("Min. sample size"), value = 15, min = 15, max = 100, step = 1)),
    column(width = 6,
    numericInput(inputId = "nmax.binom", label = HTML('Max. sample size'), value = 100, min = 10, max = 500, step = 1)
    )),
                                   

    
    fluidRow(
      column(width = 6,
             selectInput(inputId = "typetest.binom", label = "Stopping rule based on", choices = c("p-values", "Bayes Factors"), selected = "p-values")
      ),
      column(width = 6,
             checkboxInput(inputId = "bnd.binom", label = HTML("Add extra threshold"), value = FALSE)
      )),
                   
       fluidRow(
         column(width = 6,
      uiOutput("ptitle_btest")
      ),
    column(width = 6,
           uiOutput("btitle_btest")
           )
   ),
                    
    fluidRow(
    column(width = 6,
    numericInput(inputId = "thres1.binom", label = NULL,
    value = 0.05, min = 0.000001, max = 0.99999, step = 0.001)),
    bsTooltip("thres1.binom", "Boundary for rejecting H<sub>0</sub>"),
    column(width = 6,
    numericInput(inputId = "thres4.binom", label = NULL,
    value = 3, min = 0.000001, max = 100, step = 0.1)),
    bsTooltip("thres4.binom", "Boundary for BF<sub>01</sub>")
    ),
                                   
    fluidRow(
    column(width = 6,
    numericInput(inputId = "thres2.binom", label = NULL, value = 0.36, min = 0.000001, max = 0.99999, step = 0.001),
    bsTooltip("thres2.binom", "Boundary for mantaining H<sub>0</sub>")
    ),
    column(width = 6,
    numericInput(inputId = "thres3.binom", label = NULL, value = 1/3, min = 0.000001, max = 100, step = 0.1),
    bsTooltip("thres3.binom", "Lower boundary for BF<sub>01</sub>")
                                     )
                                   ),
    fluidRow(
      HTML("<p> <center> <b> Prior specifications (Bayes only) </b> </center> </p>"),
      column(width = 6,
             numericInput(inputId = "a", label = "a", value = 1, min = 0, max = 100, step = 0.05)
      ),
      #   bsTooltip("a", "Mean of the Normal prior distribution over effect sizes"),
      column(width = 6,
             numericInput(inputId = "b", label = "b", value = 1, min = 0, max = 100, step = 0.05)
      )
    ),

# last tile
  fluidRow(
  column(width = 1, offset = 0,
  actionButton("infoB", label = "", icon = icon("info-circle"),
  style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
  ),
  column(width = 1, offset = 1,
         actionButton("priorB", label = "", icon = icon("bar-chart"),
                      style="color: #fff; background-color: #337ab7; border-color: #2e6da4")),

  column(width = 1, offset = 1,
  actionButton("warnB", label = "", icon = icon("exclamation-triangle"),
  style="color: #fff; background-color: #FF8000; border-color: #FF8000"),
  bsTooltip("warnB", "Check for warnings (recommended)", "right", trigger = "hover", options = list(container = "body"))
  ),
  column(width = 2, offset = 1,
  HTML('
    <button id="runB" type="button" class="btn btn-primary action-button">
    <i class="glyphicon glyphicon-triangle-right"></i>
    Run simulation
    </button>
    '),
  HTML('
    <button id="fakerunB" type="button" class="btn btn-primary action-button">
    <i class="fa fa-spinner fa-spin"></i>
    Run simulation
    </button>
    ')
                                            
    )
                                     
  )
  ),
    mainPanel(
      h1("Binomial test: sequential design", align = "center"),
      hr(),
      fluidRow(
        column(width = 6,
               plotOutput(outputId = "plotb", height = "500px")),
        column(width = 6,
               plotOutput(outputId = "histogramsb", height = "500px")),
        bsModal("modalB", "Warnings", "warnB", size = "large", htmlOutput("warningsB")),
        bsModal("modalInfoB", "Binomial test: sequential design", "infoB", size = "large", htmlOutput("informationB"))
        ,bsModal("priordensityB", " ", "priorB", size = "large", plotOutput("priorBdist"))
        
        ,fluidRow(column(width = 6,        plotOutput("legendplotb")
),
                  column(width = 6,
                         plotOutput(outputId = "histogramsnb", height = "250px")
                  ))
        ,htmlOutput("alertB")
        ,sweetalert()
      )
    )
  )
  ),
           
           tabPanel("block design",
                    useShinyjs(),
                    tags$p(),
                    
                    
    sidebarLayout(
    sidebarPanel(width = 3,
                 
    
fluidRow(
    column(width = 6,
    numericInput(inputId = "p.block", label = HTML("True probability </br> of success"), value = 0.5, min = 0, max = 1, step = 0.05)),
    column(width = 6,
    numericInput(inputId = "H0.block.binom", label = HTML('Prob. of success </br> under H<sub>0</sub>'), value = 0.5, min = 0, max = 1, step = 0.05)
    )),
    
                 
    fluidRow(
      column(width = 4,
      numericInput(inputId = "nmin.block.binom", label = HTML("Min. sample"), value = 15, min = 15, max = 100, step = 1)
      ),
    column(width = 4,
    numericInput(inputId = "bsize.binom", label = HTML("Block size"), value = 5, min = 5, max = 100, step = 1)),
    column(width = 4,
    numericInput(inputId = "nblocks.binom", label = HTML('Num. of blocks'), value = 10, min = 2, max = 100, step = 1)
    )),
    
# Prior


selectInput(inputId = "typetest2binom", label = "Stopping rule based on", choices = c("p-values", "Bayes Factors"), selected = "p-values"),

    
   fluidRow(
         column(width = 6,
      uiOutput("ptitle_btest2")
      ),
    column(width = 6,
           uiOutput("btitle_btest2")
           )
   ),
  
  fluidRow(
  column(width = 6,
  numericInput(inputId = "alpha.block.binom", label = NULL,
  value = 0.05, min = 0.000001, max = 0.99999, step = 0.001)),
  bsTooltip("alpha.block.binom", "Nominal type one error rate"),
  column(width = 6, 
         
         numericInput(inputId = "thres.block.binom", label = NULL,
                      value = 3, min = 0.000001, max = 100, step = 0.1)
  
  ),
  bsTooltip("bonf.binom", "Bonferroni correction")
  ),
                 
  
  fluidRow(
  column(width = 6,
         
         checkboxInput(inputId = "bonf.binom", label = "Correct for multiple comparisons", value = T)
         

  
  ),
  bsTooltip("thres.block.binom", "Bayes Factor for the null")
  ),

fluidRow(
  HTML("<p> <center> <b> Prior specifications (Bayes only) </b> </center> </p>"),
  column(width = 6,
         numericInput(inputId = "a.block", label = "a", value = 1, min = 0, max = 100, step = 0.05)
  ),
  column(width = 6,
         numericInput(inputId = "b.block", label = "b", value = 1, min = 0, max = 100, step = 0.05)
  )
),

                                   
# final row
    fluidRow(
    column(width = 1, offset = 0,
    actionButton("infoB2", label = "", icon = icon("info-circle"),
    style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
    ),
 #   column(width = 1, offset = 1,
#    actionButton("priorB2", label = "", icon = icon("bar-chart"),
 #   style="color: #fff; background-color: #337ab7; border-color: #2e6da4")),
    column(width = 1, offset = 1,
    actionButton("warnB2", label = "", icon = icon("exclamation-triangle"),
    style="color: #fff; background-color: #FF8000; border-color: #FF8000"),
    bsTooltip("warnB2", "Check for warnings (recommended)", "right", trigger = "hover", options = list(container = "body"))
    ),
    column(width = 2, offset = 1,
    HTML('
    <button id="runB2" type="button" class="btn btn-primary action-button">
    <i class="glyphicon glyphicon-triangle-right"></i>
    Run simulation
    </button>
    '),
    HTML('
    <button id="fakerunB2" type="button" class="btn btn-primary action-button">
    <i class="fa fa-spinner fa-spin"></i>
    Run simulation
    </button>
    ')
                                            
    )
                                     
    )
    ),
      mainPanel(
        h1("Binomial test: block design", align = "center"),
        hr(),
        fluidRow(
          column(width = 6,
                 plotOutput(outputId = "plotb2", height = "500px")),
          column(width = 6,
                 plotOutput(outputId = "histogramsb2", height = "500px")),
          bsModal("modalB2", "Warnings", "warnB2", size = "large", htmlOutput("warningsB2")),
          bsModal("modalInfoB2", "Binomial test: sequential design", "infoB2", size = "large", htmlOutput("informationB2"))
          
      #    ,bsModal("priordensityB2", " ", "priorB2", size = "large", plotOutput("priorB2dist"))
          
          ,fluidRow(column(width = 6,        plotOutput("legendplotb2")
),
                    column(width = 6,
                           plotOutput(outputId = "histogramsnb2", height = "250px")
                    ))
          ,htmlOutput("alertB2")
          ,sweetalert()
        )
      )
    )
  )
)
    
  ))
@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");
/*!
 * bootswatch v3.3.6
 * Homepage: http://bootswatch.com
 * Copyright 2012-2016 Thomas Park
 * Licensed under MIT
 * Based on Bootstrap
*/
/*!
 * Bootstrap v3.3.6 (http://getbootstrap.com)
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  -webkit-box-sizing: content-box;
     -moz-box-sizing: content-box;
          box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  -webkit-box-sizing: content-box;
     -moz-box-sizing: content-box;
          box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    -webkit-box-shadow: none !important;
            box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    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;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../fonts/glyphicons-halflings-regular.eot');
  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}

.gly-spin {
  -webkit-animation: spin 2s infinite linear;
  -moz-animation: spin 2s infinite linear;
  -o-animation: spin 2s infinite linear;
  animation: spin 2s infinite linear;
}
@-moz-keyframes spin {
  0% {
    -moz-transform: rotate(0deg);
  }
  100% {
    -moz-transform: rotate(359deg);
  }
}
@-webkit-keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
  }
}
@-o-keyframes spin {
  0% {
    -o-transform: rotate(0deg);
  }
  100% {
    -o-transform: rotate(359deg);
  }
}
@keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.gly-rotate-90 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  -webkit-transform: rotate(90deg);
  -moz-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  -o-transform: rotate(90deg);
  transform: rotate(90deg);
}
.gly-rotate-180 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  -webkit-transform: rotate(180deg);
  -moz-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  -o-transform: rotate(180deg);
  transform: rotate(180deg);
}
.gly-rotate-270 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  -webkit-transform: rotate(270deg);
  -moz-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  -o-transform: rotate(270deg);
  transform: rotate(270deg);
}
.gly-flip-horizontal {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -moz-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  -o-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.gly-flip-vertical {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -moz-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  -o-transform: scale(1, -1);
  transform: scale(1, -1);
}

.glyphicon.fast-right-spinner {
    -webkit-animation: glyphicon-spin-r 1s infinite linear;
    animation: glyphicon-spin-r 1s infinite linear;
}

.glyphicon.normal-right-spinner {
    -webkit-animation: glyphicon-spin-r 2s infinite linear;
    animation: glyphicon-spin-r 2s infinite linear;
}

.glyphicon.slow-right-spinner {
    -webkit-animation: glyphicon-spin-r 3s infinite linear;
    animation: glyphicon-spin-r 3s infinite linear;
}

.glyphicon.fast-left-spinner {
    -webkit-animation: glyphicon-spin-l 1s infinite linear;
    animation: glyphicon-spin-l 1s infinite linear;
}

.glyphicon.normal-left-spinner {
    -webkit-animation: glyphicon-spin-l 2s infinite linear;
    animation: glyphicon-spin-l 2s infinite linear;
}

.glyphicon.slow-left-spinner {
    -webkit-animation: glyphicon-spin-l 3s infinite linear;
    animation: glyphicon-spin-l 3s infinite linear;
}

@-webkit-keyframes glyphicon-spin-r {
    0% {
        -webkit-transform: rotate(0deg);
        transform: rotate(0deg);
    }

    100% {
        -webkit-transform: rotate(359deg);
        transform: rotate(359deg);
    }
}

@keyframes glyphicon-spin-r {
    0% {
        -webkit-transform: rotate(0deg);
        transform: rotate(0deg);
    }

    100% {
        -webkit-transform: rotate(359deg);
        transform: rotate(359deg);
    }
}

@-webkit-keyframes glyphicon-spin-l {
    0% {
        -webkit-transform: rotate(359deg);
        transform: rotate(359deg);
    }

    100% {
        -webkit-transform: rotate(0deg);
        transform: rotate(0deg);
    }
}

@keyframes glyphicon-spin-l {
    0% {
        -webkit-transform: rotate(359deg);
        transform: rotate(359deg);
    }

    100% {
        -webkit-transform: rotate(0deg);
        transform: rotate(0deg);
    }
}

.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 15px;
  line-height: 1.42857143;
  color: #2c3e50;
  background-color: #ffffff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #18bc9c;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #18bc9c;
  text-decoration: underline;
}
a:focus {
  outline: thin dotted;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 6px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #ffffff;
  border: 1px solid #ecf0f1;
  border-radius: 4px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 21px;
  margin-bottom: 21px;
  border: 0;
  border-top: 1px solid #ecf0f1;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  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;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-weight: 400;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #b4bcc2;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 21px;
  margin-bottom: 10.5px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 10.5px;
  margin-bottom: 10.5px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 39px;
}
h2,
.h2 {
  font-size: 32px;
}
h3,
.h3 {
  font-size: 26px;
}
h4,
.h4 {
  font-size: 19px;
}
h5,
.h5 {
  font-size: 15px;
}
h6,
.h6 {
  font-size: 13px;
}
p {
  margin: 0 0 10.5px;
}
.lead {
  margin-bottom: 21px;
  font-size: 17px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 22.5px;
  }
}
small,
.small {
  font-size: 86%;
}
mark,
.mark {
  background-color: #f39c12;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #b4bcc2;
}
.text-primary {
  color: #2c3e50;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #1a242f;
}
.text-success {
  color: #ffffff;
}
a.text-success:hover,
a.text-success:focus {
  color: #e6e6e6;
}
.text-info {
  color: #ffffff;
}
a.text-info:hover,
a.text-info:focus {
  color: #e6e6e6;
}
.text-warning {
  color: #ffffff;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #e6e6e6;
}
.text-danger {
  color: #ffffff;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #e6e6e6;
}
.bg-primary {
  color: #fff;
  background-color: #2c3e50;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #1a242f;
}
.bg-success {
  background-color: #18bc9c;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #128f76;
}
.bg-info {
  background-color: #3498db;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #217dbb;
}
.bg-warning {
  background-color: #f39c12;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #c87f0a;
}
.bg-danger {
  background-color: #e74c3c;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #d62c1a;
}
.page-header {
  padding-bottom: 9.5px;
  margin: 42px 0 21px;
  border-bottom: 1px solid transparent;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 10.5px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 21px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 768px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #b4bcc2;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 10.5px 21px;
  margin: 0 0 21px;
  font-size: 18.75px;
  border-left: 5px solid #ecf0f1;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #b4bcc2;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #ecf0f1;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 21px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 4px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #ffffff;
  background-color: #333333;
  border-radius: 3px;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  -webkit-box-shadow: none;
          box-shadow: none;
}
pre {
  display: block;
  padding: 10px;
  margin: 0 0 10.5px;
  font-size: 14px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #7b8a8b;
  background-color: #ecf0f1;
  border: 1px solid #cccccc;
  border-radius: 4px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 15px;
  padding-right: 15px;
}
@media (min-width: 768px) {
  .container {
    width: 750px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 970px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1170px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 15px;
  padding-right: 15px;
}
.row {
  margin-left: -15px;
  margin-right: -15px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 15px;
  padding-right: 15px;
}
.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 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .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 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .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 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .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 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #b4bcc2;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 21px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ecf0f1;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ecf0f1;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ecf0f1;
}
.table .table {
  background-color: #ffffff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ecf0f1;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ecf0f1;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #ecf0f1;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #ecf0f1;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #dde4e6;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #18bc9c;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #15a589;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #3498db;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #258cd1;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #f39c12;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #e08e0b;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #e74c3c;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #e43725;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 15.75px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ecf0f1;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 21px;
  font-size: 22.5px;
  line-height: inherit;
  color: #2c3e50;
  border: 0;
  border-bottom: 1px solid transparent;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: thin dotted;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 11px;
  font-size: 15px;
  line-height: 1.42857143;
  color: #2c3e50;
}
.form-control {
  display: block;
  width: 100%;
  height: 45px;
  padding: 10px 15px;
  font-size: 15px;
  line-height: 1.42857143;
  color: #2c3e50;
  background-color: #ffffff;
  background-image: none;
  border: 1px solid #dce4ec;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #2c3e50;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(44, 62, 80, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(44, 62, 80, 0.6);
}
.form-control::-moz-placeholder {
  color: #acb6c0;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #acb6c0;
}
.form-control::-webkit-input-placeholder {
  color: #acb6c0;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #ecf0f1;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 45px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 35px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 66px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 21px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 11px;
  padding-bottom: 11px;
  margin-bottom: 0;
  min-height: 36px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 35px;
  padding: 6px 9px;
  font-size: 13px;
  line-height: 1.5;
  border-radius: 3px;
}
select.input-sm {
  height: 35px;
  line-height: 35px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 35px;
  padding: 6px 9px;
  font-size: 13px;
  line-height: 1.5;
  border-radius: 3px;
}
.form-group-sm select.form-control {
  height: 35px;
  line-height: 35px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 35px;
  min-height: 34px;
  padding: 7px 9px;
  font-size: 13px;
  line-height: 1.5;
}
.input-lg {
  height: 66px;
  padding: 18px 27px;
  font-size: 19px;
  line-height: 1.3333333;
  border-radius: 6px;
}
select.input-lg {
  height: 66px;
  line-height: 66px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 66px;
  padding: 18px 27px;
  font-size: 19px;
  line-height: 1.3333333;
  border-radius: 6px;
}
.form-group-lg select.form-control {
  height: 66px;
  line-height: 66px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 66px;
  min-height: 40px;
  padding: 19px 27px;
  font-size: 19px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 56.25px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 45px;
  height: 45px;
  line-height: 45px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 66px;
  height: 66px;
  line-height: 66px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 35px;
  height: 35px;
  line-height: 35px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #ffffff;
}
.has-success .form-control {
  border-color: #ffffff;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #e6e6e6;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
}
.has-success .input-group-addon {
  color: #ffffff;
  border-color: #ffffff;
  background-color: #18bc9c;
}
.has-success .form-control-feedback {
  color: #ffffff;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #ffffff;
}
.has-warning .form-control {
  border-color: #ffffff;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #e6e6e6;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
}
.has-warning .input-group-addon {
  color: #ffffff;
  border-color: #ffffff;
  background-color: #f39c12;
}
.has-warning .form-control-feedback {
  color: #ffffff;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #ffffff;
}
.has-error .form-control {
  border-color: #ffffff;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #e6e6e6;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
}
.has-error .input-group-addon {
  color: #ffffff;
  border-color: #ffffff;
  background-color: #e74c3c;
}
.has-error .form-control-feedback {
  color: #ffffff;
}
.has-feedback label ~ .form-control-feedback {
  top: 26px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #597ea2;
}
@media (min-width: 768px) {
  .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;
    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 .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 11px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 32px;
}
.form-horizontal .form-group {
  margin-left: -15px;
  margin-right: -15px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 11px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 15px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 19px;
    font-size: 19px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 7px;
    font-size: 13px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  -ms-touch-action: manipulation;
      touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 10px 15px;
  font-size: 15px;
  line-height: 1.42857143;
  border-radius: 4px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: thin dotted;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #ffffff;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #ffffff;
  background-color: #95a5a6;
  border-color: #95a5a6;
}
.btn-default:focus,
.btn-default.focus {
  color: #ffffff;
  background-color: #798d8f;
  border-color: #566566;
}
.btn-default:hover {
  color: #ffffff;
  background-color: #798d8f;
  border-color: #74898a;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #ffffff;
  background-color: #798d8f;
  border-color: #74898a;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #ffffff;
  background-color: #687b7c;
  border-color: #566566;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #95a5a6;
  border-color: #95a5a6;
}
.btn-default .badge {
  color: #95a5a6;
  background-color: #ffffff;
}
.btn-primary {
  color: #ffffff;
  background-color: #2c3e50;
  border-color: #2c3e50;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #ffffff;
  background-color: #1a242f;
  border-color: #000000;
}
.btn-primary:hover {
  color: #ffffff;
  background-color: #1a242f;
  border-color: #161f29;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #ffffff;
  background-color: #1a242f;
  border-color: #161f29;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #ffffff;
  background-color: #0d1318;
  border-color: #000000;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #2c3e50;
  border-color: #2c3e50;
}
.btn-primary .badge {
  color: #2c3e50;
  background-color: #ffffff;
}
.btn-success {
  color: #ffffff;
  background-color: #18bc9c;
  border-color: #18bc9c;
}
.btn-success:focus,
.btn-success.focus {
  color: #ffffff;
  background-color: #128f76;
  border-color: #0a4b3e;
}
.btn-success:hover {
  color: #ffffff;
  background-color: #128f76;
  border-color: #11866f;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #ffffff;
  background-color: #128f76;
  border-color: #11866f;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #ffffff;
  background-color: #0e6f5c;
  border-color: #0a4b3e;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #18bc9c;
  border-color: #18bc9c;
}
.btn-success .badge {
  color: #18bc9c;
  background-color: #ffffff;
}
.btn-info {
  color: #ffffff;
  background-color: #3498db;
  border-color: #3498db;
}
.btn-info:focus,
.btn-info.focus {
  color: #ffffff;
  background-color: #217dbb;
  border-color: #16527a;
}
.btn-info:hover {
  color: #ffffff;
  background-color: #217dbb;
  border-color: #2077b2;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #ffffff;
  background-color: #217dbb;
  border-color: #2077b2;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #ffffff;
  background-color: #1c699d;
  border-color: #16527a;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #3498db;
  border-color: #3498db;
}
.btn-info .badge {
  color: #3498db;
  background-color: #ffffff;
}
.btn-warning {
  color: #ffffff;
  background-color: #f39c12;
  border-color: #f39c12;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #ffffff;
  background-color: #c87f0a;
  border-color: #7f5006;
}
.btn-warning:hover {
  color: #ffffff;
  background-color: #c87f0a;
  border-color: #be780a;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  color: #ffffff;
  background-color: #c87f0a;
  border-color: #be780a;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
  color: #ffffff;
  background-color: #a66908;
  border-color: #7f5006;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f39c12;
  border-color: #f39c12;
}
.btn-warning .badge {
  color: #f39c12;
  background-color: #ffffff;
}
.btn-danger {
  color: #ffffff;
  background-color: #e74c3c;
  border-color: #e74c3c;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #ffffff;
  background-color: #d62c1a;
  border-color: #921e12;
}
.btn-danger:hover {
  color: #ffffff;
  background-color: #d62c1a;
  border-color: #cd2a19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  color: #ffffff;
  background-color: #d62c1a;
  border-color: #cd2a19;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
  color: #ffffff;
  background-color: #b62516;
  border-color: #921e12;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #e74c3c;
  border-color: #e74c3c;
}
.btn-danger .badge {
  color: #e74c3c;
  background-color: #ffffff;
}
.btn-link {
  color: #18bc9c;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #18bc9c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #b4bcc2;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 18px 27px;
  font-size: 19px;
  line-height: 1.3333333;
  border-radius: 6px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 6px 9px;
  font-size: 13px;
  line-height: 1.5;
  border-radius: 3px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 13px;
  line-height: 1.5;
  border-radius: 3px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.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-property: height, visibility;
  -o-transition-property: height, visibility;
     transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  -o-transition-duration: 0.35s;
     transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  -o-transition-timing-function: ease;
     transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 15px;
  text-align: left;
  background-color: #ffffff;
  border: 1px solid #cccccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 4px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  -webkit-background-clip: padding-box;
          background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 9.5px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #7b8a8b;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #ffffff;
  background-color: #2c3e50;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #ffffff;
  text-decoration: none;
  outline: 0;
  background-color: #2c3e50;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #b4bcc2;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #b4bcc2;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 768px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
  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: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.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-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.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 > .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-top-right-radius: 4px;
  border-top-left-radius: 4px;
  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;
  border-bottom-right-radius: 4px;
  border-bottom-left-radius: 4px;
}
.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;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 66px;
  padding: 18px 27px;
  font-size: 19px;
  line-height: 1.3333333;
  border-radius: 6px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
  height: 66px;
  line-height: 66px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
  height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 35px;
  padding: 6px 9px;
  font-size: 13px;
  line-height: 1.5;
  border-radius: 3px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
  height: 35px;
  line-height: 35px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
  height: auto;
}
.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: 10px 15px;
  font-size: 15px;
  font-weight: normal;
  line-height: 1;
  color: #2c3e50;
  text-align: center;
  background-color: #ecf0f1;
  border: 1px solid #dce4ec;
  border-radius: 4px;
}
.input-group-addon.input-sm {
  padding: 6px 9px;
  font-size: 13px;
  border-radius: 3px;
}
.input-group-addon.input-lg {
  padding: 18px 27px;
  font-size: 19px;
  border-radius: 6px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-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:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #ecf0f1;
}
.nav > li.disabled > a {
  color: #b4bcc2;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #b4bcc2;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #ecf0f1;
  border-color: #18bc9c;
}
.nav .nav-divider {
  height: 1px;
  margin: 9.5px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ecf0f1;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 4px 4px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #ecf0f1 #ecf0f1 #ecf0f1;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #2c3e50;
  background-color: #ffffff;
  border: 1px solid #ecf0f1;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 4px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ecf0f1;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ecf0f1;
    border-radius: 4px 4px 0 0;
  }
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #ffffff;
  }
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 4px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #ffffff;
  background-color: #2c3e50;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified > li {
  float: none;
}
.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 4px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
  border: 1px solid #ecf0f1;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ecf0f1;
    border-radius: 4px 4px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #ffffff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 60px;
  margin-bottom: 21px;
  border: 1px solid transparent;
}
@media (min-width: 768px) {
  .navbar {
    border-radius: 4px;
  }
}
@media (min-width: 768px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 15px;
  padding-left: 15px;
  border-top: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 768px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    -webkit-box-shadow: none;
            box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 480px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
  margin-right: -15px;
  margin-left: -15px;
}
@media (min-width: 768px) {
  .container > .navbar-header,
  .container-fluid > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 768px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 768px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 19.5px 15px;
  font-size: 19px;
  line-height: 21px;
  height: 60px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 768px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: -15px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 15px;
  padding: 9px 10px;
  margin-top: 13px;
  margin-bottom: 13px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 4px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 768px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 9.75px -15px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 21px;
}
@media (max-width: 767px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    -webkit-box-shadow: none;
            box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 21px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 768px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 19.5px;
    padding-bottom: 19.5px;
  }
}
.navbar-form {
  margin-left: -15px;
  margin-right: -15px;
  padding: 10px 15px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: 7.5px;
  margin-bottom: 7.5px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 767px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 768px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: 7.5px;
  margin-bottom: 7.5px;
}
.navbar-btn.btn-sm {
  margin-top: 12.5px;
  margin-bottom: 12.5px;
}
.navbar-btn.btn-xs {
  margin-top: 19px;
  margin-bottom: 19px;
}
.navbar-text {
  margin-top: 19.5px;
  margin-bottom: 19.5px;
}
@media (min-width: 768px) {
  .navbar-text {
    float: left;
    margin-left: 15px;
    margin-right: 15px;
  }
}
@media (min-width: 768px) {
  .navbar-left {
    float: left !important;
  }
  .navbar-right {
    float: right !important;
    margin-right: -15px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #2c3e50;
  border-color: transparent;
}
.navbar-default .navbar-brand {
  color: #ffffff;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #18bc9c;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #ffffff;
}
.navbar-default .navbar-nav > li > a {
  color: #ffffff;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #18bc9c;
  background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #ffffff;
  background-color: #1a242f;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #cccccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #1a242f;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #1a242f;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #ffffff;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: transparent;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #1a242f;
  color: #ffffff;
}
@media (max-width: 767px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #ffffff;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #18bc9c;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #ffffff;
    background-color: #1a242f;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #cccccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #ffffff;
}
.navbar-default .navbar-link:hover {
  color: #18bc9c;
}
.navbar-default .btn-link {
  color: #ffffff;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #18bc9c;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #cccccc;
}
.navbar-inverse {
  background-color: #18bc9c;
  border-color: transparent;
}
.navbar-inverse .navbar-brand {
  color: #ffffff;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #2c3e50;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #ffffff;
}
.navbar-inverse .navbar-nav > li > a {
  color: #ffffff;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #2c3e50;
  background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #ffffff;
  background-color: #15a589;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #cccccc;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #128f76;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #128f76;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #ffffff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #149c82;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #15a589;
  color: #ffffff;
}
@media (max-width: 767px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #ffffff;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #2c3e50;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #ffffff;
    background-color: #15a589;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #cccccc;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #ffffff;
}
.navbar-inverse .navbar-link:hover {
  color: #2c3e50;
}
.navbar-inverse .btn-link {
  color: #ffffff;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #2c3e50;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #cccccc;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 21px;
  list-style: none;
  background-color: #ecf0f1;
  border-radius: 4px;
}
.breadcrumb > li {
  display: inline-block;
}
.breadcrumb > li + li:before {
  content: "/\00a0";
  padding: 0 5px;
  color: #cccccc;
}
.breadcrumb > .active {
  color: #95a5a6;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 21px 0;
  border-radius: 4px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 10px 15px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #ffffff;
  background-color: #18bc9c;
  border: 1px solid transparent;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  z-index: 2;
  color: #ffffff;
  background-color: #0f7864;
  border-color: transparent;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
  z-index: 3;
  color: #ffffff;
  background-color: #0f7864;
  border-color: transparent;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #ecf0f1;
  background-color: #3be6c4;
  border-color: transparent;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 18px 27px;
  font-size: 19px;
  line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 6px;
  border-top-left-radius: 6px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 6px;
  border-top-right-radius: 6px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 6px 9px;
  font-size: 13px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pager {
  padding-left: 0;
  margin: 21px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #18bc9c;
  border: 1px solid transparent;
  border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
  text-decoration: none;
  background-color: #0f7864;
}
.pager .next > a,
.pager .next > span {
  float: right;
}
.pager .previous > a,
.pager .previous > span {
  float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  color: #ffffff;
  background-color: #18bc9c;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #ffffff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #ffffff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #95a5a6;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #798d8f;
}
.label-primary {
  background-color: #2c3e50;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #1a242f;
}
.label-success {
  background-color: #18bc9c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #128f76;
}
.label-info {
  background-color: #3498db;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #217dbb;
}
.label-warning {
  background-color: #f39c12;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #c87f0a;
}
.label-danger {
  background-color: #e74c3c;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #d62c1a;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 13px;
  font-weight: bold;
  color: #ffffff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #2c3e50;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #ffffff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
  color: #2c3e50;
  background-color: #ffffff;
}
.list-group-item > .badge {
  float: right;
}
.list-group-item > .badge + .badge {
  margin-right: 5px;
}
.nav-pills > li > a > .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #ecf0f1;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 23px;
  font-weight: 200;
}
.jumbotron > hr {
  border-top-color: #cfd9db;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 6px;
  padding-left: 15px;
  padding-right: 15px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 68px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 21px;
  line-height: 1.42857143;
  background-color: #ffffff;
  border: 1px solid #ecf0f1;
  border-radius: 4px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #18bc9c;
}
.thumbnail .caption {
  padding: 9px;
  color: #2c3e50;
}
.alert {
  padding: 15px;
  margin-bottom: 21px;
  border: 1px solid transparent;
  border-radius: 4px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #18bc9c;
  border-color: #18bc9c;
  color: #ffffff;
}
.alert-success hr {
  border-top-color: #15a589;
}
.alert-success .alert-link {
  color: #e6e6e6;
}
.alert-info {
  background-color: #3498db;
  border-color: #3498db;
  color: #ffffff;
}
.alert-info hr {
  border-top-color: #258cd1;
}
.alert-info .alert-link {
  color: #e6e6e6;
}
.alert-warning {
  background-color: #f39c12;
  border-color: #f39c12;
  color: #ffffff;
}
.alert-warning hr {
  border-top-color: #e08e0b;
}
.alert-warning .alert-link {
  color: #e6e6e6;
}
.alert-danger {
  background-color: #e74c3c;
  border-color: #e74c3c;
  color: #ffffff;
}
.alert-danger hr {
  border-top-color: #e43725;
}
.alert-danger .alert-link {
  color: #e6e6e6;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@-o-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 21px;
  margin-bottom: 21px;
  background-color: #ecf0f1;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 13px;
  line-height: 21px;
  color: #ffffff;
  text-align: center;
  background-color: #2c3e50;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.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: 40px 40px;
          background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #18bc9c;
}
.progress-striped .progress-bar-success {
  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);
}
.progress-bar-info {
  background-color: #3498db;
}
.progress-striped .progress-bar-info {
  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);
}
.progress-bar-warning {
  background-color: #f39c12;
}
.progress-striped .progress-bar-warning {
  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);
}
.progress-bar-danger {
  background-color: #e74c3c;
}
.progress-striped .progress-bar-danger {
  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);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media > .pull-right {
  padding-left: 10px;
}
.media-left,
.media > .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #ffffff;
  border: 1px solid #ecf0f1;
}
.list-group-item:first-child {
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 4px;
  border-bottom-left-radius: 4px;
}
a.list-group-item,
button.list-group-item {
  color: #555555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555555;
  background-color: #ecf0f1;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #ecf0f1;
  color: #b4bcc2;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #b4bcc2;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #ffffff;
  background-color: #2c3e50;
  border-color: #2c3e50;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #8aa4be;
}
.list-group-item-success {
  color: #ffffff;
  background-color: #18bc9c;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #ffffff;
}
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:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #ffffff;
  background-color: #15a589;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #ffffff;
  border-color: #ffffff;
}
.list-group-item-info {
  color: #ffffff;
  background-color: #3498db;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #ffffff;
}
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:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #ffffff;
  background-color: #258cd1;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #ffffff;
  border-color: #ffffff;
}
.list-group-item-warning {
  color: #ffffff;
  background-color: #f39c12;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #ffffff;
}
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:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #ffffff;
  background-color: #e08e0b;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #ffffff;
  border-color: #ffffff;
}
.list-group-item-danger {
  color: #ffffff;
  background-color: #e74c3c;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #ffffff;
}
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:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #ffffff;
  background-color: #e43725;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #ffffff;
  border-color: #ffffff;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 21px;
  background-color: #ffffff;
  border: 1px solid transparent;
  border-radius: 4px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 3px;
  border-top-left-radius: 3px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 17px;
  color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #ecf0f1;
  border-top: 1px solid #ecf0f1;
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 3px;
  border-top-left-radius: 3px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
  margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 3px;
  border-top-left-radius: 3px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 3px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 3px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 3px;
  border-bottom-right-radius: 3px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 3px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 3px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
  border-top: 1px solid #ecf0f1;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
  border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  border-bottom: 0;
}
.panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 21px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 4px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ecf0f1;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ecf0f1;
}
.panel-default {
  border-color: #ecf0f1;
}
.panel-default > .panel-heading {
  color: #2c3e50;
  background-color: #ecf0f1;
  border-color: #ecf0f1;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ecf0f1;
}
.panel-default > .panel-heading .badge {
  color: #ecf0f1;
  background-color: #2c3e50;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ecf0f1;
}
.panel-primary {
  border-color: #2c3e50;
}
.panel-primary > .panel-heading {
  color: #ffffff;
  background-color: #2c3e50;
  border-color: #2c3e50;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #2c3e50;
}
.panel-primary > .panel-heading .badge {
  color: #2c3e50;
  background-color: #ffffff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #2c3e50;
}
.panel-success {
  border-color: #18bc9c;
}
.panel-success > .panel-heading {
  color: #ffffff;
  background-color: #18bc9c;
  border-color: #18bc9c;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #18bc9c;
}
.panel-success > .panel-heading .badge {
  color: #18bc9c;
  background-color: #ffffff;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #18bc9c;
}
.panel-info {
  border-color: #3498db;
}
.panel-info > .panel-heading {
  color: #ffffff;
  background-color: #3498db;
  border-color: #3498db;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #3498db;
}
.panel-info > .panel-heading .badge {
  color: #3498db;
  background-color: #ffffff;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #3498db;
}
.panel-warning {
  border-color: #f39c12;
}
.panel-warning > .panel-heading {
  color: #ffffff;
  background-color: #f39c12;
  border-color: #f39c12;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #f39c12;
}
.panel-warning > .panel-heading .badge {
  color: #f39c12;
  background-color: #ffffff;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #f39c12;
}
.panel-danger {
  border-color: #e74c3c;
}
.panel-danger > .panel-heading {
  color: #ffffff;
  background-color: #e74c3c;
  border-color: #e74c3c;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #e74c3c;
}
.panel-danger > .panel-heading .badge {
  color: #e74c3c;
  background-color: #ffffff;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #e74c3c;
}
.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;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #ecf0f1;
  border: 1px solid transparent;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 6px;
}
.well-sm {
  padding: 9px;
  border-radius: 3px;
}
.close {
  float: right;
  font-size: 22.5px;
  font-weight: bold;
  line-height: 1;
  color: #000000;
  text-shadow: none;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.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: #ffffff;
  border: 1px solid #999999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 6px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  -webkit-background-clip: padding-box;
          background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 20px;
}
.modal-footer {
  padding: 20px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #ffffff;
  text-align: center;
  background-color: #000000;
  border-radius: 4px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 15px;
  background-color: #ffffff;
  -webkit-background-clip: padding-box;
          background-clip: padding-box;
  border: 1px solid #cccccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 6px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 15px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 5px 5px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #ffffff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #ffffff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #ffffff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #ffffff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner > .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 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;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #ffffff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  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: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
  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 {
  left: auto;
  right: 0;
  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: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
  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:hover,
.carousel-control:focus {
  outline: 0;
  color: #ffffff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.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%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #ffffff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #ffffff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #ffffff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after {
  content: " ";
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !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;
  }
}
.navbar {
  border-width: 0;
}
.navbar-default .badge {
  background-color: #fff;
  color: #2c3e50;
}
.navbar-inverse .badge {
  background-color: #fff;
  color: #18bc9c;
}
.navbar-brand {
  line-height: 1;
}
.btn {
  border-width: 2px;
}
.btn:active {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.text-primary,
.text-primary:hover {
  color: #2c3e50;
}
.text-success,
.text-success:hover {
  color: #18bc9c;
}
.text-danger,
.text-danger:hover {
  color: #e74c3c;
}
.text-warning,
.text-warning:hover {
  color: #f39c12;
}
.text-info,
.text-info:hover {
  color: #3498db;
}
table a:not(.btn),
.table a:not(.btn) {
  text-decoration: underline;
}
table .dropdown-menu a,
.table .dropdown-menu a {
  text-decoration: none;
}
table .success,
.table .success,
table .warning,
.table .warning,
table .danger,
.table .danger,
table .info,
.table .info {
  color: #fff;
}
table .success > th > a,
.table .success > th > a,
table .warning > th > a,
.table .warning > th > a,
table .danger > th > a,
.table .danger > th > a,
table .info > th > a,
.table .info > th > a,
table .success > td > a,
.table .success > td > a,
table .warning > td > a,
.table .warning > td > a,
table .danger > td > a,
.table .danger > td > a,
table .info > td > a,
.table .info > td > a,
table .success > a,
.table .success > a,
table .warning > a,
.table .warning > a,
table .danger > a,
.table .danger > a,
table .info > a,
.table .info > a {
  color: #fff;
}
table > thead > tr > th,
.table > thead > tr > th,
table > tbody > tr > th,
.table > tbody > tr > th,
table > tfoot > tr > th,
.table > tfoot > tr > th,
table > thead > tr > td,
.table > thead > tr > td,
table > tbody > tr > td,
.table > tbody > tr > td,
table > tfoot > tr > td,
.table > tfoot > tr > td {
  border: none;
}
table-bordered > thead > tr > th,
.table-bordered > thead > tr > th,
table-bordered > tbody > tr > th,
.table-bordered > tbody > tr > th,
table-bordered > tfoot > tr > th,
.table-bordered > tfoot > tr > th,
table-bordered > thead > tr > td,
.table-bordered > thead > tr > td,
table-bordered > tbody > tr > td,
.table-bordered > tbody > tr > td,
table-bordered > tfoot > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ecf0f1;
}
.form-control,
input {
  border-width: 2px;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.form-control:focus,
input:focus {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label,
.has-warning .form-control-feedback {
  color: #f39c12;
}
.has-warning .form-control,
.has-warning .form-control:focus {
  border: 2px solid #f39c12;
}
.has-warning .input-group-addon {
  border-color: #f39c12;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label,
.has-error .form-control-feedback {
  color: #e74c3c;
}
.has-error .form-control,
.has-error .form-control:focus {
  border: 2px solid #e74c3c;
}
.has-error .input-group-addon {
  border-color: #e74c3c;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label,
.has-success .form-control-feedback {
  color: #18bc9c;
}
.has-success .form-control,
.has-success .form-control:focus {
  border: 2px solid #18bc9c;
}
.has-success .input-group-addon {
  border-color: #18bc9c;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  border-color: transparent;
}
.pager a,
.pager a:hover {
  color: #fff;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  background-color: #3be6c4;
}
.close {
  color: #fff;
  text-decoration: none;
  opacity: 0.4;
}
.close:hover,
.close:focus {
  color: #fff;
  opacity: 1;
}
.alert .alert-link {
  color: #fff;
  text-decoration: underline;
}
.progress {
  height: 10px;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.progress .progress-bar {
  font-size: 10px;
  line-height: 10px;
}
.well {
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
  border-color: #ecf0f1;
}
a.list-group-item-success.active {
  background-color: #18bc9c;
}
a.list-group-item-success.active:hover,
a.list-group-item-success.active:focus {
  background-color: #15a589;
}
a.list-group-item-warning.active {
  background-color: #f39c12;
}
a.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus {
  background-color: #e08e0b;
}
a.list-group-item-danger.active {
  background-color: #e74c3c;
}
a.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus {
  background-color: #e43725;
}
.panel-default .close {
  color: #2c3e50;
}
.modal .close {
  color: #2c3e50;
}
.popover {
  color: #2c3e50;
}