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> ≤ p ≤ b<sub>2</sub>
output$informationT <- renderUI({
HTML('
<p> This program simulates data and performs <b> two-sided </b> <b> Student's <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> ≤ p ≤ 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'<sub>1</sub> leads to acceptance of H<sub>1</sub>; BF<sub>01</sub> > b'<sub>2</sub> leads to acceptance of H<sub>0</sub>;
and if b'<sub>1</sub> ≤ BF<sub>01</sub> ≤ b'<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's (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's <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 ≥ b<sub>1</sub> </i>,
<i> BF<sub>01</sub> < b'<sub>1</sub> </i> and <i> BF<sub>01</sub> ≥ b'<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ía-Pé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's <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's <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 ≥ b<sub>1</sub> </i>,
<i> BF<sub>01</sub> < b'<sub>1</sub> </i> and <i> BF<sub>01</sub> ≥ b'<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ía-Pé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's correlation </b> with H<sub>0</sub> : <i>ρ = 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> ≤ p ≤ 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'<sub>1</sub> leads to acceptance of H<sub>1</sub>; BF<sub>01</sub> > b'<sub>2</sub> leads to acceptance of H<sub>0</sub>;
and if b'<sub>1</sub> ≤ BF<sub>01</sub> ≤ b'<sub>2</sub> further data are gathered).
The null hypothesis is fixed to <i>ρ = 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 ≥ b<sub>1</sub> </i>,
<i> BF<sub>01</sub> < b'<sub>1</sub> </i> and <i> BF<sub>01</sub> ≥ b'<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ía-Pé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's correlation </b> with H<sub>0</sub> : <i>ρ = 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>ρ = 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 ≥ b<sub>1</sub> </i>,
<i> BF<sub>01</sub> < b'<sub>1</sub> </i> and <i> BF<sub>01</sub> ≥ b'<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ía-Pé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> ≤ p ≤ 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'<sub>1</sub> leads to acceptance of H<sub>1</sub>; BF<sub>01</sub> > b'<sub>2</sub> leads to acceptance of H<sub>0</sub>;
and if b'<sub>1</sub> ≤ BF<sub>01</sub> ≤ b'<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 ≥ b<sub>1</sub> </i>,
<i> BF<sub>01</sub> < b'<sub>1</sub> </i> and <i> BF<sub>01</sub> ≥ b'<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ía-Pé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 ≥ b<sub>1</sub> </i>,
<i> BF<sub>01</sub> < b'<sub>1</sub> </i> and <i> BF<sub>01</sub> ≥ b'<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ía-Pé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> : ρ = 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> : ρ = 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;
}