Test for two means: Equal-variances assumption
ConditionalUnconditionalTest for two means: Normality assumption
ConditionalUnconditionalTest for two means: Equal-variances and Normality assumptions
ConditionalUnconditional |
# TEST FUNCTIONS
# Robust test of means
# Equal variances
test.robust.eq <- function(m1, m2, v1, v2, n1, n2, sk1, sk2){
vp <- ( (n1 - 1)*v1 + (n2-1)*v2 ) / (n1 + n2 - 2) # Pooled variance
b1 <- ( ( (sk1*(v1^1.5) )/(6*(n1^2)*(v1/n1+v2/n2)) )+ ( ( (sk1 * v1^1.5)/(2*n1*n2) - (sk1*v1^1.5)/(6*(n1^2)) )*( (m1-m2)^2/(v1/m1+v2/m2)^2 ) ) ) / sqrt(vp * (1/n1+1/n2))
b2 <- ( ( (sk2*(v2^1.5) )/(6*(n2^2)*(v2/n2+v1/n1)) )+ ( ( (sk2 * v2^1.5)/(2*n1*n2) - (sk2*v2^1.5)/(6*(n2^2)) )*( (m2-m1)^2/(v2/m2+v1/m1)^2 ) ) ) / sqrt(vp * (1/n2+1/n1))
t <- (m1 - m2) / sqrt( v1/n1 + v2/n2 )
u <- t + (b1 - b2)
df <- n1+n2-2
pval <- 2*pt(abs(u), df = df, lower.tail = F)
return(pval)
}
# Unequal variances
test.robust.uneq <- function(m1, m2, v1, v2, n1, n2, sk1, sk2){
b1 <- ( ( (sk1*v1^1.5)/(6*n1^2*(v1/n1+v2/n2)) )+( (sk1*v1^1.5*(m1-m2)^2)/ (3*n1^2*(v1/n1+v2/n2)^2) ) ) / ( sqrt( v1/n1 + v2/n2 ) )
b2 <- ( ( (sk2*v2^1.5)/(6*n2^2*(v2/n2+v1/n1)) )+( (sk2*v2^1.5*(m2-m1)^2)/ (3*n2^2*(v2/n2+v1/n1)^2) ) ) / ( sqrt( v2/n2 + v1/n1 ) )
t <- (m1 - m2) / sqrt( v1/n1 + v2/n2 )
u <- t + (b1 - b2)
df <- ( v1/n1 + v2/n2 )^2 / ( (v1/n1)^2/(n1-1)+(v2/n2)^2/(n2-1) )
pval <- 2*pt(abs(u), df = df, lower.tail = F)
return(pval)
}
# Student's t test
test.student <- function(samplemeans1, samplemeans2, sampleunbvariance1, sampleunbvariance2, n1, n2){
N <- n1 + n2
nom <- (samplemeans1 - samplemeans2)
tstat_eqvar <- nom / sqrt( ( ( (n1-1)*sampleunbvariance1 + (n2-1)*sampleunbvariance2 )/(N-2) ) * (1/n1+1/n2) )
df_eqvar <- N-2
pval_teq <- 2*pt(abs(tstat_eqvar), df = df_eqvar, lower.tail = F)
return(pval_teq)
}
# Welch t test
test.welch <- function(samplemeans1, samplemeans2, sampleunbvariance1, sampleunbvariance2, n1, n2){
nom <- (samplemeans1 - samplemeans2)
tstat_uneqvar <- nom / sqrt( sampleunbvariance1/n1 + sampleunbvariance2/n2 )
df_uneqvar <- ( sampleunbvariance1/n1 + sampleunbvariance2/n2 )^2 / ( (sampleunbvariance1/n1)^2/(n1-1)+(sampleunbvariance2/n2)^2/(n2-1) )
pval_tuneq <- 2*pt(abs(tstat_uneqvar), df = df_uneqvar, lower.tail = F)
return(pval_tuneq)
}
# F test
test.f <- function(var1, var2, n1, n2){
fstat <- var1/var2
df_f <- c(n1-1, n2-1)
plower <- pf(fstat, df_f[1], df_f[2], lower.tail = F)
pupper <- pf(fstat, df_f[1], df_f[2], lower.tail = T)
pval <- 2*pmin(plower, pupper)
return(pval)
}
# Levene test
test.levene <- function(data1, data2, samplemeans1, samplemeans2, n1, n2){
N <- n1 + n2
y1 <- t(abs(t(data1) - samplemeans1)) # Or median
y2 <- t(abs(t(data2) - samplemeans2))
y12 <- rbind(y1, y2)
y <- colMeans(y12)
wstat <- (N-2) *
( n1 * ( colMeans(y1) - y)^2 + n2 * ( colMeans(y2) - y)^2 ) /
( colSums( ( t(t(y1) - colMeans(y1)) )^2) + colSums( (t(t(y2) - colMeans(y2)))^2) )
df_w <- c(1, N-2)
plower <- pf(wstat, df_w[1], df_w[2], lower.tail = F)
pupper <- pf(wstat, df_w[1], df_w[2], lower.tail = T)
pval_l <- 2*pmin(plower, pupper)
return(pval_l)
}
# Chi square test
test.chi <- function(data1, data2){ # 10 breaks
breaksprob <- seq(0.10, 1, 0.10)
nint <- length(breaksprob)
df_chi <- (nint-3)
breaks <- c(-Inf, qnorm(breaksprob, 0, 1))
# Group 1
n1 <- length(data1)
temp <- hist(data1, breaks = breaks, plot = F)
yvar <- temp$counts
expected <- n1/nint
chistat <- sum((yvar-expected)^2/expected)
pval_chi1 <- pchisq(chistat, df = df_chi, lower.tail = F)
# Group 2
n2 <- length(data2)
temp <- hist(data2, breaks = breaks, plot = F)
yvar <- temp$counts
expected <- n2/nint
chistat <- sum((yvar-expected)^2/expected)
pval_chi2 <- pchisq(chistat, df = df_chi, lower.tail = F)
res <- c(pval_chi1, pval_chi2)
names(res) <- c("Group 1", "Group 2")
return(res)
}
# LAPLACE DISTRIBUTION
dlaplace <- function(x, location, scale){ # Probability density function
res <- 1/(2*scale) * exp( - abs(x - location)/scale )
return(res)
}
plaplace <- function(x, location, scale){ # Distribution function
res <- numeric(length(x))
res[x < location] <- 1/2 * exp((x-location)/scale)
res[x >= location] <- 1 - 1/2 * exp(-(x-location)/scale)
return(res)
}
qlaplace <- function(p, location, scale){ # Inverse distribution function (for random n. generation)
res <- sgn <- numeric(length(p))
p0 <- p - 0.5
sgn <- sign(p0)
res <- location - scale * sgn * log( 1-2*abs(p-0.5) )
}
rlaplace <- function(n, location, scale){ # Generate n Laplace distributed random numbers
p <- runif(n, 0, 1)
res <- qlaplace(p, location = location, scale = scale)
return(res)
}
# BETA DISTRIBUTION
area.beta <- function (x, y){
npos <- length (x)
fact <- sum((x[2:npos]-x[1:(npos-1)])*y[1:(npos-1)])
return(fact)
}
# MOMENTS
A1 <- function(dist = 0, param = 0){
if(dist == "dnorm"){
res <- param[1]
} else if (dist == "dunif"){
res <- (param[1]+param[2])/2
} else if(dist == "dlnorm"){
res <- exp(param[1] + param[2]^2/2)
} else if(dist == "dbeta"){
res <- param[1] / (param[1]+param[2])
} else if(dist == "dlaplace"){
res <- param[1]
}
return(res)
}
A2 <- function(dist = 0, param = 0, betasd = 0.8){
if(dist == "dnorm"){
res <- param[2]^2
} else if (dist == "dunif"){
res <- 1/12 * (param[2]-param[1])^2
} else if(dist == "dlnorm"){
res <- ( exp(param[2]^2)-1 ) * exp( 2*param[1] + param[2]^2 )
} else if (dist == "dbeta"){
res <- betasd^2
#res <- (param[1] * param[2]) / ( (param[1]+param[2])^2*(param[1]+param[2]+1) )
} else if (dist == "dlaplace"){
res <- 2*param[2]^2
}
return(res)
}
A3 <- function(datos = 0, dist = 0, param = 0){
if(dist == "dnorm" | dist == "dunif"){
res <- 0
} else if(dist == "dlnorm"){
res <- ( exp(param[2]^2)+2 )*sqrt( exp(param[2]^2)-1 )
} else if(dist == "dbeta"){
res <- (2* (param[2] - param[1])*sqrt(param[1] + param[2] + 1) ) / ( (param[1] + param[2] + 2)*sqrt(param[1] * param[2]) )
} else if(dist == "dlaplace"){
res <- 0
} else {
n <- length(datos)
res <- sum((datos-mean(datos))^3)/(sqrt(var(datos))^3*n) ###
}
return(res)
}
A4 <- function(datos = 0, dist = 0, param = 0){
if(dist == "dnorm"){
res <- 0
} else if (dist == "dunif"){
res <- -6/5
} else if(dist == "dlnorm"){
res <- exp(4*param[2]^2) + 2 * exp(3*param[2]^2) + 3 * exp(2*param[2]^2)-6
} else if (dist == "dbeta"){
res <- ( 6 * ((param[1]-param[2])^2*(param[1]+param[2]+1)-param[1]*param[2]*(param[1] + param[2] + 2)) ) / (param[1] * param[2] * (param[1] + param[2] + 2)*(param[1] + param[2] + 3))
} else if(dist == "dlaplace"){
res <- 3
} else {
n <- length(datos)
res <- sum((datos-mean(datos))^4)/( sqrt(var(datos))^4*n)-3 ### OJO ###
}
return(res)
}
# This script contains PLOT FUNCTIONS, but only HISTOGRAMS
# bounds_2 <- seq(0, 1, 0.05) # Length 21
# Test of normality (large)
plot.histograms.normality <- function(results = NA, results.all = NA, nrep = NA, alpha = 0.05, alphagraph = 0.05, default = F) {
bounds_0 <- seq(0, min(c(alphagraph, 0.05)), by = min(c(alphagraph, 0.05))) # length 1
bounds_1 <- seq(min(c(alphagraph, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), 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.7, xpd = T)
if(default){ # These are the default plots shown at the start
ymaxlab_2 <- 1000 # Approximately the default nrep
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab=" ", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bold("test of normality)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab_2, length.out=6)), labels=T, las="1")
box()
} else{ # These are the actual plots
rej1 <- results[,1] < alpha
rej2 <- results[,2] < alpha
rej <- rej1 == 1 | rej2 == 1
# General error rates
Pless <- mean(rej) #mean(results < alpha)
Pmore <- 1-Pless #mean(results >= alpha)
# Error rates for group 1
Pless1 <- mean(results[,1] < alpha)
Pmore1 <- 1-Pless1
# Error rates for group 2
Pless2 <- mean(results[,2] < alpha)
Pmore2 <- 1-Pless2
mydata_hist <- hist(results[,1], breaks = bounds_2, plot = FALSE) # This should be only one group
ymaxlab <- floor(max(mydata_hist$counts/100)+1)*100
mydata_hist_3 <- hist(results, breaks = bounds_2, plot = FALSE)
ymaxlab_3 <- floor(max(mydata_hist_3$counts/100)+1)*100
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_3), type="n", xlab=" ",
ylab=" ", adj=0.6, axes=F, main = " ")
title(main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bold("test of normality)"))),
line = 3)
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab_3, length.out=6)), labels=T, las="1")
# Group 1
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2], ytop=mydata_hist$counts, col="palegreen4", border = "gray65", density = 15, angle = 45)
# Group 2
rect(xleft=bounds_2[1:(last_2-1)], ybottom=mydata_hist$counts, xright=bounds_2[2:last_2], ytop=mydata_hist_3$counts, col="palegreen4", border = "gray65", density = 20, angle = -45)
lines (c(alphagraph,alphagraph), c(0,fac.plot*ymaxlab_3), lwd=3)
arrows(alphagraph-0.15, fac.plot*ymaxlab_3, alphagraph+0.15, fac.plot*ymaxlab_3, length=0.07, angle=25, lwd=2, code=3)
text(alpha-0.01, ymaxlab_3*(fac.plot2-0.02), labels=round(Pless, digits=3), adj=c(1,1), col = "gray42", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_3*(fac.plot2-0.02), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
box()
text(0.5, ymaxlab_3+ymaxlab_3*0.16, labels = "Rejection rates", pos = 4, cex = 0.7, xpd = T, font = 2)
text(0.5, ymaxlab_3+ymaxlab_3*0.1, labels = paste("Group 1:", Pless1), pos = 4, cex = 0.7, xpd = T)
text(0.5, ymaxlab_3+ymaxlab_3*0.05, labels = paste("Group 2:", Pless2), pos = 4, cex = 0.7, xpd = T)
}
}
plot.histograms.pvaln <- function(results,nrep = NA, alpha = 0.05, default = F){
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA, xaxs="i", yaxs="i")
if(default){ # These are the default plots shown at the start
ymaxlab_2 <- 1000 # Approximately the default nrep
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values (test of normality)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
} else{ # These are the actual plots
mydata_hist_2 <- hist(results, 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=" ",
ylab="Frequency", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values (test of normality)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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="palegreen3", 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)
rej1 <- results[,1] < alpha
rej2 <- results[,2] < alpha
rej <- rej1 == 1 | rej2 == 1
Pless <- mean(rej) #mean(results < alpha)
Pmore <- 1-Pless #mean(results >= alpha)
text(alpha-0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pless, digits=3), adj=c(1,1), col = "palegreen4", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
}
}
plot.histograms.ttest <- function(results = NA, results2 = NA, nrep = NA, alpha = 0.05, default = F, colores = c("indianred", "firebrick1")) {
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), 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.7, xpd = T, mgp = c(3,1,0),
mar = c(5, 4, 4, 2) + 0.1)
if(default){ # These are the default plots shown at the start
ymaxlab_2 <- 1000 # Approximately the default nrep
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2),
type="n", xlab= " ", ylab = " ", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bolditalic(t), bold("-tests)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab_2, length.out=6)), labels=T, las="1")
box()
} else{ # These are the actual plots
Pmore <- mean(results2 >= alpha)
Pless <- mean(results2 < alpha)
mydata_hist <- hist(results, breaks = bounds_2, plot = FALSE) # This should be Welch
ymaxlab <- floor(max(mydata_hist$counts/100)+1)*100
mydata_hist_3 <- hist(results2, breaks = bounds_2, plot = FALSE)
ymaxlab_3 <- floor(max(mydata_hist_3$counts/100)+1)*100
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_3), type="n", xlab=" ",
ylab=" ", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bolditalic(t), bold("-tests)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab_3, length.out=6)), labels=T, las="1")
# Welch
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2], ytop=mydata_hist$counts, col=colores[2], border = "white")
# T test
rect(xleft=bounds_2[1:(last_2-1)], ybottom=mydata_hist$counts, xright=bounds_2[2:last_2], ytop=mydata_hist_3$counts, col=colores[1], border = "white")
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_3), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_3, alpha+0.15, fac.plot*ymaxlab_3, length=0.07, angle=25, lwd=2, code=3)
text(alpha-0.01, ymaxlab_3*(fac.plot2-0.02), labels=round(Pless, digits=3), adj=c(1,1), col = "black", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_3*(fac.plot2-0.02), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
box()
}
}
plot.histograms.ttest.norm <- function(results = NA, results2 = NA, results3 = NA, nrep = NA, alpha = 0.05, colores = c("indianred", "firebrick1")) {
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), 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.7, xpd = T, mgp = c(3,1,0))
Pmore <- mean(results2 >= alpha)
Pless <- mean(results2 < alpha)
mydata_hist <- hist(results, breaks = bounds_2, plot = FALSE) # This should be Welch
ymaxlab <- floor(max(mydata_hist$counts/100)+1)*100
mydata_hist_3 <- hist(results2, breaks = bounds_2, plot = FALSE) # This is all three
ymaxlab_3 <- floor(max(mydata_hist_3$counts/100)+1)*100
mydata_hist_2 <- hist(results3, breaks = bounds_2, plot = FALSE) # This is the robust one
ymaxlab_2 <- floor(max(mydata_hist_2$counts/100)+1)*100
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_3), type="n", xlab=" ",
ylab=" ", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bolditalic(t), bold("-tests)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab_3, length.out=6)), labels=T, las="1")
# Robust
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],
ytop=mydata_hist_2$counts, col="navyblue", border = "white")
# Welch
rect(xleft=bounds_2[1:(last_2-1)], ybottom=mydata_hist_2$counts,
xright=bounds_2[2:last_2], ytop=mydata_hist_3$counts,
col="lightslateblue", border = "white")
# T test
rect(xleft=bounds_2[1:(last_2-1)], ybottom=mydata_hist_2$counts+mydata_hist$counts, xright=bounds_2[2:last_2],
ytop=mydata_hist_3$counts, col="indianred", border = "white")
lines(c(alpha,alpha), c(0,fac.plot*ymaxlab_3), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_3, alpha+0.15, fac.plot*ymaxlab_3, length=0.07, angle=25, lwd=2, code=3)
text(alpha-0.01, ymaxlab_3*(fac.plot2-0.02), labels=round(Pless, digits=3), adj=c(1,1), col = "black", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_3*(fac.plot2-0.02), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
box()
}
plot.histograms.var <- function(results = NA, results2 = NA, default = NA, nrep = NA, alpha = 0.05, side = c(2,1)){
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=side, mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA, xaxs="i", yaxs="i")
if(default){ # These are the default plots shown at the start
ymaxlab_2 <- 1000 # Approximately the default nrep
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values (Student's "), bolditalic("t"), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values"), bold(" (Welch's "), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
} else{ # These are the actual plots
mydata_hist_2 <- hist(results, breaks = bounds_2, plot = FALSE)
ymaxlab_2 <- floor(max(mydata_hist_2$counts/100)+1)*100
mydata_hist_3 <- hist(results2, breaks = bounds_2, plot = FALSE)
ymaxlab_3 <- floor(max(mydata_hist_3$counts/100)+1)*100
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values (Student's "), bolditalic("t"), bold("-test)"))))
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col="indianred", border = "white")
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
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(alpha)){
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)
}
Pmore <- mean(results >= alpha)
Pless <- mean(results < alpha)
text(alpha-0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pless, digits=3), adj=c(1,1), col = "indianred4", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
####
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_3), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic("p"), bold("-values"), bold(" (Welch's "), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_3$counts, col="lightslateblue", border = "white")
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_3, length.out=6)), labels=T, las="1")
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_3), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_3, alpha+0.15, fac.plot*ymaxlab_3, length=0.07, angle=25, lwd=2, code=3)
if(!is.na(alpha)){
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_3), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_3, alpha+0.15, fac.plot*ymaxlab_3, length=0.07, angle=25, lwd=2, code=3)
}
Pmore <- mean(results2 >= alpha)
Pless <- mean(results2 < alpha)
text(alpha-0.01, ymaxlab_3*(fac.plot2+0.03), labels=round(Pless, digits=3), adj=c(1,1), col = "royalblue4", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_3*(fac.plot2+0.03), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
}
}
plot.histograms.rob <- function(results = NA, default = NA, nrep = NA, alpha = 0.05, side = c(1,1)){
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=side, mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA, xaxs="i", yaxs="i")
if(default){ # These are the default plots shown at the start
ymaxlab_2 <- 1000 # Approximately the default nrep
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values"), bold(" (Cressie's "), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
} else{ # These are the actual plots
mydata_hist_4 <- hist(results, breaks = bounds_2, plot = FALSE)
ymaxlab_4 <- floor(max(mydata_hist_4$counts/100)+1)*100
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_4), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic("p"), bold("-values"), bold(" (Cressie's "), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_4$counts, col="navyblue", border = "white")
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_4, length.out=6)), labels=T, las="1")
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_4), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_4, alpha+0.15, fac.plot*ymaxlab_4, length=0.07, angle=25, lwd=2, code=3)
if(!is.na(alpha)){
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_4), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_4, alpha+0.15, fac.plot*ymaxlab_4, length=0.07, angle=25, lwd=2, code=3)
}
Pmore <- mean(results >= alpha)
Pless <- mean(results < alpha)
text(alpha-0.01, ymaxlab_4*(fac.plot2+0.03), labels=round(Pless, digits=3), adj=c(1,1), col = "navyblue", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_4*(fac.plot2+0.03), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
}
}
plot.histograms.norm <- function(results = NA, results2 = NA, default = NA, nrep = NA, alpha = 0.05, side = c(2,1), colores1 =c("indianred", "indianred4"), colores2 =c("lightslateblue", "royalblue4")){
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=side, mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA, xaxs="i", yaxs="i")
if(default){ # These are the default plots shown at the start
ymaxlab_2 <- 1000 # Approximately the default nrep
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values (Student's "), bolditalic("t"), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F,
main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values"), bold(" (Robust "), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
} else{ # These are the actual plots
mydata_hist_2 <- hist(results, breaks = bounds_2, plot = FALSE)
ymaxlab_2 <- floor(max(mydata_hist_2$counts/100)+1)*100
mydata_hist_3 <- hist(results2, breaks = bounds_2, plot = FALSE)
ymaxlab_3 <- floor(max(mydata_hist_3$counts/100)+1)*100
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_2), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values (Student's "), bolditalic("t"), bold("-test)"))))
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col=colores1[1], border = "white")
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
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")
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(alpha)){
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)
}
Pmore <- mean(results >= alpha)
Pless <- mean(results < alpha)
text(alpha-0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pless, digits=3), adj=c(1,1), col = colores1[2], cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_2*(fac.plot2+0.03), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
####
plot(c(bounds_2[1], bounds_2[last_2]), c(0, ymaxlab_3), type="n", xlab=" ",
ylab="Frequency", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic("p"), bold("-values"), bold(" (Robust "), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5)
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_3$counts, col=colores2[1], border = "white")
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_3, length.out=6)), labels=T, las="1")
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_3), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_3, alpha+0.15, fac.plot*ymaxlab_3, length=0.07, angle=25, lwd=2, code=3)
if(!is.na(alpha)){
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab_3), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab_3, alpha+0.15, fac.plot*ymaxlab_3, length=0.07, angle=25, lwd=2, code=3)
}
Pmore <- mean(results2 >= alpha)
Pless <- mean(results2 < alpha)
text(alpha-0.01, ymaxlab_3*(fac.plot2+0.03), labels=round(Pless, digits=3), adj=c(1,1), col = colores2[2], cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_3*(fac.plot2+0.03), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
}
}
# Test of variances (large)
plot.histograms.pvalv <- function(results, results0 = NA, nrep = NA, alpha = 0.05, default = F, what = "variances"){
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), 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.7, xpd = T)
if(default){ # These are the default plots shown at the start
ymaxlab_2 <- 1000 # Approximately the default nrep
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 (test of homoscedasticity)"))))
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")
box()
} else{ # These are the actual plots
Pmore <- mean(results >= alpha)
Pless <- mean(results < alpha)
mydata_hist_2 <- hist(results, breaks = bounds_2, plot = FALSE)
if(!is.na(results0[1])){
mydata_hist <- hist(results0, breaks = bounds_2, plot = FALSE)
ymaxlab_2 <- floor(max(mydata_hist$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 (test of homoscedasticity)"))))
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist$counts, col=rgb(0.4863, 0.8039, 0.4863, 0.25), border = "white")
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col="palegreen3", border = "white")
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")
box()
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)
text(alpha-0.01, ymaxlab_2*(fac.plot2), labels=round(Pless, digits=3), adj=c(1,1), col = "palegreen4", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_2*(fac.plot2), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
} else {
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 (test of homoscedasticity)"))))
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col="palegreen3", border = "white")
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")
box()
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)
text(alpha-0.01, ymaxlab_2*(fac.plot2), labels=round(Pless, digits=3), adj=c(1,1), col = "palegreen4", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab_2*(fac.plot2), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
}
}
}
# Students only (large)
plot.histograms.ttest.students <- function(results = NA, results0 = NA, nrep = NA, alpha = 0.05, colores = c("indianred", "firebrick1")) {
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), 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.7, xpd = T)
Pmore <- mean(results >= alpha)
Pless <- mean(results < alpha)
mydata_hist <- hist(results0, breaks = bounds_2, plot = FALSE)
ymaxlab <- floor(max(mydata_hist$counts/100)+1)*100
mydata_hist_2 <- hist(results, 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), type="n", xlab=" ",
ylab=" ", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab, 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$counts, col=rgb(0.8039, 0.3608, 0.3608, 0.25), border = "white")
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col="indianred", border = "white")
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab, alpha+0.15, fac.plot*ymaxlab, length=0.07, angle=25, lwd=2, code=3)
text(alpha-0.01, ymaxlab*(fac.plot2-0.02), labels=round(Pless, digits=3), adj=c(1,1), col = "indianred", cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab*(fac.plot2-0.02), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
box()
}
# Welch only (large)
plot.histograms.ttest.welch <- function(results = NA, results0 = NA, nrep = NA, alpha = 0.05, colores = c("lightslateblue", "royalblue")) {
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), 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.7, xpd = T)
Pmore <- mean(results >= alpha)
Pless <- mean(results < alpha)
mydata_hist <- hist(results0, breaks = bounds_2, plot = FALSE)
ymaxlab <- floor(max(mydata_hist$counts/100)+1)*100
mydata_hist_2 <- hist(results, 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), type="n", xlab=" ",
ylab=" ", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab, 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$counts, col=colores[2], border = "white")
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col=colores[1], border = "white")
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab, alpha+0.15, fac.plot*ymaxlab, length=0.07, angle=25, lwd=2, code=3)
text(alpha-0.01, ymaxlab*(fac.plot2-0.02), labels=round(Pless, digits=3), adj=c(1,1), col = colores[1], cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab*(fac.plot2-0.02), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
box()
}
# Robust only (large)
plot.histograms.ttest.robust <- function(results = NA, results0 = NA, nrep = NA, alpha = 0.05, colores = c("indianred", "firebrick1")) {
bounds_0 <- seq(0, min(c(alpha, 0.05)), by = min(c(alpha, 0.05))) # length 1
bounds_1 <- seq(min(c(alpha, 0.05)), 1, length.out = 20)
bounds_2 <- c(bounds_0, bounds_1)
fac.plot <- 1.02
fac.plot2 <- fac.plot+0.1*fac.plot # For the text
xlabels_2 <- bounds_2
last_2 <- length(bounds_2)
par(mfrow=c(1,1), 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.7, xpd = T)
Pmore <- mean(results >= alpha)
Pless <- mean(results < alpha)
mydata_hist <- hist(results0, breaks = bounds_2, plot = FALSE)
ymaxlab <- floor(max(mydata_hist$counts/100)+1)*100
mydata_hist_2 <- hist(results, 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), type="n", xlab=" ",
ylab=" ", adj=0.6, axes=F, main = expression(paste(bold("Histogram of "), bolditalic(p), bold("-values ("), bolditalic(t), bold("-test)"))))
title(xlab = expression(paste(italic("p"), "-value")), adj = 0.5, mgp = c(1.5,1,0))
title(ylab = "Frequency", mgp = c(2.2,1,0))
axis(1, at=seq(0,1,0.2), labels=seq(0,1,0.2), tick=T, padj = 0.5, mgp = c(3,0.5,0))
axis(2, at= round(seq(0,ymaxlab, 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$counts, col=colores[2], border = "white")
rect(xleft=bounds_2[1:(last_2-1)], ybottom=0, xright=bounds_2[2:last_2],ytop=mydata_hist_2$counts, col=colores[1], border = "white")
lines (c(alpha,alpha), c(0,fac.plot*ymaxlab), lwd=3)
arrows(alpha-0.15, fac.plot*ymaxlab, alpha+0.15, fac.plot*ymaxlab, length=0.07, angle=25, lwd=2, code=3)
text(alpha-0.01, ymaxlab*(fac.plot2-0.02), labels=round(Pless, digits=3), adj=c(1,1), col = colores[1], cex = 0.75, xpd = T)
text(alpha+0.01, ymaxlab*(fac.plot2-0.02), labels=round(Pmore, digits=3), adj=c(0,1), col = "black", cex = 0.75, xpd = T)
box()
}
# This script contains PLOT FUNCTIONS, except histograms
plot.dist <- function(dist1 = 1, parama1 = 1.649, paramb1 = 2.161, dist2 = 1, parama2 = 1.649, paramb2 = 2.161, means = 1.649, sds1 = 0.8, sds2 = 0.8, default = F){
if(default){
par(mfrow=c(1,1), mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = NA, bg = NA,
xaxs="i", yaxs="i", las = 1, pty = "m")
plot(c(-2, 5), c(0, 1),
xlab = expression(paste("Variable, ", italic(x))),
ylab = "Density", type = "n", axes = F, main = "True distribution of the variable")
axis(1); axis(2); box()
} else {
all.ddistfun <- c("dnorm", "dunif", "dlnorm", "dbeta", "dlaplace") # Probability density functions to draw the populations
# Theoretical moments of both groups
mean1.t <- means # Mean
mean2.t <- mean1.t
sigma1.t <- round(sqrt(A2(dist = all.ddistfun[dist1], param = c(parama1, paramb1), betasd = sds1)),3) # Sd
sigma2.t <- round(sqrt(A2(dist = all.ddistfun[dist2], param = c(parama2, paramb2), betasd = sds2)),3)
skewness1.t <- round(A3(dist = all.ddistfun[dist1], param = c(parama1, paramb1)),3) # Skewness
skewness2.t <- round(A3(dist = all.ddistfun[dist2], param = c(parama2, paramb2)),3)
kurtosis1.t <- round(A4(dist = all.ddistfun[dist1], param = c(parama1, paramb1)),3) # Excess kurtosis
kurtosis2.t <- round(A4(dist = all.ddistfun[dist2], param = c(parama2, paramb2)),3)
x <- seq(-2.5, 5.5, .001) # Domain
x1 <- x - 0.149 # Just to center at 0.5 from the original point 1.649
x2 <- x - 0.149
y1 <- get(all.ddistfun[dist1])(x, parama1, paramb1)
y2 <- get(all.ddistfun[dist2])(x, parama2, paramb2)
# The beta distribution needs additional changes
# Standardize and then change
# a = 2, b = 5 (doesn't matter if a = 5 and b = 2)
if(dist1 == 4) {
x1 <- ((x - 0.7143)/0.1597)*sds1 + 1.5
areabe <- area.beta(x1, y1)
y1 <- y1/areabe
}
if(dist2 == 4) {
x2 <- ((x - 0.7143)/0.1597)*sds2 + 1.5
areabe <- area.beta(x2, y2)
y2 <- y2/areabe
}
lboundy <- min(c(y1, y2))
uboundy <- max(c(y1, y2)) + 0.1*max(c(y1, y2))
par(mfrow=c(1,1), mar=c(5,5,5,5),cex.axis = 1, cex.lab=1.2, xpd = F, bg = NA,
xaxs="i", yaxs="i", las = 1, pty = "m")
plot(c(-2, 5), c(lboundy, uboundy),
xlab = expression(paste("Variable, ", italic(x))),
ylab = "Density", type = "n", axes = F, main = "True distribution of the variable")
axis(1); axis(2); box()
lines(x1, y1, lwd = 2.3, col = "salmon4", xpd = F)
lines(x2, y2, lwd = 2.3, col = "paleturquoise4", xpd = F)
legend("topleft", border = "white",
legend = c(parse(text = paste0("~ sigma[1] ==", sigma1.t)),
parse(text = paste0("~ gamma[1] == ", skewness1.t)),
parse(text = paste0("~ kappa[1] ==", kurtosis1.t))), xpd = T, bty = "n", text.col = "salmon4",
cex = 1.1, y.intersp = 0.8)
legend("topright", border = "white",
legend = c(parse(text = paste0("~ sigma[2] ==", sigma2.t)),
parse(text = paste0("~ gamma[2] ==", skewness2.t)),
parse(text = paste0("~ kappa[2] ==", kurtosis2.t))), xpd = T, bty = "n", text.col = "paleturquoise4",
cex = 1.1, y.intersp = 0.8)
}
}
plot.errors.variance <- function(data.plots.variance, data.plots.variance2, plottitle = "Conditional test for two means: equal variance assumption (F-test)"){
alpha <- 0.05
errorv.n <- data.plots.variance$error.rates.uncond[,1]
errort.n <- data.plots.variance$error.rates.uncond[,2]
errorw.n <- data.plots.variance$error.rates.uncond[,3]
errorv.v <- data.plots.variance$error.rates.uncond[,4]
errort.v <- data.plots.variance$error.rates.uncond[,5]
errorw.v <- data.plots.variance$error.rates.uncond[,6]
errort.n.cond <- data.plots.variance$error.rates.cond[,1]
errorw.n.cond <- data.plots.variance$error.rates.cond[,2]
errort.v.cond <- data.plots.variance$error.rates.cond[,3]
errorw.v.cond <- data.plots.variance$error.rates.cond[,4]
sd1 <- data.plots.variance$sd1
sd2 <- data.plots.variance$sd2
n1 <- data.plots.variance$n1
n2 <- data.plots.variance$n2
mulv <- data.plots.variance$mulv # Multiplicative constant for the standard deviation
mulf <- data.plots.variance$muln # Multiplicative constant for the sample size
##
par(mfrow=c(2,2), col.lab="black", las="1", xaxs="i", yaxs="i", cex = 1.8, pty = "m", family = "sans",
cex.axis = 0.7, cex.lab=0.8, cex.main = 0.8, xpd = T, oma=c(0,0,0,0), mai = c(1.5,1,1,0.5))
plot(c(0.5,1.5), c(0, 0.12), type = "n", bg = "cornflowerblue",
ylab = " ",
xlab = expression(paste("Sample size ratio, ", frac(italic(n[2]), italic(n[1]) ))))
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
title(ylab = expression(paste("Type I error rate (", italic(t), "-test)")), mgp = c(1.95, 0, 0), xpd = T)
# Conditional
lines(mulf, errort.n.cond, col = "indianred", lty = 1)
points(mulf, errort.n.cond, pch = 24, bg = "indianred", col = "black") # Students RED
lines(mulf, errorw.n.cond, col = "lightslateblue", lty = 1) # Welch BLUE
points(mulf, errorw.n.cond, pch = 24, bg = "lightslateblue", col = "black")
# Unconditional
lines(mulf, errort.n, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulf, errort.n, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black", cex = 1.2) # Students RED
lines(mulf, errorw.n, col = rgb(0.5176, 0.4392, 1, 1)) # Welch BLUE
points(mulf, errorw.n, pch = 21, bg = rgb(0.5176, 0.4392, 1, 1), col = "black", cex = 1.2)
legend(y = 0.12, x = max(mulf)-0.48, border = "black",
legend = c(parse(text = paste0("~ sigma[1] == ~ sigma[2] ==", sd1)),
parse(text = paste0("~ italic(n[1]) ==", n1))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
arrows(x0 = 1.4, x1 = 1.4, y0 = 0.01, y1 = 0, length = 0.15, lwd = 3, col = "black")
# Change variance
plot(c(0.5,1.5), c(0, 0.12), type = "n", bg = "cornflowerblue",
ylab = " ",
xlab = expression(paste("Standard deviation ratio, ", frac(sigma[2], sigma[1]))))
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
# Conditional
lines(mulv, errort.v.cond, col = "indianred", lty = 1)
points(mulv, errort.v.cond, pch = 24, bg = "indianred", col = "black") # Students RED
lines(mulv, errorw.v.cond, col = "lightslateblue", lty = 1) # Welch BLUE
points(mulv, errorw.v.cond, pch = 24, bg = "lightslateblue", col = "black")
# Unconditional
lines(mulv, errort.v, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulv, errort.v, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black", cex = 1.2) # Students RED
lines(mulv, errorw.v, col = rgb(0.5176, 0.4392, 1, 1)) # Welch BLUE
points(mulv, errorw.v, pch = 21, bg = rgb(0.5176, 0.4392, 1, 1), col = "black", cex = 1.2)
legend(y = 0.12, x = max(mulf)-0.48, border = "white",
legend = c(parse(text = paste0("~ sigma[1] ==", sd1)),
parse(text = paste0("~ italic(n[1]) == ~ italic(n[2]) ==", n1))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
arrows(x0 = 0.8, x1 = 0.8, y0 = 0.01, y1 = 0, length = 0.15, lwd = 3, col = "black")
##### NULL HYPOTHESIS IS FALSE #####
errorv.n <- data.plots.variance2$error.rates.uncond[,1]
errort.n <- data.plots.variance2$error.rates.uncond[,2]
errorw.n <- data.plots.variance2$error.rates.uncond[,3]
errorv.v <- data.plots.variance2$error.rates.uncond[,4]
errort.v <- data.plots.variance2$error.rates.uncond[,5]
errorw.v <- data.plots.variance2$error.rates.uncond[,6]
errort.n.cond <- data.plots.variance2$error.rates.cond[,1]
errorw.n.cond <- data.plots.variance2$error.rates.cond[,2]
errort.v.cond <- data.plots.variance2$error.rates.cond[,3]
errorw.v.cond <- data.plots.variance2$error.rates.cond[,4]
sd1 <- data.plots.variance2$sd1
sd2 <- data.plots.variance2$sd2
sd22 <- data.plots.variance2$sd21
n1 <- data.plots.variance2$n1
n2 <- data.plots.variance2$n2
n22 <- data.plots.variance2$n21
plot(c(0.5,1.5), c(0, 0.12), type = "n", bg = "cornflowerblue",
ylab = " ",
xlab = expression(paste("Sample size ratio, ", frac(italic(n[2]), italic(n[1]) ))))
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
title(ylab = expression(paste("Type I error rate (", italic(t), "-test)")), mgp = c(1.95, 0, 0), xpd = T)
# Conditional
lines(mulf, errort.n.cond, col = "indianred", lty = 1)
points(mulf, errort.n.cond, pch = 24, bg = "indianred", col = "black") # Students RED
lines(mulf, errorw.n.cond, col = "lightslateblue", lty = 1) # Welch BLUE
points(mulf, errorw.n.cond, pch = 24, bg = "lightslateblue", col = "black")
# Unconditional
lines(mulf, errort.n, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulf, errort.n, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black", cex = 1.2) # Students RED
lines(mulf, errorw.n, col = rgb(0.5176, 0.4392, 1, 1)) # Welch BLUE
points(mulf, errorw.n, pch = 21, bg = rgb(0.5176, 0.4392, 1, 1), col = "black", cex = 1.2)
legend(y = 0.12, x = max(mulf)-0.48, border = "white",
legend = c(parse(text = paste0("~ sigma[1] ==", sd1)),
parse(text = paste0("~ sigma[2] ==", sd22)),
parse(text = paste0("~ italic(n[1]) ==", n1))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
# Change variance
plot(c(0.5,1.5), c(0, 0.12), type = "n", bg = "cornflowerblue",
ylab = " ",
xlab = expression(paste("Standard deviation ratio, ", frac(sigma[2], sigma[1]))))
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
# Conditional
lines(mulv, errort.v.cond, col = "indianred", lty = 1)
points(mulv, errort.v.cond, pch = 24, bg = "indianred", col = "black") # Students RED
lines(mulv, errorw.v.cond, col = "lightslateblue", lty = 1) # Welch BLUE
points(mulv, errorw.v.cond, pch = 24, bg = "lightslateblue", col = "black")
# Unconditional
lines(mulv, errort.v, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulv, errort.v, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black", cex = 1.2) # Students RED
lines(mulv, errorw.v, col = rgb(0.5176, 0.4392, 1, 1)) # Welch BLUE
points(mulv, errorw.v, pch = 21, bg = rgb(0.5176, 0.4392, 1, 1), col = "black", cex = 1.2)
legend(y = 0.12, x = max(mulf)-0.48, border = "white",
legend = c(parse(text = paste0("~ sigma[1] ==", sd1)),
parse(text = paste0("~ italic(n[1]) ==", n1)),
parse(text = paste0("~ italic(n[2]) ==", n22))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
mtext(plottitle, line=-2, side=3, outer=TRUE, cex=1.5)
}
plot.errors.normal <- function(datosplot1 = NA, datosplot2 = NA, datosplot3 = NA, datosplot4 = NA, plottitle = "Test of equality of means conditioned to Chi-square test"){
alpha <- 0.05
errort.n <- datosplot1$error.rates.uncond
errort.n.r <- datosplot1$error.rates.uncond.r
errort.n.cond <- datosplot1$error.rates.cond
errort.n.cond.r <- datosplot1$error.rates.cond.r
sd1 <- datosplot1$sd1
sd2 <- datosplot1$sd2
n1 <- datosplot1$n1
n2 <- datosplot1$n2
mulf <- datosplot1$muln # Multiplicative constant for the sample size
par(mfrow=c(2,2), col.lab="black", las="1", xaxs="i", yaxs="i", cex = 1.8, pty = "m", family = "sans",
cex.axis = 0.7, cex.lab=0.8, cex.main = 0.8, xpd = T, oma=c(0,0,1,0), mai = c(1.5,1,1,0.5))
plot(c(0.5,1.5), c(0, 0.1), type = "n",
ylab = " ",
xlab = expression(paste("Sample size ratio, ", frac(italic(n[2]), italic(n[1]) ))))
title(main = "Uniform distribution", line = 1)
title(ylab = expression(paste("Type I error rate (", italic(t), "-test)")), mgp = c(1.95, 0, 0), xpd = T)
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
# Conditional
lines(mulf, errort.n.cond, col = rgb(0.8039, 0.3608, 0.3608, 1), lty = 1)
points(mulf, errort.n.cond, pch = 24, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.cond.r, col = rgb(0.5, 0.5, 0.5, 1), lty = 1)
points(mulf, errort.n.cond.r, pch = 24, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
# Unconditional
lines(mulf, errort.n, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulf, errort.n, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.r, col = rgb(0.5, 0.5, 0.5, 1))
points(mulf, errort.n.r, pch = 21, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
legend(y = 0.1, x = max(mulf)-0.45, border = "white",
legend = c(parse(text = paste0("~ sigma[1] == ~ sigma[2]")),
parse(text = paste0("~ italic(n[1]) ==", n1))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
####
errort.n <- datosplot4$error.rates.uncond
errort.n.r <- datosplot4$error.rates.uncond.r
errort.n.cond <- datosplot4$error.rates.cond
errort.n.cond.r <- datosplot4$error.rates.cond.r
plot(c(0.5,1.5), c(0, 0.1), type = "n",
ylab = expression(paste("Type I error rate (", italic(t), "-test)")),
xlab = expression(paste("Sample size ratio, ", frac(italic(n[2]), italic(n[1]) ))))
title(main = "Laplace distribution", line = 1)
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
# Conditional
lines(mulf, errort.n.cond, col = rgb(0.8039, 0.3608, 0.3608, 1), lty = 1)
points(mulf, errort.n.cond, pch = 24, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.cond.r, col = rgb(0.5, 0.5, 0.5, 1), lty = 1)
points(mulf, errort.n.cond.r, pch = 24, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
# Unconditional
lines(mulf, errort.n, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulf, errort.n, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.r, col = rgb(0.5, 0.5, 0.5, 1))
points(mulf, errort.n.r, pch = 21, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
legend(y = 0.1, x = max(mulf)-0.45, border = "white",
legend = c(parse(text = paste0("~ sigma[1] == ~ sigma[2]")),
parse(text = paste0("~ italic(n[1]) ==", n1))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
####
errort.n <- datosplot2$error.rates.uncond
errort.n.r <- datosplot2$error.rates.uncond.r
errort.n.cond <- datosplot2$error.rates.cond
errort.n.cond.r <- datosplot2$error.rates.cond.r
plot(c(0.5,1.5), c(0, 0.1), type = "n",
ylab = " ",
xlab = expression(paste("Sample size ratio, ", frac(italic(n[2]), italic(n[1]) ))))
title(main = "Lognormal distribution", line = 1)
title(ylab = expression(paste("Type I error rate (", italic(t), "-test)")), mgp = c(1.95, 0, 0), xpd = T)
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
# Conditional
lines(mulf, errort.n.cond, col = rgb(0.8039, 0.3608, 0.3608, 1), lty = 1)
points(mulf, errort.n.cond, pch = 24, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.cond.r, col = rgb(0.5, 0.5, 0.5, 1), lty = 1)
points(mulf, errort.n.cond.r, pch = 24, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
# Unconditional
lines(mulf, errort.n, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulf, errort.n, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.r, col = rgb(0.5, 0.5, 0.5, 1))
points(mulf, errort.n.r, pch = 21, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
legend(y = 0.1, x = max(mulf)-0.45, border = "white",
legend = c(parse(text = paste0("~ sigma[1] == ~ sigma[2]")),
parse(text = paste0("~ italic(n[1]) ==", n1))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
####
errort.n <- datosplot3$error.rates.uncond
errort.n.r <- datosplot3$error.rates.uncond.r
errort.n.cond <- datosplot3$error.rates.cond
errort.n.cond.r <- datosplot3$error.rates.cond.r
plot(c(0.5,1.5), c(0, 0.1), type = "n",
ylab = expression(paste("Type I error rate (", italic(t), "-test)")),
xlab = expression(paste("Sample size ratio, ", frac(italic(n[2]), italic(n[1]) ))))
title(main = "Beta distribution", line = 1)
abline(h = alpha, lty = 2, lwd = 1, col = rgb(0,0,0,1), xpd = F)
# Conditional
lines(mulf, errort.n.cond, col = rgb(0.8039, 0.3608, 0.3608, 1), lty = 1)
points(mulf, errort.n.cond, pch = 24, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.cond.r, col = rgb(0.5, 0.5, 0.5, 1), lty = 1)
points(mulf, errort.n.cond.r, pch = 24, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
# Unconditional
lines(mulf, errort.n, col = rgb(0.8039, 0.3608, 0.3608, 1))
points(mulf, errort.n, pch = 21, bg = rgb(0.8039, 0.3608, 0.3608, 1), col = "black") # Students RED
lines(mulf, errort.n.r, col = rgb(0.5, 0.5, 0.5, 1))
points(mulf, errort.n.r, pch = 21, bg = rgb(0.5, 0.5, 0.5, 1), col = "black") # Students RED
legend(y = 0.1, x = max(mulf)-0.45, border = "white",
legend = c(parse(text = paste0("~ sigma[1] == ~ sigma[2]")),
parse(text = paste0("~ italic(n[1]) ==", n1))), xpd = T, bty = "n", text.col = "black",
cex = 0.8, y.intersp = 0.7)
mtext(plottitle, line=-0.7, side=3, outer=TRUE, cex=1.5)
}
server <- function(input, output, session) {
shinyjs::runjs('toggleCodePosition();')
# Need to load these on server
# Data of the Variance assumption simulations
load("dataplots_f_false.Rdata"); data.plots.variance.false <- data.plots.f
load("dataplots_levene_false.Rdata"); data.plots.levene.false <- data.plots.f
load("dataplots_f_.Rdata"); data.plots.variance <- data.plots.f
load("dataplots_levene_.Rdata"); data.plots.levene <- data.plots.f
# Data of the Normality assumption simulations
load("dataplots_Shapiro_runif.Rdata"); shapiro1 <- resultados
load("dataplots_Shapiro_rlnorm.Rdata"); shapiro2 <- resultados
load("dataplots_Shapiro_rbeta.Rdata"); shapiro3 <- resultados
load("dataplots_Shapiro_rlaplace.Rdata"); shapiro4 <- resultados
load("dataplots_Chi_runif.Rdata"); chi1 <- resultados
load("dataplots_Chi_rlnorm.Rdata"); chi2 <- resultados
load("dataplots_Chi_rbeta.Rdata"); chi3 <- resultados
load("dataplots_Chi_rlaplace.Rdata"); chi4 <- resultados
shinyjs::hide("fakerunT"); shinyjs::hide("fakerunT1"); shinyjs::hide("fakerunT2") # This fakerunT shows the loading animation, does nothing else
options("scipen"=4, "digits"=4) # print numbers in fixed notation
# Plots independent of simulations
# Variance tab
observe({
if(input$whichVar1 == "F-test"){
output$plotErrorPlot1 <- renderPlot({
plot.errors.variance(data.plots.variance, data.plots.variance.false,
plottitle = "Student's t-test for two means conditioned to homoscedasticity test (F-test)")
})
} else {
output$plotErrorPlot1 <- renderPlot({
plot.errors.variance(data.plots.levene,
data.plots.levene.false,
plottitle = "Student's t-test for two means conditioned to homoscedasticity test (Levene's test)")
})
}
})
# Normality tab
observe({
if(input$whichNorm2 == "Shapiro-Wilk"){
output$ploterrorNormal <- renderPlot({
plot.errors.normal(shapiro1, shapiro2, shapiro3, shapiro4,
plottitle = "Student's t-test for two means conditioned to normality test (Shapiro-Wilk test)")
# Student's t‐test for two means conditioned to normality test (Chi‐square)
})
} else {
output$ploterrorNormal <- renderPlot({
plot.errors.normal(chi1, chi2, chi3, chi4,
plottitle = "Student's t-test for two means conditioned to normality test (Chi-square test)")
})
}
})
################ Fix input boundaries ################
minsd <- 0.05 # Standard deviation
maxsd <- 5
minalpha <- 0.0001 # Significance level
maxalpha <- 0.9999
############### SIMULATION PARAMETERS (NOT INPUTS) ################
nrep <- 10000 # Number of simulations
# Default mean and standard deviation
# Selected so that the resulting Lognormal distribution is meaningfully skewed
sd1 <- sd2 <- 0.8
mu1 <- mu2 <- 1.649
all.dist <- c("Normal", "Uniform", "Lognormal", "Negatively skewed (Beta)", "Laplace")
all.rdistfun <- c("rnorm", "runif", "rlnorm", "rbeta", "rlaplace")
################ DOCUMENTATION ################
# First tab
output$informationT1 <- renderUI({
HTML('
<p>
Student's <i>t</i>‐test is widely used to test the null hypothesis of equality of means with
two independent samples of observations. It is a parametric technique that relies on a set of
assumptions including normality (both samples have been drawn from normally distributed random
variables) and homoscedasticity (both random variables have the same variance). Those assumptions
can be put to test likewise, yielding a conditional strategy where statistical
hypotheses about normality and homoscedasticity are tested first, and the choice of test of means
depends on the outcome of tests on assumptions. For instance, if the null hypothesis about equality
of variances is rejected, an alternative procedure like Welch's <i>t</i>‐test (which does not assume
homoscedasticity) will be performed over the means; otherwise a Student's <i>t</i>‐test will
be chosen. This conditional approach has gained popularity and it is customarily used even though it has been
found to alter the type‐I error rate of <i>t</i>-tests in such a way that the empirical rate
no longer reflects the nominal significance level (Gans, 1981; Zimmerman 1996, 2004).
</p>
<p>
This <b>app aims</b> at illustrating the effects of conditional and unconditional uses of <i>t</i>‐tests on the empirical type‐I error rate.
The app simulates data and performs two‐tailed tests for the difference of two means with
independent observations in scenarios specified by the user. The <b>current tab</b> focuses on the
homoscedasticity assumption.
In the conditional procedure, homoscedasticity is tested first.
When the null hypothesis about equality of variances is rejected, Welch's <i>t</i>-test
is performed over the means; otherwise, a Student's <i>t</i>-test is performed.
In the unconditional approach the two <i>t</i>-tests are always performed over the means without
checking any assumptions.
</p>
<h4> Usage </h4>
<p>
To explore how violations of the equal‐variances assumption affect empirical type‐I error rates
under conditional and unconditional approaches, samples are drawn from normally
distributed variables with equal means (i.e., the null hypothesis for the <i>t</i>‐test is
always true). The user can select the values of (i) the significance level (which
corresponds to the nominal type‐I error rate and is common to both, tests of variances
and means), (ii) the values of true standard deviations σ<sub>1</sub> and σ<sub>2</sub>, and (iii) the sample sizes of each group.
There are two tests of variances available: <i>F</i>‐test and Levene's.
Because the ratio of true standard deviations and the ratio of sample sizes affect performance of
<i>t</i>‐tests, they are explicitly shown on the sidebar. In addition, true distributions of the variables are
plotted at the bottom of the sidebar, alongside a legend with the values of the standard deviations σ, skewness
γ, and excess kurtosis κ (group #1 to the left and colored red, group #2 to the right and colored
green). Since only normal distributions are used, κ<sub>1</sub> = κ<sub>2</sub> = 0, and
γ<sub>1</sub> = γ<sub>1</sub> = 0.
</p>
<h4> Output </h4>
<p>
Results for the conditional and unconditional approaches are respectively shown on the left and
right columns. The <b>top-left histogram</b> on the left plots the empirical distribution of
<i>p</i>‐values yielded by Student's <i>t</i>‐test (red) and Welch's <i>t</i>‐test (blue)
used as prescribed by the conditional procedure. Numeric labels on the top left area
correspond to the overall proportions of null hypotheses rejected (type‐I error rate, left)
and not rejected (right). There is a drop‐down menu above the histogram that allows users to
display only the <i>p</i>‐values of Student's test, only those of Welch's test, or both.
If only one type of test is selected, light bars showing results for that test under the unconditional
approach are included for reference, and the numeric labels on the top left represent
proportions for that test alone.
</p><p>The <b>histogram at the bottom</b> (colored green) shows the distribution
of <i>p</i>‐values of the test of equality of variances (either <i>F</i> or Levene's, depending on the
user's choice), alongside its null‐hypothesis rejection and non‐rejection rates.
</p>
<p>
The two <b>histograms on the right</b> depict the empirical distribution of <i>p</i>‐values
and empirical type‐I error rate for Student's <i>t</i>‐test (top) and Welch's test (bottom) without
following a conditional approach (i.e., all samples are tested using both tests). </p>
<p>
<b>Additional plots</b> can be accessed by clicking the button between the information and warning icons,
which show empirical type‐I error rates for <i>t</i>-tests as a function of the ratio between
standard deviations and the ratio between sample sizes. Further explanation is included in the
figure caption.
</p>
</br>
<p> <b> References </b> </p>
<p>Gans, D. J. (1981). Use of a preliminary test in comparing two sample means. <i>Communications in Statistics - Simulation and Computation</i>, <i>10</i>, 163-174. </p>
<p>Zimmerman, D. W. (1996). Some properties of preliminary tests of equality of variances in the two-sample location problem. <i>The Journal of General Psychology</i>, <i>123</i>, 217-231.</p>
<p>Zimmerman, D. W. (2004). A note on preliminary tests of equality of variances. <i>British Journal of Mathematical and Statistical Psychology</i>, <i>57</i>, 173-181.</p>
')
})
# Second tab
output$informationT2 <- renderUI({
HTML('
<p>
Student's <i>t</i>‐test is widely used to test the null hypothesis of equality of means
with two independent samples of observations. It is a parametric technique that relies on a
set of assumptions including normality (both samples have been drawn from normally distributed
random variables) and homoscedasticity (both random variables have the same variance).
Those assumptions can be put to test likewise, yielding a conditional strategy where statistical hypotheses about normality and homoscedasticity are tested first
and the choice of test of means depends on the outcome of tests on assumptions.
For instance, only if the null hypothesis about normality fails to be rejected on both groups a
Student's <i>t</i>‐test will be conducted; otherwise a robust alternative will be chosen.
This conditional approach has gained popularity and
it is customarily used even though it has been found to alter the type‐I error rate of tests of means in such
a way that the empirical rate no longer reflects the nominal significance level (Gans, 1981; Rochon & Kieser, 2011).
</p>
<p>
This <b>app aims</b> at illustrating the effects of conditional and unconditional uses of
<i>t</i>‐tests on the empirical type‐I error rate. The app simulates data and performs two‐tailed
tests for the difference of two means with independent observations in scenarios specified by the user.
The <b>current tab</b> focuses on the normality assumption. In the conditional procedure,
a goodness-of fit test on normality is carried out first and
only when the null hypothesis fails to be rejected in both groups a
Student's <i>t</i>-test is be conducted. When normality is rejected
in at least one group, Cressie and Whitford's (1986) robust <i>U<sub>2</sub></i>
<i>t</i>-test is used as a replacement.
</p>
<h4> Usage </h4>
<p>
To explore how violations of the normality assumption affect empirical type‐I error rates
under conditional and unconditional approaches, samples are drawn from variables with
equal variances (i.e., the homoscedasticity assumption is met) along with equal means
(i.e., the null hypothesis for the <i>t</i>‐test is always true).
The user can select the significance level, α (nominal type‐I error rate),
the shape of the distributions, and the sample sizes <i>n</i><sub>1</sub> and <i>n</i><sub>2</sub> of each group.
</p>
<p>
Along with the significance level, an option to correct for multiple comparisons is offered.
Because Student's <i>t</i>‐test assumes normality for both groups,
two separate tests of normality must be carried out per test on means. In order to maintain an overall significance level of α,
a cutoff point of α/2 must be used for each normality test.
</p>
<p>
Choices of shape are (i) normal (symmetrical and mesokurtic), (ii) uniform for a symmetric
and platykurtic distribution, (iii) Laplace for a symmetric and leptokurtic option,
(iv) lognormal for a strongly positively skewed variable, and (v) beta with parameters chosen to render
a moderately negatively skewed alternative.
True distributions selected by the user are plotted at the
bottom of the sidebar, alongside a legend with the values of the standard deviations σ,
skewness γ, and excess kurtosis κ (group #1 to the left and colored red,
group #2 to the right and colored green).
</p>
<h4> Output </h4>
<p>Results for the conditional and unconditional approaches are respectively shown on
the left and right columns. The <b>top-left histogram</b> depicts the empirical distribution of
<i>p</i>-values yielded by Student's <i>t</i>-test (red) and
Cressie's <i>t</i>-test (grey), used as prescribed by the
conditional procedure. Numeric labels over the arrows in the top left area correspond to the
proportions of null hypotheses on means rejected (type-I error rate, left) and not rejected (right) under
the conditional approach. There is a drop‐down menu above the histogram that allows
users to display only the <i>p</i>‐values of Student's test, only those of Cressie's <i>t</i>-test,
or both. If only one type of test is selected, light bars showing results for that test under the unconditional
approach are included for reference, and the numeric labels on the top left represent
proportions for that test alone.
</p><p>
The <b>histogram at the bottom</b> (green) shows the distribution
of <i>p</i>-values of the goodness-of-fit test of normality (either, Shapiro-Wilk
or chi-square depending on the user's input) for groups #1 (45° patterned bars, bottom)
and #2 (-45° patterned bars, top).
Individual rejection rates are shown separately (top right legend)
for both groups whereas the combined rejection and non-rejection rates are printed above the
arrows. Only combined rejection rates are used in the conditional approach, as it requires rejection of normality in at least one group.
</p>
<p>The <b>histograms on the right</b> depict the empirical distribution of <i>p</i>-values and
empirical type-I error rate for Student's (top) and Cressie's (bottom)
<i>t</i>-tests under the unconditional approach
(i.e., performed over all samples).</p>
<p>
<b>Additional plots</b> can be accessed by clicking the button between the information and warning icons, which show empirical type-I error rates for <i>t</i>-tests as a function of the ratio between sample sizes when one of the samples has been drawn from a non-normal distribution (uniform, Laplace, lognormal, and beta) and the other from a normal one. Further explanation is available in the figure caption.
</p>
</br>
<p> <b> References </b> </p>
<p>Cressie, N. A. C. & Whitford, H. J. (1986) How to use the two-sample <i>t</i>-test, <i>Biometrical Journal</i>, <i>2</i>, 131–148.</p>
<p>Gans, D. J. (1981). Use of a preliminary test in comparing two sample means. <i>Communications in Statistics - Simulation and Computation</i>, <i>10</i>, 163-174. </p>
<p>Rochon, J., & Kieser, M. (2011). A closer look at the effect of preliminary goodness‐of‐fit testing for normality for the one‐sample <i>t</i>‐test. <i>British Journal of Mathematical and Statistical Psychology</i>, <i>64</i>, 410-426.</p>
')
})
# Third tab
output$informationT <- renderUI({
HTML('
<p>
Student's <i>t</i>‐test is widely used to test the null hypothesis of equality of means with
two independent samples of observations. It is a parametric technique that relies on a set of
assumptions including normality (both samples have been drawn from normally distributed random
variables) and homoscedasticity (both random variables have the same variance). Those assumptions
can be put to test likewise, yielding a conditional strategy where a series of statistical
hypotheses about normality and homoscedasticity are tested first and the choice of test of means
depends on the outcome of tests on assumptions. This conditional approach has gained popularity and it is customarily used even though it has been
found to alter the type‐I error rate of tests of means in such a way that the empirical rate
no longer reflects the nominal significance level (Gans, 1981; Zimmerman 1996, 2004; Rochon & Kieser, 2011).
</p>
<p>
This app aims at illustrating the effects of conditional and unconditional uses of <i>t</i>-tests
on the empirical type-I error rate. The app simulates data and performs two-tailed tests
for the difference of two means with independent observations in scenarios specified by the user.
The current tab allows examining the homoscedasticity and normality assumptions in a three-step
procedure: First of all, a test on normality is performed. If normality is rejected for at least
one group, Cressie & Whitford's (1986) modification of their
<i>U<sub>2</sub><sup></sup></i> test, which assumes
neither normality nor homoscedasticity, is conducted. Otherwise,
variances are tested leading to either a Welch's <i>t</i>-test on means
(upon rejection of homoscedasticity) or a Student's <i>t</i>-test on means
(if homoscedasticity cannot be rejected).
</p>
<h4> Usage </h4>
<p>
As in previous tabs, samples are drawn from variables with equal means (i.e., the null hypothesis
for the <i>t</i>-test is always true). There are two goodness-of-fit tests available
(Shapiro-Wilk and chi-square) and two tests of variances (<i>F</i> and Levene's).
The user can also select (i) the significance level, α (which is used in all tests),
(ii) whether a correction for multiple comparisons is applied to tests on normality,
(iii) the shape of the distributions from which samples are drawn, (iv) the values of true standard deviations σ<sub>1</sub> and σ<sub>2</sub>, and (v) the sample sizes <i>n</i><sub>1</sub> and <i>n</i><sub>2</sub> of each group.
</p>
<p>
Because the ratio of standard deviations and the ratio of sample sizes affect the performance
of <i>t</i>-tests, they are explicitly shown on the sidebar. Distributions selected by the user are plotted at the bottom of the sidebar, alongside a legend with the values of the standard deviations σ, skewness γ, and excess kurtosis κ (group #1 to the left and colored red, group #2 to the right and colored green).
</p>
<h4> Output </h4>
<p>
Results for the conditional and unconditional approaches are respectively shown on the left
and right columns. The <b>histogram on the left</b> depicts the empirical distribution of
<i>p</i>-values yielded by Student's <i>t</i>-test (red), Welch's <i>t</i>-test
(light blue),
and Cressie's <i>t</i>-test (dark blue) used as prescribed by the
conditional procedure. Numeric labels over the arrows in the top
left area correspond to the overall proportions of null hypotheses on means rejected
(type-I error rate, left) and not rejected (right) under the conditional approach.
There is a drop‐down menu above the histogram that allows
users to display only the <i>p</i>‐values of Student's test, only those of Welch's <i>t</i>-test,
those of Cressie's <i>t</i>-test,
or all three. If only one type of test is selected, light bars showing results for that test under the unconditional
approach are included for reference, and the numeric labels on the top left represent
proportions for that test alone.
</p>
<p>
The two <b>histograms on the right</b> (unconditional) depict the empirical distribution of
<i>p</i>-values and empirical type-I error rate for Student's <i>t</i>-test (top),
Welch's test (middle),
and the Cressie's <i>t</i>-test (bottom) without following a
conditional approach (i.e., all tests are performed on all samples without any prior checks).
</p>
<p>
Plots showing the distribution of <i>p</i>-values for the tests of normality and homoscedasticity
are available by clicking the button between the information and warning icons. Further explanation is available in the figure caption.
</p>
</br>
<p> <b> References </b> </p>
<p>Cressie, N. A. C. & Whitford, H. J. (1986) How to use the two-sample <i>t</i>-test, <i>Biometrical Journal</i>, <i>2</i>, 131–148.</p>
<p>Gans, D. J. (1981). Use of a preliminary test in comparing two sample means. <i>Communications in Statistics - Simulation and Computation</i>, <i>10</i>, 163-174. </p>
<p>Rochon, J., & Kieser, M. (2011). A closer look at the effect of preliminary goodness‐of‐fit testing for normality for the one‐sample <i>t</i>‐test. <i>British Journal of Mathematical and Statistical Psychology</i>, <i>64</i>, 410-426.</p>
<p>Zimmerman, D. W. (1996). Some properties of preliminary tests of equality of variances in the two-sample location problem. <i>The Journal of General Psychology</i>, <i>123</i>, 217-231.</p>
<p>Zimmerman, D. W. (2004). A note on preliminary tests of equality of variances. <i>British Journal of Mathematical and Statistical Psychology</i>, <i>57</i>, 173-181.</p>
')
})
# Show blank plots
output$plott <- output$plott1 <- output$plott2 <- renderPlot(plot.histograms.ttest(default = T))
#output$plotpvalues <- renderPlot({plot.histograms.chif(default = T)})
output$histogramst.r <- renderPlot(plot.histograms.rob(default = T))
output$histogramst2 <- renderPlot(plot.histograms.norm(default = T))
output$histogramst1 <- renderPlot(plot.histograms.var(default = T))
output$histogramsn2 <- renderPlot(plot.histograms.pvaln(default = T))
output$histogramsv1 <- renderPlot(plot.histograms.pvalv(default = T))
output$histograms.var <- renderPlot({plot.histograms.pvalv(default = T)})
output$histogramst <- renderPlot({plot.histograms.var(default = T)})
output$histograms.norm <- renderPlot({plot.histograms.normality(default = T)})
output$plotNormPval <- renderPlot({plot.histograms.normality(default = T) })
output$plotDist <- output$plotDist2 <- output$plotDist3 <- renderPlot({plot.dist(default =T)}, bg = "transparent")
output$warningsT <- output$warningsT1 <- output$warningsT2 <- renderUI(HTML('<center><h2> There are no warnings to display </h2></center>'))
################################################################################
# VARIANCE #
################################################################################
# Error control
observeEvent(input$runT1, ignoreNULL = T, {
shinyjs::hide("runT1"); shinyjs::show("fakerunT1")
# These ones don't need error control because they're sliders
n1 <- input$n11
n2 <- input$n21
warnings.t1.sequential <- list(NULL, NULL)
if (is.na(input$alphanom1) || input$alphanom1 < minalpha || input$alphanom1 > maxalpha) {
warnings.t1.sequential[[1]] <- paste("Probabilities must be between ", minalpha, " and ", maxalpha, ".", sep = "")
alphanom <- 0.05
} else {
alphanom <- input$alphanom1
}
if (is.na(input$sd11) || input$sd11 < minsd || input$sd11 > maxsd) {
warnings.t1.sequential[[2]] <- paste("The standard deviation must be between ", minsd, " and ", maxsd, ".", sep = "")
param.b1 <- 1
} else {
param.b1 <- input$sd11
}
if (is.na(input$sd21) || input$sd21 < minsd || input$sd21 > maxsd) {
warnings.t1.sequential[[2]] <- paste("The standard deviation must be between ", minsd, " and ", maxsd, ".", sep = "")
param.b2 <- 1
} else {
param.b2 <- input$sd21
}
if (any(sapply(warnings.t1.sequential, is.null) == FALSE)){
output$warningsT1 <- renderUI(HTML(paste("<p>", warnings.t1.sequential[!(sapply(warnings.t1.sequential, is.null))], "</p><p>")))
output$alertT1 <- 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("fakerunT1"); shinyjs::show("runT1")
return()
}
################
# We fixed the mean and the sd earlier at the top. Because we're using the Normal distribution,
# the mean is the first parameter and the standard deviation the second.
param.a1 <- mu1
param.a2 <- mu2
N <- n1 + n2 # Total sample size
# Vectors to store p-values of eq. variances and eq. means
pval_teq <- pval_tuneq <- pval_var <- numeric(nrep)
################ GENERATE DATA ################
data1 <- matrix(rnorm(n1*nrep, param.a1, param.b1),
nrow = n1, ncol = nrep)
data2 <- matrix(rnorm(n2*nrep, param.a2, param.b2),
nrow = n2, ncol = nrep)
################ CALCULATE STUFF ################
# Sample means and variances
samplemeans1 <- colMeans(data1)
samplemeans2 <- colMeans(data2)
sampleunbvariance1 <- apply(data1, 2, var)
sampleunbvariance2 <- apply(data2, 2, var)
# T-test
# Equal variances
pval_teq <- test.student(samplemeans1, samplemeans2,
sampleunbvariance1, sampleunbvariance2,
n1, n2)
# Unequal variances
pval_tuneq <- test.welch(samplemeans1, samplemeans2,
sampleunbvariance1, sampleunbvariance2,
n1, n2)
# Test of equality of variances
if(input$whichVar1 == "F-test"){
pval_var <- test.f(sampleunbvariance1, sampleunbvariance2, n1, n2) # F-test
} else {
pval_var <- test.levene(data1, data2, samplemeans1, samplemeans2, n1, n2)
}
# Conditional p-values
pval_teq_cond <- pval_teq[pval_var >= alphanom] # Student's t-test
pval_tuneq_cond <- pval_tuneq[pval_var < alphanom] # Welch's test
# Outputs
observe({
if(input$ttestpval1 == "Both") {
colores <- c("indianred", "lightslateblue")
pval_t <- c(pval_tuneq_cond)
pval_t2 <- c(pval_teq_cond, pval_tuneq_cond)
pval_t.uncond <- NA
output$plott1 <- renderPlot({
plot.histograms.ttest(results = pval_t, results2 = pval_t2,
nrep = nrep, alpha = alphanom, default = F, colores = colores)
})
} else if (input$ttestpval1 == "Welch's test"){
colores <- c("lightslateblue", "#8470FF40")
pval_t <- pval_tuneq_cond
pval_t.uncond <- pval_tuneq
pval_t2 <- NA
output$plott1 <- renderPlot({
plot.histograms.ttest.welch(results = pval_tuneq_cond, results0 = pval_tuneq,
nrep = nrep, alpha = alphanom, colores = colores)
})
} else{
pval_t <- pval_teq_cond
pval_t.uncond <- pval_teq
pval_t2 <- NA
colores <- c("indianred", "#CD5C5C40")
output$plott1 <- renderPlot({
plot.histograms.ttest.students(results = pval_teq_cond, results0 = pval_teq,
nrep = nrep, alpha = alphanom, colores = colores)
})
}
})
output$histogramst1 <- renderPlot({
plot.histograms.var(results = pval_teq, results2 = pval_tuneq, nrep = nrep, alpha = alphanom, default = F)
})
output$histogramsv1 <- renderPlot({
plot.histograms.pvalv(results = pval_var, nrep = nrep, alpha = alphanom, default = F)
})
output$plotDist2 <- renderPlot({
plot.dist(dist1 = 1, dist2 = 1,
parama1 = param.a1, parama2 = param.a2,
paramb1 = param.b1, paramb2 = param.b2)
}, bg = "transparent")
# Finish
output$alertT1 <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
shinyjs::hide("fakerunT1"); shinyjs::show("runT1")
})
observe({
# Top right table
R1 <- rbind(c(input$sd21/input$sd11),
c(input$n21/input$n11))
rownames(R1) <- c("Standard deviation ratio (group 2 / group 1):",
"Sample-size ratio (group 2 / group 1):")
output$legend1 <- renderTable(R1, rownames = T, colnames = F, hover = T,
spacing = "xs", align = "l", width = "400px")
})
################################################################################
# NORMALITY #
################################################################################
observeEvent(input$runT2, ignoreNULL = T, {
shinyjs::hide("runT2"); shinyjs::show("fakerunT2")
n1 <- input$n12
n2 <- input$n22
warnings.t2.sequential <- list(NULL)
if (is.na(input$alphanom2) || input$alphanom2 < minalpha || input$alphanom2 > maxalpha) {
warnings.t2.sequential[[1]] <- paste("Probabilities must be between ", minalpha, " and ", maxalpha, ".", sep = "")
alphanom <- 0.05
} else {
alphanom <- input$alphanom2
}
if (any(sapply(warnings.t2.sequential, is.null) == FALSE)){
shinyjs::hide("fakerunT2"); shinyjs::show("runT2")
return()
}
##########
# Calculate parameter values depending on the mean and sd
# Group 1
param.b1 <- c(sd1, # Normal distribution
sqrt(3)*sd1+mu1, # Uniform distribution
sqrt( log( sd1^2/mu1^2+1 ) ), # Lognormal distribution
2, # Beta distribution
sd1/sqrt(2)) # Laplace distribution
param.a1 <- c(mu1, 2 * mu1 - param.b1[2], log(mu1) - param.b1[3]^2/2, 5, mu1)
# Group 2
param.b2 <- c(sd2, sqrt(3)*sd2+mu2, sqrt( log( sd2^2/mu2^2+1 ) ), 2, sd2/sqrt(2))
param.a2 <- c(mu2, 2 * mu2 - param.b2[2], log(mu2) - param.b2[3]^2/2, 5, mu2)
# Now select the parameters we want based on the selected distribution
# If dist == Normal, select the first set of parameters (param.a1[1], etc.)
# If dist == Uniform, select the second set of parameters (param.a1[2], etc.)
# If dist == Lognormal, select the third set of parameters (param.a1[3], etc.)
# Ditto for the other distributions...
# This is a way for me to avoid explicit if...else
index.dist1 <- which(all.dist == input$whichdist1)
index.dist2 <- which(all.dist == input$whichdist2)
# These are the final parameter values
param.a1 <- param.a1[index.dist1]
param.b1 <- param.b1[index.dist1]
param.a2 <- param.a2[index.dist2]
param.b2 <- param.b2[index.dist2]
################ USER INPUTS ################
N <- n1 + n2
pval_norm <- matrix(ncol = 2, nrow = nrep)
if(input$normBonferroni) {
alphanom.norm <- alphanom/2
} else {
alphanom.norm <- alphanom
}
################ GENERATE DATA ################
data1 <- matrix(get(all.rdistfun[index.dist1])(n1*nrep, param.a1, param.b1),
nrow = n1, ncol = nrep)
data2 <- matrix(get(all.rdistfun[index.dist2])(n2*nrep, param.a2, param.b2),
nrow = n2, ncol = nrep)
######## STANDARDIZE AND TRANSFORM IF NEEDED
# Only when using the beta distribution will we need to transform the scores
# Use the true mean and sd for fake standarization before transforming
if(index.dist1 == 4){
betamean <- param.a1/(param.a1+param.b1)
betasd <- sqrt((param.a1*param.b1) / ( (param.a1 + param.b1)^2 * (param.a1 + param.b1 + 1) ))
data1 <- ((data1 - betamean)/betasd) * sd1 + mu1
}
if(index.dist2 == 4){
betamean <- param.a2/(param.a2+param.b2)
betasd <- sqrt((param.a2*param.b2) / ( (param.a2 + param.b2)^2 * (param.a2 + param.b2 + 1) ))
data2 <- ((data2 - betamean)/betasd) * sd2 + mu2
}
################ CALCULATE STUFF ################
samplemeans1 <- colMeans(data1)
samplemeans2 <- colMeans(data2)
sampleunbvariance1 <- apply(data1, 2, var)
sampleunbvariance2 <- apply(data2, 2, var)
sk1 <- apply(data1, 2, A3)
sk2 <- apply(data2, 2, A3)
######## TEST
# Student's t-test + robust alternative
pval_teq <- test.student(samplemeans1, samplemeans2, sampleunbvariance1, sampleunbvariance2, n1, n2)
pval_robust <- test.robust.eq(samplemeans1, samplemeans2, sampleunbvariance1, sampleunbvariance2, n1, n2, sk1, sk2)
# Normality test
if(input$whichNorm2 == "Shapiro-Wilk"){
for(i in 1:nrep){
pval_norm[i,1] <- stats::shapiro.test(data1[,i])$p.value
pval_norm[i,2] <- stats::shapiro.test(data2[,i])$p.value
}
} else {
# Standardize
stdata1 <- t( (t(data1)-samplemeans1)/sqrt(sampleunbvariance1))
stdata2 <- t( (t(data2)-samplemeans2)/sqrt(sampleunbvariance2))
for(i in 1:nrep){
pval_norm[i,] <- test.chi(data1 = stdata1[,i], data2 = stdata2[,i])
}
}
# Conditional p-values
pval_teq_cond <- pval_teq[pval_norm[,1] >= alphanom.norm & pval_norm[,2] >= alphanom.norm]
pval_robust_cond <- pval_robust[pval_norm[,1] < alphanom.norm | pval_norm[,2] < alphanom.norm]
##########
# P values of the Normality test
output$plotNormPval <- renderPlot({
plot.histograms.normality(results = pval_norm, nrep = nrep, alpha = alphanom.norm, default = F,
alphagraph = alphanom)
})
observe({
if(input$ttestpval2 == "Both") {
colores <- c("indianred", "#808080")
output$plott2 <- renderPlot({
plot.histograms.ttest(results = pval_robust_cond, results2 = c(pval_teq_cond, pval_robust_cond),
nrep = nrep, alpha = alphanom, default = F, colores = colores)
})
} else if (input$ttestpval2 == "Cressie's t-test"){
colores <- c("#808080", "#80808040")
output$plott2 <- renderPlot({
plot.histograms.ttest.robust(results = pval_robust_cond, results0 = pval_robust,
nrep = nrep, alpha = alphanom, colores = colores)
})
} else{
colores <- c("indianred", "indianred4")
output$plott2 <- renderPlot({
plot.histograms.ttest.students(results = pval_teq_cond, results0 = pval_teq,
nrep = nrep, alpha = alphanom, colores = colores)
})
}
})
# P values of the t test (conditioned, left)
# output$plott2 <- renderPlot({
# plot.histograms.ttest.norm(results = pval_teq_cond,
# results.uncond = pval_teq, results2 = NA,
# nrep = nrep, alpha = alphanom, colores = c("indianred1", "indianred4"))
# })
# P values of the t test (unconditioned, right)
output$histogramst2 <- renderPlot({
colores1 <- c("indianred", "indianred")
colores2 <- c("#808080", "#808080")
plot.histograms.norm(results = pval_teq, results2 = pval_robust,
nrep = nrep, alpha = alphanom, default = F,
colores1 = colores1, colores2 = colores2)
})
# output$histogramst2 <- renderPlot({
# plot.histograms.ttest(results = pval_teq, results2 = NA,
# nrep = nrep, alpha = alphanom, colores = c("indianred1", "indianred4"))
# })
# Distribution plot (bottom left)
output$plotDist <- renderPlot({
plot.dist(dist1 = index.dist1, dist2 = index.dist2,
parama1 = param.a1, parama2 = param.a2,
paramb1 = param.b1, paramb2 = param.b2)
}, bg = "transparent")
##########
output$alertT2 <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
shinyjs::hide("fakerunT2"); shinyjs::show("runT2")
})
observe({
# Top right table
R1 <- rbind(c(input$n22/input$n12))
rownames(R1) <- c("Sample-size ratio (group 2 / group 1):")
output$legend2 <- renderTable(R1, rownames = T, colnames = F, hover = T,
spacing = "xs", align = "l", width = "400px")
})
################################################################################
# BOTH #
################################################################################
upperb <- NULL
################################ SEQUENTIAL DESIGN ############################
observeEvent(input$runT, ignoreNULL = T, {
n1 <- input$n1
n2 <- input$n2
warnings.t.sequential <- list(NULL, NULL)
shinyjs::hide("runT"); shinyjs::show("fakerunT")
if (is.na(input$alphanom) || input$alphanom < minalpha || input$alphanom > maxalpha) {
warnings.t.sequential[[1]] <- paste("Probabilities must be between ", minalpha, " and ", maxalpha, ".", sep = "")
alphanom <- 0.05
} else {
alphanom <- input$alphanom
}
if (is.na(input$sd1) || input$sd1 < minsd || input$sd1 > maxsd) {
warnings.t.sequential[[2]] <- paste("The standard deviation must be between ", minsd, " and ", maxsd, ".", sep = "")
sd1 <- 1
} else {
sd1 <- input$sd1
}
if (is.na(input$sd2) || input$sd2 < minsd || input$sd2 > maxsd) {
warnings.t.sequential[[2]] <- paste("The standard deviation must be between ", minsd, " and ", maxsd, ".", sep = "")
sd2 <- 1
} else {
sd2 <- input$sd2
}
if (any(sapply(warnings.t.sequential, is.null) == FALSE)){
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()
}
################ USER INPUTS ################
if(input$normBonferroni2){
alphanom.norm <- alphanom/2
}else{
alphanom.norm <- alphanom
}
conditioned.var <- T # If means is conditioned or not
conditioned.norm <- conditioned.var
N <- n1 + n2
pval_norm <- matrix(ncol = 2, nrow = nrep)
# Calculate parameter values depending on the mean and sd
# Group 1
param.b1 <- c(sd1, # Normal distribution
sqrt(3)*sd1+mu1, # Uniform distribution
sqrt( log( sd1^2/mu1^2+1 ) ), # Lognormal distribution
2, # Beta distribution
sd1/sqrt(2)) # Laplace distribution
param.a1 <- c(mu1,
2 * mu1 - param.b1[2], ###OJO### mu1 - sqrt(3)*sd1
log(mu1) - param.b1[3]^2/2,
5,
mu1)
# Group 2
param.b2 <- c(sd2,
sqrt(3)*sd2+mu2,
sqrt( log( sd2^2/mu2^2+1 ) ),
2,
sd2/sqrt(2))
param.a2 <- c(mu2,
2 * mu2 - param.b2[2],
log(mu2) - param.b2[3]^2/2,
5,
mu2)
index.dist1 <- which(all.dist == input$dist1)
index.dist2 <- which(all.dist == input$dist2)
# These are the final parameter values
param.a1 <- param.a1[index.dist1]
param.b1 <- param.b1[index.dist1]
param.a2 <- param.a2[index.dist2]
param.b2 <- param.b2[index.dist2]
################ GENERATE DATA ################
data1 <- matrix(get(all.rdistfun[index.dist1])(n1*nrep, param.a1, param.b1),
nrow = n1, ncol = nrep)
data2 <- matrix(get(all.rdistfun[index.dist2])(n2*nrep, param.a2, param.b2),
nrow = n2, ncol = nrep)
# print(sd(data1))
######## STANDARDIZE AND TRANSFORM IF NEEDED
# Only when using the beta distribution will we need to transform the scores
# Use the true mean and sd for fake standarization before transforming
if(index.dist1 == 4){
betamean <- param.a1/(param.a1+param.b1)
betasd <- sqrt((param.a1*param.b1) / ( (param.a1 + param.b1)^2 * (param.a1 + param.b1 + 1) ))
data1 <- ((data1 - betamean)/betasd) * sd1 + mu1
}
if(index.dist2 == 4){
betamean <- param.a2/(param.a2+param.b2)
betasd <- sqrt((param.a2*param.b2) / ( (param.a2 + param.b2)^2 * (param.a2 + param.b2 + 1) ))
data2 <- ((data2 - betamean)/betasd) * sd2 + mu2
}
################ CALCULATE STUFF ################
samplemeans1 <- colMeans(data1)
samplemeans2 <- colMeans(data2)
sampleunbvariance1 <- apply(data1, 2, var)
sampleunbvariance2 <- apply(data2, 2, var)
sk1 <- apply(data1, 2, A3)
sk2 <- apply(data2, 2, A3)
################ TEST MEANS ################
# T-test
# Equal variances
pval_teq <- test.student(samplemeans1, samplemeans2,
sampleunbvariance1, sampleunbvariance2,
n1, n2)
# Unequal variances
pval_tuneq <- test.welch(samplemeans1, samplemeans2,
sampleunbvariance1, sampleunbvariance2,
n1, n2)
# Robust, unequal variances
pval_robust <- test.robust.uneq(samplemeans1, samplemeans2, sampleunbvariance1, sampleunbvariance2, n1, n2, sk1, sk2)
################ TEST VARIANCES ################
if(input$whichVar == "F-test"){
pval_var <- test.f(sampleunbvariance1, sampleunbvariance2, n1, n2) # F-test
} else {
pval_var <- test.levene(data1, data2, samplemeans1, samplemeans2, n1, n2)
}
################ TEST NORMALITY ################
# Only do this if required because it takes a long time
if(conditioned.norm){
if(input$whichNorm == "Shapiro-Wilk"){
for(i in 1:nrep){
pval_norm[i,1] <- stats::shapiro.test(data1[,i])$p.value
pval_norm[i,2] <- stats::shapiro.test(data2[,i])$p.value
}
} else {
# Standardize
stdata1 <- t( (t(data1)-samplemeans1)/sqrt(sampleunbvariance1))
stdata2 <- t( (t(data2)-samplemeans2)/sqrt(sampleunbvariance2))
for(i in 1:nrep){
pval_norm[i,] <- test.chi(data1 = stdata1[,i], data2 = stdata2[,i])
}
}
}
############### CALCULATE CONDITIONAL PVALUES ###############
pval_teq_cond <- pval_teq[pval_norm[,1] >= alphanom.norm & pval_norm[,2] >= alphanom.norm & pval_var >= alphanom]
pval_tuneq_cond <- pval_tuneq[pval_norm[,1] >= alphanom.norm & pval_norm[,2] >= alphanom.norm & pval_var < alphanom]
pval_robust_cond <- pval_robust[pval_norm[,1] < alphanom.norm | pval_norm[,2] < alphanom.norm]
pval_var_cond <- pval_var[pval_norm[,1] >= alphanom.norm & pval_norm[,2] >= alphanom.norm]
############### PLOT RESULTS ###############
observe({
if(input$ttestpval3 == "All") {
colores <- c("indianred", "#808080")
output$plott <- renderPlot({
plot.histograms.ttest.norm(results = pval_tuneq_cond, results2 = c(pval_teq_cond, pval_tuneq_cond, pval_robust_cond),
results3 = pval_robust_cond,
nrep = nrep, alpha = alphanom, colores = c("indianred3", "firebrick1"))
})
} else if (input$ttestpval3 == "Cressie's t-test"){
colores <- c("#000080", "#00008040")
output$plott <- renderPlot({
plot.histograms.ttest.robust(results = pval_robust_cond, results0 = pval_robust,
nrep = nrep, alpha = alphanom, colores = colores)
})
} else if(input$ttestpval3 == "Student's t-test"){
colores <- c("indianred", "indianred4")
output$plott <- renderPlot({
plot.histograms.ttest.students(results = pval_teq_cond, results0 = pval_teq,
nrep = nrep, alpha = alphanom, colores = colores)
})
} else{
colores <- c("lightslateblue", "#8470FF40")
output$plott <- renderPlot({
plot.histograms.ttest.welch(results = pval_tuneq_cond, results0 = pval_tuneq,
nrep = nrep, alpha = alphanom, colores = colores)
})
}
})
output$histogramst <- renderPlot({
plot.histograms.var(results = pval_teq, results2 = pval_tuneq, nrep = nrep, alpha = alphanom, default = F)
})
output$histogramst.r <- renderPlot({
plot.histograms.rob(results = pval_robust, nrep = nrep, alpha = alphanom, default = F)
})
output$histograms.norm <- renderPlot({
plot.histograms.normality(results = pval_norm, nrep = nrep, alpha = alphanom.norm, default = F,
alphagraph = alphanom)
})
output$histograms.var <- renderPlot({
plot.histograms.pvalv(results = pval_var_cond, results0 = pval_var, nrep = nrep, alpha = alphanom, default = F)
})
output$plotDist3 <- renderPlot({
plot.dist(dist1 = index.dist1, dist2 = index.dist2,
parama1 = param.a1, parama2 = param.a2,
paramb1 = param.b1, paramb2 = param.b2, sds1 = isolate(input$sd1), sds2 = isolate(input$sd2) )
}, bg = "transparent")
output$alertT <- renderUI(HTML('<script> sweetAlert(\'Simulation finished!\',\' \',\'success\') </script>'))
shinyjs::hide("fakerunT"); shinyjs::show("runT")
})
observe({
# Top right table
R1 <- rbind(c(input$sd2/input$sd1),
c(input$n2/input$n1))
rownames(R1) <- c("Standard deviation ratio (group 2 / group 1):",
"Sample-size ratio (group 2 / group 1):")
output$legend0 <- renderTable(R1, rownames = T, colnames = F, hover = T,
spacing = "xs", align = "l", width = "400px")
})
}
#####################################################################
# ShinyApp 2019: Conditional testing (Eq. Var., Normality, t-test) #
# Universidad Complutense de Madrid #
#####################################################################
rm(list = ls())
library('shiny')
library('shinyBS')
library('shinyjs')
library('sweetalertR') # install with devtools::install_github("timelyportfolio/sweetalertR")
library('htmltools')
source("plotfun.R"); source("calcfun.R"); source("histfun.R")
ui <- fluidPage(theme = "bootstrap.css",
shinyjs::useShinyjs(),
includeScript("../../../Matomo-qhelp.js"),
navbarPage(HTML("CONDITIONAL TESTING"),
################################################################################
# VARIANCE #
################################################################################
tabPanel("Homoscedasticity",
useShinyjs(),
tags$p(),
tags$head(tags$style(HTML('.modal-sm {
width: 650px;
}'))),
h1("Test for two means: Equal-variances assumption", align = "center"),
br(),
sidebarLayout(
sidebarPanel(width = 4,
fluidRow(column(width = 6,
selectInput(inputId = "whichVar1", label = HTML("Which test of</br>homoscedasticity?"), choices = c("F-test", "Levene's"))),
column(width = 6,
numericInput(inputId = "alphanom1", label = HTML("Significance</br>level"), value = 0.05,
min = 0.0001, max = 0.9999))),
fluidRow(column(width = 6,
HTML("<p> <center> <b> GROUP 1 </br> (Normal distribution) </b> </center> </p>")),
column(width = 6,
HTML("<p> <center> <b> GROUP 2 </br> (Normal distribution) </b> </center> </p>"))),
fluidRow(
column(width = 6,
numericInput(inputId = "sd11", label = "Standard deviation", value = 1, min = 0.01, max = 100, step = 0.01)),
column(width = 6,
numericInput(inputId = "sd21", label = "Standard deviation", value = 1.5, min = 0.01, max = 100, step = 0.01)
)
),
# Sample sizes
fluidRow(
column(width = 6,
sliderInput(inputId = "n11", label = HTML("Sample size"), value = 20, min = 10, max = 100, step = 5)),
column(width = 6,
sliderInput(inputId = "n21", label = HTML('Sample size'), value = 30, min = 10, max = 100, step = 5)
)),
fluidRow(tableOutput("legend1")),
# last line
fluidRow(
column(width = 1, offset = 0,
actionButton("infoT1", label = "", icon = icon("info-circle"),
style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
),
column(width = 1, offset = 1,
actionButton("errorPlot1B", label = "", icon = icon("line-chart"),
style="color: #fff; background-color: #337ab7; border-color: #2e6da4")),
column(width = 1, offset = 1,
actionButton("warnT1", label = "", icon = icon("exclamation-triangle"),
style="color: #fff; background-color: #FF8000; border-color: #FF8000"),
bsTooltip("warnT1", "Check for warnings (recommended)", "right", trigger = "hover", options = list(container = "body"))
),
column(width = 2, offset = 1,
HTML('
<button id="runT1" type="button" class="btn btn-primary action-button">
<i class="glyphicon glyphicon-triangle-right"></i>
Run simulation
</button>
'),
HTML('
<button id="fakerunT1" 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
)
),
fluidRow(plotOutput(outputId = "plotDist2", height = "300px") )
),
mainPanel(
fluidRow(column(width = 6, HTML("<p> <center> <b> <h2> Conditional </h2> </b></center></p>")),
column(width = 6, HTML("<p><center> <b><h2> Unconditional </h2></b> </center></p>"))),
hr(),
fluidRow(column(width = 2, offset = 2,
selectInput("ttestpval1",
label = HTML("Plot <i>p</i>-values of:"),
choices = c("Student's t-test", "Welch's test", "Both"),
selected = "Both"))),
fluidRow(
column(width = 6,
plotOutput(outputId = "plott1", height = "500px")),
column(width = 6,
plotOutput(outputId = "histogramst1", height = "500px")),
fluidRow(column(width = 6, offset = 0,
plotOutput("histogramsv1", height = "500px"))),
bsModal("modalT1", "Warnings", "warnT1", size = "large", htmlOutput("warningsT1")),
bsModal("modalInfoT1", "Test for two means: Equal-variances assumptions", "infoT1", size = "large", htmlOutput("informationT1"))
,bsModal("errorPlot1", "Conditional test for two means: Equal-variances assumption", "errorPlot1B", size = "large",
plotOutput("plotErrorPlot1", height = 1000),
fluidRow(column(width = 12,
HTML('
</br> </br> </br> </br>
<p> Illustration of the functioning of Student's and Welch's <i>t</i>‐tests used in conditional and
unconditional testing in different scenarios (homoscedasticity vs. heteroscedasticity with
a variety of sample-size ratios and standard deviation ratios).
In this tab, the normality assumption is always satisfied.
</p>
<p>
All panels show the empirical type‐I error rates of Welch's (blue) and Student's (red) <i>t</i>‐tests
for two independent means across 50,000 replicates. For each color, triangles and circles
respectively correspond to the conditional and unconditional approaches. Under the conditional approach,
a homoscedasticity test (<i>F</i>‐test or Levene's, depending on the user's selection through the app inputs) was carried out first.
If the null hypothesis of equality of variances was rejected, then a Welch's test was performed on the means;
otherwise, a Student's <i>t</i>‐test was conducted. In the unconditional approach, both tests on means were performed
without any prior checks on assumptions. The dashed black line marks the nominal alpha level,
which in this window remains fixed at 0.05 regardless of the significance level chosen by the user.
The arrows in the top panels mark the conditions used to produce the bottom panels
(top‐left arrow for bottom‐right panel and top‐right arrow for bottom‐left panel).</p>
<p>
Panels on <b>the left column</b> show type‐I error rates as a function of the ratio between the sample size
of both groups when the two standard deviations are equal (top left) and when they differ to a fixed ratio of
0.8 (bottom left). When standard deviations are equal (the homoscedasticity assumption holds),
the conditional approach renders the same results as unconditional testing.
Note that the symbols of the conditional Welch's test (blue triangles) do not always lie exactly over the nominal significance
level because this test is only conducted approximately 5% of the time (i.e., around 2,500 replicates).
When the standard deviations differ, only the unconditional Welch's <i>t</i>‐test (blue circles)
renders empirical rejection rates at the nominal alpha level regardless of the sample-size ratio.
Unsurprisingly, empirical rejection rates yielded by the Student's <i>t</i>‐test depart from the nominal alpha level
when it is used unconditionally. However, the implementation of a two‐step conditional approach does not fix the problem and
both Student's and Welch's tests produce rejection rates that depart from the theoretical value of 5%.
</p>
<p>
Panels on <b>the right column</b> show type‐I error rates as a function of the ratio between true standard deviations
when sample sizes are equal (top right) and unequal (bottom right,
corresponding to a sample-size ratio of 1.4). With equal sample sizes, both Student's and Welch's
unconditional <i>t</i>‐tests perform adequately even if the equal‐variances assumption is violated,
but empirical error rates of the conditional approach steer away from the nominal alpha when the standard deviations differ.
When sample sizes are also different, only Welch's unconditional test (blue circles) performs as expected in terms of its type‐I error rates.
</p>
<p>
Taking into account all conditions, only Welch's non‐conditional test is robust for heteroscedasticity and unequal sample sizes,
which makes it the preferred option as long as the normality assumption is satisfied.
</p>
'))))
,htmlOutput("alertT1")
,sweetalert()
)
)
)),
################################################################################
# NORMALITY #
################################################################################
tabPanel("Normality",
useShinyjs(),
tags$p(),
tags$head(tags$style(HTML('.modal-sm {
width: 650px;
}'))),
h1("Test for two means: Normality assumption", align = "center"),
br(),
sidebarLayout(
sidebarPanel(width = 4,
fluidRow(column(width = 6,
selectInput(inputId = "whichNorm2", label = "Which test of normality?", choices = c("Chi-square", "Shapiro-Wilk"), selected = "Shapiro-Wilk")),
column(width = 6,
numericInput(inputId = "alphanom2", label = "Significance level", value = 0.05,
min = 0.0001, max = 0.9999))),
fluidRow(column(width = 12,
checkboxInput(inputId = "normBonferroni", label = "Correct for multiple comparisons? (normality test)", value = T))),
bsTooltip(id = "normBonferroni", "Note that the test of normality involves testing groups 1 and 2",
"right", trigger = "hover"),
fluidRow(column(width = 6,
HTML("<p> <center> <b> GROUP 1 </b> </center> </p>")),
column(width = 6,
HTML("<p> <center> <b> GROUP 2 </b> </center> </p>"))),
fluidRow(column(width = 6,
selectInput(inputId = "whichdist1",
label = "Distribution",
choices = c("Normal", "Uniform", "Lognormal", "Negatively skewed (Beta)", "Laplace"),
selected = "Normal")),
column(width = 6,
selectInput(inputId = "whichdist2",
label = "Distribution", choices = c("Normal", "Uniform", "Lognormal", "Negatively skewed (Beta)", "Laplace"),
selected = "Lognormal"))),
# Sample sizes
fluidRow(
column(width = 6,
sliderInput(inputId = "n12", label = HTML("Sample size"), value = 50, min = 10, max = 190, step = 5)),
column(width = 6,
sliderInput(inputId = "n22", label = HTML('Sample size'), value = 50, min = 10, max = 190, step = 5)
)),
fluidRow(
tableOutput("legend2")),
# 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("errorplotNormal", label = "", icon = icon("line-chart"),
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>
')
# fa fa-spinner fa-spin
# glyphicon glyphicon-refresh fast-right-spinner
)
),
fluidRow(plotOutput(outputId = "plotDist", height = "300px") )
),
mainPanel(
fluidRow(column(width = 6, HTML("<p> <center> <b> <h2> Conditional </h2> </b></center></p>")),
column(width = 6, HTML("<p><center> <b><h2> Unconditional </h2></b> </center></p>"))),
hr(),
fluidRow(column(width = 2, offset = 2,
selectInput("ttestpval2",
label = HTML("Plot <i>p</i>-values of:"),
choices = c("Student's t-test", "Cressie's t-test", "Both"),
selected = "Both"))),
fluidRow(
column(width = 6,
plotOutput(outputId = "plott2", height = "500px")
),
column(width = 6, offset = 0,
plotOutput(outputId = "histogramst2", height = "500px")),
bsModal("modalT2", "Warnings", "warnT2", size = "large", htmlOutput("warningsT2")),
bsModal("modalInfoT2", "Test for two means: Normality assumption", "infoT2", size = "large", htmlOutput("informationT2"))
,bsModal("ploterrorNormalB", "Conditional test for two means: Normality assumption", "errorplotNormal", size = "large",
plotOutput("ploterrorNormal", height = 1000),
fluidRow(column(width = 12,
HTML('
</br> </br> </br> </br>
<p>
Illustration of the functioning of Student's and Cressie's <i>t</i>‐tests used
in conditional and unconditional testing
when the assumption of normality is partially violated (the variable is always
normally distributed in the first group and it departs from normality in the second).
In this tab the equal‐variance assumption always holds.
</p>
<p>
All panels show the empirical type‐I error rates of Student's and Cressie's <i>t</i>‐tests
for two independent means across 50,000 replicates.
Triangles show results for the conditional approach, whereas circles stand for the unconditional approach.
Red corresponds to Student's results and grey represents Cressie's test.
In the conditional approach, Student's <i>t</i>-test was conducted only if normality was not rejected (either with a chi‐square or a Shapiro‐Wilk test,
depending on the user's selection through the app inputs) in both samples; otherwise Cressie's <i>t</i>-test was carried out.
In the unconditional approach, both tests on means were performed without any prior checks on assumptions.
The dashed black line marks the nominal alpha level, which in this window remains fixed at 0.05 regardless of the significance level
chosen by the user.
A correction for multiple comparisons has been performed in the test of normality
(click the information button for further details).</p>
<p>
Panels on the <b>top row</b> show type‐I error
rates as a function of the ratio between sample sizes when the variable is not normal but still symmetric
in the second group: uniform for platykurtosis (top‐left) and Laplace for leptokurtosis (top right). Panels
on the <b>bottom row</b> show results for skewed variables in the second group (lognormal for a strongly
positively skewed distribution on the bottom‐left and beta with parameters chosen to render a moderately negatively skewed
distribution on the bottom‐right).</p>
<p>
In all cases, unconditional approaches render empirical type-I error rates similar to
their nominal rates with both Student's and Cressie's <i>t</i>-tests. When a conditional
approach is followed, empirical rates notably depart from their nominal rates when the distribution
of the variable in the second group is uniform or lognormal.
</p>
<p>
Taking into account all conditions, Student's unconditional <i>t</i>‐test is resistant to departures of normality
(provided that variances are equal).
Cressie's <i>t</i>-test,
which is presented as an alternative that is particularly robust to skewed distributions,
does not outperform Student's <i>t</i>‐test in any one of these conditions,
and neither does it provide any meaningful advantage.
In any case, it is inadvisable to follow a conditional approach,
as it has been shown to alter the type‐I error rate.</p>
'))))
,htmlOutput("alertT2")
,sweetalert()
),
fluidRow(column(width = 6,
plotOutput(outputId = "plotNormPval", height = "500px")
),
column(width = 6,
plotOutput(outputId = "plotRobustuncond", height = "500px")
))
)
)),
################################################################################
# BOTH #
################################################################################
tabPanel("Both",
useShinyjs(),
tags$p(),
tags$head(tags$style(HTML('.modal-sm {
width: 650px;
}'))),
h1("Test for two means: Equal-variances and Normality assumptions", align = "center"),
br(),
sidebarLayout(
sidebarPanel(width = 4,
fluidRow(column(width = 6,
selectInput(inputId = "whichNorm", label = HTML("Which test of</br>normality?"), choices = c("Chi-square", "Shapiro-Wilk"), selected = "Shapiro-Wilk")),
column(width = 6,
selectInput(inputId = "whichVar", label = HTML("Which test of</br>homoscedasticity?"), choices = c("F-test", "Levene's")))),
fluidRow(column(width = 6,
numericInput(inputId = "alphanom", label = "Significance level", value = 0.05,
min = 0.0001, max = 0.9999)),
column(width = 6,
checkboxInput(inputId = "normBonferroni2", label = "Correct for multiple comparisons? (normality test)", value = T))),
fluidRow(column(width = 6,
HTML("<p> <center> <b> GROUP 1 </b> <c/enter> </p>")),
column(width = 6,
HTML("<p> <center> <b> GROUP 2 </b> </center> </p>")))
,fluidRow(column(width = 6,
selectInput(inputId = "dist1", label = "Distribution", choices = c("Normal", "Uniform",
"Lognormal", "Negatively skewed (Beta)", "Laplace"),
selected = "Normal")),
column(width = 6,
selectInput(inputId = "dist2", label = "Distribution", choices = c("Normal",
"Uniform",
"Lognormal", "Negatively skewed (Beta)", "Laplace"),
selected = "Uniform"))
)
########### DISTRIBUTION PARAMETERS
,fluidRow(
column(width = 6,
numericInput(inputId = "sd1", label = "Standard deviation", value = 1, min = 0.01, max = 100, step = 0.01)),
column(width = 6,
numericInput(inputId = "sd2", label = "Standard deviation", value = 1.5, min = 0.01, max = 100, step = 0.01)
)
),
########## SAMPLE SIZES
fluidRow(
column(width = 6,
sliderInput(inputId = "n1", label = HTML("Sample size"), value = 50, min = 10, max = 190, step = 5)),
column(width = 6,
sliderInput(inputId = "n2", label = HTML('Sample size'), value = 30, min = 10, max = 190, step = 5)
)),
fluidRow(tableOutput("legend0")),
# 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("chiPlot", 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
)
),
fluidRow(plotOutput(outputId = "plotDist3", height = "300px") )
##
),
mainPanel(
fluidRow(column(width = 6, HTML("<p> <center> <b> <h2> Conditional </h2> </b></center></p>")),
column(width = 6, HTML("<p><center> <b><h2> Unconditional </h2></b> </center></p>"))),
hr(),
fluidRow(column(width = 2, offset = 2,
selectInput("ttestpval3",
label = HTML("Plot <i>p</i>-values of:"),
choices = c("Student's t-test", "Welch's t-test", "Cressie's t-test", "All"),
selected = "All"))),
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", "Test for two means: Equal-variances and Normality assumptions", "infoT", size = "large", htmlOutput("informationT"))
,bsModal("histchiF", "Test for two means: Equal-variances and Normality assumptions", "chiPlot", size = "large", fluidRow(column(width = 6,
plotOutput("histograms.norm", height = "500px")),
column(width = 6,
plotOutput("histograms.var", height = "500px"))),
fluidRow(column(width = 12,
HTML('
</br></br>
<p>
<b>Left</b>. Empirical distribution of <i>p</i>-values for the test of normality (either,
Shapiro-Wilk or chi-square depending on the user's input) for groups #1 (45° patterned
bars, bottom) and #2 (-45° patterned bars, top). Individual rejection rates are shown separately
(top right legend) for both groups whereas the combined rejection and non-rejection rates are printed above the arrows.
Only combined rejection rates are used in the conditional approach, as they require rejection of normality
in at least one group.
</p>
<p>
<b>Right</b>. Empirical distribution of <i>p</i>-values of the test of equality of variances
(either <i>F</i> or Levene's, depending on the user's input). Dark-green bars show results
for the conditional procedure where variances are tested only if normality was not previously
rejected for any group. Numeric labels over the arrows in the top left area correspond to the
proportions of null hypotheses about variances rejected and not rejected under this approach.
Light-green bars plotting results under the unconditional approach are added for reference.
</p>'))))
,htmlOutput("alertT")
,sweetalert()
),
fluidRow(column(width = 6),
column(width = 6,
plotOutput(outputId = "histogramst.r", height = 250)))
)
)
)
))
@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;
}