mirror of
https://github.com/paradoxxxzero/butterfly.git
synced 2026-05-26 07:08:08 +00:00
Package app (get rid of useless stuff)
This commit is contained in:
13
LICENSE
Normal file
13
LICENSE
Normal file
@@ -0,0 +1,13 @@
|
||||
wdb Copyright (C) 2012 Florian Mounier, Kozea
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
@@ -1,10 +1,29 @@
|
||||
# *-* coding: utf-8 *-*
|
||||
# This file is part of butterfly
|
||||
#
|
||||
# butterfly Copyright (C) 2014 Florian Mounier
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
__version__ = '1.0'
|
||||
|
||||
|
||||
import os
|
||||
import tornado.web
|
||||
import tornado.options
|
||||
import tornado.web
|
||||
from logging import getLogger
|
||||
|
||||
log = getLogger('wsterm')
|
||||
log = getLogger('butterfly')
|
||||
|
||||
application = tornado.web.Application(
|
||||
debug=tornado.options.options.debug,
|
||||
|
||||
@@ -1,3 +1,21 @@
|
||||
# *-* coding: utf-8 *-*
|
||||
# This file is part of butterfly
|
||||
#
|
||||
# butterfly Copyright (C) 2014 Florian Mounier
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import pwd
|
||||
import pty
|
||||
import os
|
||||
import io
|
||||
@@ -13,13 +31,13 @@ from app import url, Route
|
||||
ioloop = tornado.ioloop.IOLoop.instance()
|
||||
|
||||
|
||||
@url(r'/(?:(wd/.+))?')
|
||||
@url(r'/(?:user/(.+))?/?(?:wd/(.+))?')
|
||||
class Index(Route):
|
||||
def get(self, path):
|
||||
def get(self, user, path):
|
||||
return self.render('index.html')
|
||||
|
||||
|
||||
@url(r'/ws(?:(/.+))?')
|
||||
@url(r'/ws(?:/user/([^/]+))?/?(?:/wd/(.+))?')
|
||||
class TermWebSocket(Route, tornado.websocket.WebSocketHandler):
|
||||
|
||||
def pty(self):
|
||||
@@ -30,20 +48,39 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler):
|
||||
os.closerange(3, 256)
|
||||
except:
|
||||
pass
|
||||
env = os.environ
|
||||
|
||||
env = {}
|
||||
env["TERM"] = "xterm-256color"
|
||||
env["COLORTERM"] = "wsterm"
|
||||
command = os.getenv('SHELL')
|
||||
env["COLORTERM"] = "butterfly"
|
||||
env["LOCATION"] = "http://%s:%d/" % (
|
||||
tornado.options.options.host, tornado.options.options.port)
|
||||
env["WSTERMDIR"] = os.getcwd()
|
||||
env["BUTTERFLY_DIR"] = os.getcwd()
|
||||
env["SHELL"] = self.pw.pw_shell or '/bin/sh'
|
||||
# env["PATH"] = os.path.abspath(os.path.join(
|
||||
# os.path.dirname(__file__), '..', 'bin'))
|
||||
try:
|
||||
os.chdir(self.path or self.pw.pw_dir)
|
||||
except:
|
||||
pass
|
||||
shell = tornado.options.options.command or self.pw.pw_shell
|
||||
args = ['-i', '-l']
|
||||
|
||||
env["SHELL"] = command
|
||||
env["PATH"] = "%s:%s" % (
|
||||
os.path.abspath(os.path.join(
|
||||
os.path.dirname(__file__), '..', 'bin')), env["PATH"])
|
||||
os.chdir(self.path or os.path.expanduser("~"))
|
||||
os.execvpe(command, [''], env)
|
||||
# All users are the same -> launch shell
|
||||
if self.is_local and (
|
||||
self.uid == self.pw.pw_uid and self.uid == os.getuid()):
|
||||
os.execvpe(shell, args, env)
|
||||
|
||||
if not (self.is_local and os.getuid() == 0 and
|
||||
self.uid == self.pw.pw_uid):
|
||||
# If user is not the same, get a password prompt
|
||||
os.setuid(self.uid)
|
||||
|
||||
if tornado.options.options.command:
|
||||
args.append('-s')
|
||||
args.append('%s' % tornado.options.options.command)
|
||||
args.append(self.pw.pw_name)
|
||||
print('Logging: %s@%s' % (self.pw.pw_name, self.bind))
|
||||
os.execvpe('/bin/su', args, env)
|
||||
else:
|
||||
self.log.debug('Adding handler')
|
||||
fcntl.fcntl(self.fd, fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
@@ -69,9 +106,35 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler):
|
||||
)
|
||||
ioloop.add_handler(self.fd, self.shell, ioloop.READ | ioloop.ERROR)
|
||||
|
||||
def open(self, path):
|
||||
self.log.info('Websocket opened')
|
||||
@property
|
||||
def is_local(self):
|
||||
return self.bind == '127.0.0.1'
|
||||
|
||||
@property
|
||||
def pw(self):
|
||||
if self.user:
|
||||
return pwd.getpwnam(self.user)
|
||||
|
||||
if self.uid and self.is_local:
|
||||
return pwd.getpwuid(self.uid)
|
||||
# ?? Returning first user
|
||||
return pwd.getpwuid(1000)
|
||||
|
||||
@property
|
||||
def uid(self):
|
||||
with open('/proc/net/tcp') as k:
|
||||
lines = k.readlines()
|
||||
for line in lines:
|
||||
# Look for local address with peer port
|
||||
if line.split()[1] == '0100007F:%X' % self.port:
|
||||
# We got the user
|
||||
return int(line.split()[7])
|
||||
|
||||
def open(self, user, path):
|
||||
self.bind, self.port = self.ws_connection.stream.socket.getpeername()
|
||||
self.log.info('Websocket opened for %s:%d' % (self.bind, self.port))
|
||||
self.set_nodelay(True)
|
||||
self.user = user.decode('utf-8') if user else None
|
||||
self.path = path
|
||||
self.pty()
|
||||
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
term = ws = null
|
||||
cols = rows = null
|
||||
$ = document.querySelectorAll.bind(document)
|
||||
|
||||
$ ->
|
||||
ws_url = 'ws://' + document.location.host + '/ws'
|
||||
if location.pathname.indexOf('/wd') == 0
|
||||
ws_url += location.pathname.slice 3
|
||||
ws = new WebSocket ws_url
|
||||
ws.onopen = ->
|
||||
ws_url = 'ws://' + document.location.host + '/ws' + location.pathname
|
||||
ws = new WebSocket ws_url
|
||||
ws.onopen = ->
|
||||
console.log "WebSocket open", arguments
|
||||
term = new Terminal(
|
||||
visualBell: 100
|
||||
@@ -19,37 +17,40 @@ $ ->
|
||||
term.on "title", (title) ->
|
||||
document.title = title
|
||||
|
||||
term.open $('main').get(0)
|
||||
$('.terminal').attr('style', '')
|
||||
$(window).trigger 'resize'
|
||||
term.open $('main')[0]
|
||||
$('.terminal')[0].style = ''
|
||||
resize()
|
||||
|
||||
|
||||
ws.onclose = ->
|
||||
ws.onclose = ->
|
||||
if term
|
||||
term.destroy()
|
||||
console.log "WebSocket closed", arguments
|
||||
open('','_self').close()
|
||||
|
||||
ws.onerror = -> console.log "WebSocket error", arguments
|
||||
ws.onmessage = (event) ->
|
||||
# setTimeout (term.write event.data), 1
|
||||
ws.onerror = -> console.log "WebSocket error", arguments
|
||||
ws.onmessage = (event) ->
|
||||
term.write event.data
|
||||
|
||||
$(window).resize ->
|
||||
$main = $('main')
|
||||
$termtest = $('<div>').addClass('terminal')
|
||||
$test = $('<div>').text('0123456789')
|
||||
$termtest.append($test)
|
||||
addEventListener 'resize', resize = ->
|
||||
main = $('main')[0]
|
||||
fake_term = document.createElement('div')
|
||||
fake_term.className = 'terminal test'
|
||||
fake_term_div = document.createElement('div')
|
||||
fake_term_line = document.createElement('span')
|
||||
fake_term_line.textContent = '0123456789'
|
||||
fake_term_div.appendChild(fake_term_line)
|
||||
fake_term.appendChild(fake_term_div)
|
||||
main.appendChild(fake_term)
|
||||
|
||||
$main.append($termtest)
|
||||
eh = $test.outerHeight()
|
||||
$test.css(display: 'inline')
|
||||
ew = $test.outerWidth() / 10
|
||||
$termtest.remove()
|
||||
w = $main.outerWidth()
|
||||
h = $main.outerHeight()
|
||||
cols = Math.floor(w / ew) - 1
|
||||
rows = Math.floor(h / eh)
|
||||
console.log "Computed #{cols} cols and #{rows} rows from main size #{w}, #{h} and div #{ew}, #{eh}"
|
||||
ew = fake_term_line.getBoundingClientRect().width
|
||||
eh = fake_term_div.getBoundingClientRect().height
|
||||
main.removeChild(fake_term)
|
||||
|
||||
main_bb = main.getBoundingClientRect()
|
||||
cols = Math.floor(10 * main_bb.width / ew) - 1
|
||||
rows = Math.floor(main_bb.height / eh)
|
||||
|
||||
console.log "Computed #{cols} cols and #{rows} rows from ", main_bb, ew, eh
|
||||
term.resize cols, rows
|
||||
ws.send "RS|#{cols},#{rows}"
|
||||
|
||||
9
app/static/javascripts/bootstrap.min.js
vendored
9
app/static/javascripts/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,18 +1,17 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
var cols, rows, term, ws;
|
||||
var $, cols, resize, rows, term, ws, ws_url;
|
||||
|
||||
term = ws = null;
|
||||
|
||||
cols = rows = null;
|
||||
|
||||
$(function() {
|
||||
var ws_url;
|
||||
ws_url = 'ws://' + document.location.host + '/ws';
|
||||
if (location.pathname.indexOf('/wd') === 0) {
|
||||
ws_url += location.pathname.slice(3);
|
||||
}
|
||||
ws = new WebSocket(ws_url);
|
||||
ws.onopen = function() {
|
||||
$ = document.querySelectorAll.bind(document);
|
||||
|
||||
ws_url = 'ws://' + document.location.host + '/ws' + location.pathname;
|
||||
|
||||
ws = new WebSocket(ws_url);
|
||||
|
||||
ws.onopen = function() {
|
||||
console.log("WebSocket open", arguments);
|
||||
term = new Terminal({
|
||||
visualBell: 100,
|
||||
@@ -25,42 +24,45 @@ $(function() {
|
||||
term.on("title", function(title) {
|
||||
return document.title = title;
|
||||
});
|
||||
term.open($('main').get(0));
|
||||
$('.terminal').attr('style', '');
|
||||
return $(window).trigger('resize');
|
||||
};
|
||||
ws.onclose = function() {
|
||||
term.open($('main')[0]);
|
||||
$('.terminal')[0].style = '';
|
||||
return resize();
|
||||
};
|
||||
|
||||
ws.onclose = function() {
|
||||
if (term) {
|
||||
term.destroy();
|
||||
}
|
||||
console.log("WebSocket closed", arguments);
|
||||
return open('', '_self').close();
|
||||
};
|
||||
ws.onerror = function() {
|
||||
};
|
||||
|
||||
ws.onerror = function() {
|
||||
return console.log("WebSocket error", arguments);
|
||||
};
|
||||
ws.onmessage = function(event) {
|
||||
};
|
||||
|
||||
ws.onmessage = function(event) {
|
||||
return term.write(event.data);
|
||||
};
|
||||
return $(window).resize(function() {
|
||||
var $main, $termtest, $test, eh, ew, h, w;
|
||||
$main = $('main');
|
||||
$termtest = $('<div>').addClass('terminal');
|
||||
$test = $('<div>').text('0123456789');
|
||||
$termtest.append($test);
|
||||
$main.append($termtest);
|
||||
eh = $test.outerHeight();
|
||||
$test.css({
|
||||
display: 'inline'
|
||||
});
|
||||
ew = $test.outerWidth() / 10;
|
||||
$termtest.remove();
|
||||
w = $main.outerWidth();
|
||||
h = $main.outerHeight();
|
||||
cols = Math.floor(w / ew) - 1;
|
||||
rows = Math.floor(h / eh);
|
||||
console.log("Computed " + cols + " cols and " + rows + " rows from main size " + w + ", " + h + " and div " + ew + ", " + eh);
|
||||
};
|
||||
|
||||
addEventListener('resize', resize = function() {
|
||||
var eh, ew, fake_term, fake_term_div, fake_term_line, main, main_bb;
|
||||
main = $('main')[0];
|
||||
fake_term = document.createElement('div');
|
||||
fake_term.className = 'terminal test';
|
||||
fake_term_div = document.createElement('div');
|
||||
fake_term_line = document.createElement('span');
|
||||
fake_term_line.textContent = '0123456789';
|
||||
fake_term_div.appendChild(fake_term_line);
|
||||
fake_term.appendChild(fake_term_div);
|
||||
main.appendChild(fake_term);
|
||||
ew = fake_term_line.getBoundingClientRect().width;
|
||||
eh = fake_term_div.getBoundingClientRect().height;
|
||||
main.removeChild(fake_term);
|
||||
main_bb = main.getBoundingClientRect();
|
||||
cols = Math.floor(10 * main_bb.width / ew) - 1;
|
||||
rows = Math.floor(main_bb.height / eh);
|
||||
console.log("Computed " + cols + " cols and " + rows + " rows from ", main_bb, ew, eh);
|
||||
term.resize(cols, rows);
|
||||
return ws.send("RS|" + cols + "," + rows);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
//
|
||||
// Alerts
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base styles
|
||||
// -------------------------
|
||||
|
||||
.alert
|
||||
padding: $alert-padding
|
||||
margin-bottom: $line-height-computed
|
||||
border: 1px solid transparent
|
||||
border-radius: $alert-border-radius
|
||||
// Headings for larger alerts
|
||||
h4
|
||||
margin-top: 0
|
||||
// Specified for the h4 to prevent conflicts of changing $headings-color
|
||||
color: inherit
|
||||
// Provide class for links that match alerts
|
||||
.alert-link
|
||||
font-weight: $alert-link-font-weight
|
||||
// Improve alignment and spacing of inner content
|
||||
> p,
|
||||
> ul
|
||||
margin-bottom: 0
|
||||
> p + p
|
||||
margin-top: 5px
|
||||
|
||||
// Dismissable alerts
|
||||
//
|
||||
// Expand the right padding and account for the close button's positioning.
|
||||
|
||||
.alert-dismissable
|
||||
padding-right: $alert-padding + 20
|
||||
// Adjust close link position
|
||||
.close
|
||||
position: relative
|
||||
top: -2px
|
||||
right: -21px
|
||||
color: inherit
|
||||
|
||||
// Alternate styles
|
||||
//
|
||||
// Generate contextual modifier classes for colorizing the alert.
|
||||
|
||||
.alert-success
|
||||
+alert-variant($alert-success-bg, $alert-success-border, $alert-success-text)
|
||||
|
||||
.alert-info
|
||||
+alert-variant($alert-info-bg, $alert-info-border, $alert-info-text)
|
||||
|
||||
.alert-warning
|
||||
+alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text)
|
||||
|
||||
.alert-danger
|
||||
+alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text)
|
||||
@@ -1,44 +0,0 @@
|
||||
//
|
||||
// Badges
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base classes
|
||||
.badge
|
||||
display: inline-block
|
||||
min-width: 10px
|
||||
padding: 3px 7px
|
||||
font-size: $font-size-small
|
||||
font-weight: $badge-font-weight
|
||||
color: $badge-color
|
||||
line-height: $badge-line-height
|
||||
vertical-align: baseline
|
||||
white-space: nowrap
|
||||
text-align: center
|
||||
background-color: $badge-bg
|
||||
border-radius: $badge-border-radius
|
||||
// Empty badges collapse automatically (not available in IE8)
|
||||
&:empty
|
||||
display: none
|
||||
|
||||
// Hover state, but only for links
|
||||
a.badge
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $badge-link-hover-color
|
||||
text-decoration: none
|
||||
cursor: pointer
|
||||
|
||||
// Quick fix for labels/badges in buttons
|
||||
.btn .badge
|
||||
position: relative
|
||||
top: -1px
|
||||
|
||||
// Account for counters in navs
|
||||
|
||||
a.list-group-item.active > .badge,
|
||||
.nav-pills > .active > a > .badge
|
||||
color: $badge-active-color
|
||||
background-color: $badge-active-bg
|
||||
|
||||
.nav-pills > li > a > .badge
|
||||
margin-left: 3px
|
||||
@@ -1,19 +0,0 @@
|
||||
//
|
||||
// Breadcrumbs
|
||||
// --------------------------------------------------
|
||||
|
||||
.breadcrumb
|
||||
padding: 8px 15px
|
||||
margin-bottom: $line-height-computed
|
||||
list-style: none
|
||||
background-color: $breadcrumb-bg
|
||||
border-radius: $border-radius-base
|
||||
> li
|
||||
display: inline-block
|
||||
+ li:before
|
||||
content: "#{$breadcrumb-separator}\00a0"
|
||||
// Unicode space added since inline-block means non-collapsing white-space
|
||||
padding: 0 5px
|
||||
color: $breadcrumb-color
|
||||
> .active
|
||||
color: $breadcrumb-active-color
|
||||
@@ -1,213 +0,0 @@
|
||||
//
|
||||
// Button groups
|
||||
// --------------------------------------------------
|
||||
|
||||
// Button carets
|
||||
//
|
||||
// Match the button text color to the arrow/caret for indicating dropdown-ness.
|
||||
|
||||
.caret
|
||||
.btn-default &
|
||||
border-top-color: $btn-default-color
|
||||
.btn-primary &,
|
||||
.btn-success &,
|
||||
.btn-warning &,
|
||||
.btn-danger &,
|
||||
.btn-info &
|
||||
border-top-color: #fff
|
||||
|
||||
.dropup
|
||||
.btn-default .caret
|
||||
border-bottom-color: $btn-default-color
|
||||
.btn-primary,
|
||||
.btn-success,
|
||||
.btn-warning,
|
||||
.btn-danger,
|
||||
.btn-info
|
||||
.caret
|
||||
border-bottom-color: #fff
|
||||
|
||||
// Make the div behave like a button
|
||||
|
||||
.btn-group,
|
||||
.btn-group-vertical
|
||||
position: relative
|
||||
display: inline-block
|
||||
vertical-align: middle
|
||||
// match .btn alignment given font-size hack above
|
||||
> .btn
|
||||
position: relative
|
||||
float: left
|
||||
// Bring the "active" button to the front
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active,
|
||||
&.active
|
||||
z-index: 2
|
||||
&:focus
|
||||
// Remove focus outline when dropdown JS adds it after closing the menu
|
||||
outline: none
|
||||
|
||||
// Prevent double borders when buttons are next to each other
|
||||
.btn-group
|
||||
.btn + .btn,
|
||||
.btn + .btn-group,
|
||||
.btn-group + .btn,
|
||||
.btn-group + .btn-group
|
||||
margin-left: -1px
|
||||
|
||||
// Optional: Group multiple button groups together for a toolbar
|
||||
.btn-toolbar
|
||||
+clearfix
|
||||
.btn-group
|
||||
float: left
|
||||
// Space out series of button groups
|
||||
> .btn,
|
||||
> .btn-group
|
||||
+ .btn,
|
||||
+ .btn-group
|
||||
margin-left: 5px
|
||||
|
||||
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle)
|
||||
border-radius: 0
|
||||
|
||||
// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
|
||||
.btn-group > .btn:first-child
|
||||
margin-left: 0
|
||||
&:not(:last-child):not(.dropdown-toggle)
|
||||
+border-right-radius(0)
|
||||
|
||||
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
|
||||
|
||||
.btn-group > .btn:last-child:not(:first-child),
|
||||
.btn-group > .dropdown-toggle:not(:first-child)
|
||||
+border-left-radius(0)
|
||||
|
||||
// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
|
||||
.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
|
||||
> .btn:last-child,
|
||||
> .dropdown-toggle
|
||||
+border-right-radius(0)
|
||||
|
||||
.btn-group > .btn-group:last-child > .btn:first-child
|
||||
+border-left-radius(0)
|
||||
|
||||
// On active and open, don't show outline
|
||||
|
||||
.btn-group .dropdown-toggle:active,
|
||||
.btn-group.open .dropdown-toggle
|
||||
outline: 0
|
||||
|
||||
// Sizing
|
||||
//
|
||||
// Remix the default button sizing classes into new ones for easier manipulation.
|
||||
|
||||
.btn-group-xs > .btn
|
||||
@extend .btn-xs
|
||||
|
||||
.btn-group-sm > .btn
|
||||
@extend .btn-sm
|
||||
|
||||
.btn-group-lg > .btn
|
||||
@extend .btn-lg
|
||||
|
||||
// Split button dropdowns
|
||||
// ----------------------
|
||||
|
||||
// Give the line between buttons some depth
|
||||
.btn-group > .btn + .dropdown-toggle
|
||||
padding-left: 8px
|
||||
padding-right: 8px
|
||||
|
||||
.btn-group > .btn-lg + .dropdown-toggle
|
||||
padding-left: 12px
|
||||
padding-right: 12px
|
||||
|
||||
// The clickable button for toggling the menu
|
||||
// Remove the gradient and set the same inset shadow as the :active state
|
||||
.btn-group.open .dropdown-toggle
|
||||
+box-shadow(inset 0 3px 5px rgba(0, 0, 0, 0.125))
|
||||
// Show no shadow for `.btn-link` since it has no other button styles.
|
||||
&.btn-link
|
||||
+box-shadow(none)
|
||||
|
||||
// Reposition the caret
|
||||
.btn .caret
|
||||
margin-left: 0
|
||||
|
||||
// Carets in other button sizes
|
||||
.btn-lg .caret
|
||||
border-width: $caret-width-large $caret-width-large 0
|
||||
border-bottom-width: 0
|
||||
|
||||
// Upside down carets for .dropup
|
||||
.dropup .btn-lg .caret
|
||||
border-width: 0 $caret-width-large $caret-width-large
|
||||
|
||||
// Vertical button groups
|
||||
// ----------------------
|
||||
|
||||
.btn-group-vertical
|
||||
> .btn,
|
||||
> .btn-group
|
||||
display: block
|
||||
float: none
|
||||
width: 100%
|
||||
max-width: 100%
|
||||
// Clear floats so dropdown menus can be properly placed
|
||||
> .btn-group
|
||||
+clearfix
|
||||
> .btn
|
||||
float: none
|
||||
> .btn + .btn,
|
||||
> .btn + .btn-group,
|
||||
> .btn-group + .btn,
|
||||
> .btn-group + .btn-group
|
||||
margin-top: -1px
|
||||
margin-left: 0
|
||||
|
||||
.btn-group-vertical > .btn
|
||||
&:not(:first-child):not(:last-child)
|
||||
border-radius: 0
|
||||
&:first-child:not(:last-child)
|
||||
border-top-right-radius: $border-radius-base
|
||||
+border-bottom-radius(0)
|
||||
&:last-child:not(:first-child)
|
||||
border-bottom-left-radius: $border-radius-base
|
||||
+border-top-radius(0)
|
||||
|
||||
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn
|
||||
border-radius: 0
|
||||
|
||||
.btn-group-vertical > .btn-group:first-child
|
||||
> .btn:last-child,
|
||||
> .dropdown-toggle
|
||||
+border-bottom-radius(0)
|
||||
|
||||
.btn-group-vertical > .btn-group:last-child > .btn:first-child
|
||||
+border-top-radius(0)
|
||||
|
||||
// Justified button groups
|
||||
// ----------------------
|
||||
|
||||
.btn-group-justified
|
||||
display: table
|
||||
width: 100%
|
||||
table-layout: fixed
|
||||
border-collapse: separate
|
||||
.btn
|
||||
float: none
|
||||
display: table-cell
|
||||
width: 1%
|
||||
|
||||
// Checkbox and radio options
|
||||
|
||||
[data-toggle="buttons"] > .btn > input[type="radio"],
|
||||
[data-toggle="buttons"] > .btn > input[type="checkbox"]
|
||||
display: none
|
||||
@@ -1,134 +0,0 @@
|
||||
//
|
||||
// Buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base styles
|
||||
// --------------------------------------------------
|
||||
|
||||
// Core styles
|
||||
.btn
|
||||
display: inline-block
|
||||
margin-bottom: 0
|
||||
// For input.btn
|
||||
font-weight: $btn-font-weight
|
||||
text-align: center
|
||||
vertical-align: middle
|
||||
cursor: pointer
|
||||
background-image: none
|
||||
// Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||
border: 1px solid transparent
|
||||
white-space: nowrap
|
||||
+button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base)
|
||||
+user-select(none)
|
||||
&:focus
|
||||
+tab-focus
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $btn-default-color
|
||||
text-decoration: none
|
||||
&:active,
|
||||
&.active
|
||||
outline: 0
|
||||
background-image: none
|
||||
+box-shadow(inset 0 3px 5px rgba(0, 0, 0, 0.125))
|
||||
&.disabled,
|
||||
&[disabled],
|
||||
fieldset[disabled] &
|
||||
cursor: not-allowed
|
||||
pointer-events: none
|
||||
// Future-proof disabling of clicks
|
||||
+opacity(0.65)
|
||||
+box-shadow(none)
|
||||
|
||||
// Alternate buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
.btn-default
|
||||
+button-variant($btn-default-color, $btn-default-bg, $btn-default-border)
|
||||
|
||||
.btn-primary
|
||||
+button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border)
|
||||
|
||||
// Warning appears as orange
|
||||
.btn-warning
|
||||
+button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border)
|
||||
|
||||
// Danger and error appear as red
|
||||
.btn-danger
|
||||
+button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border)
|
||||
|
||||
// Success appears as green
|
||||
.btn-success
|
||||
+button-variant($btn-success-color, $btn-success-bg, $btn-success-border)
|
||||
|
||||
// Info appears as blue-green
|
||||
.btn-info
|
||||
+button-variant($btn-info-color, $btn-info-bg, $btn-info-border)
|
||||
|
||||
// Link buttons
|
||||
// -------------------------
|
||||
|
||||
// Make a button look and behave like a link
|
||||
.btn-link
|
||||
color: $link-color
|
||||
font-weight: normal
|
||||
cursor: pointer
|
||||
border-radius: 0
|
||||
&,
|
||||
&:active,
|
||||
&[disabled],
|
||||
fieldset[disabled] &
|
||||
background-color: transparent
|
||||
+box-shadow(none)
|
||||
&,
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active
|
||||
border-color: transparent
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $link-hover-color
|
||||
text-decoration: underline
|
||||
background-color: transparent
|
||||
&[disabled],
|
||||
fieldset[disabled] &
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $btn-link-disabled-color
|
||||
text-decoration: none
|
||||
|
||||
// Button Sizes
|
||||
// --------------------------------------------------
|
||||
|
||||
.btn-lg
|
||||
// line-height: ensure even-numbered height of button next to large input
|
||||
+button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large)
|
||||
|
||||
.btn-sm,
|
||||
.btn-xs
|
||||
// line-height: ensure proper height of button next to small input
|
||||
+button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small)
|
||||
|
||||
.btn-xs
|
||||
padding: 1px 5px
|
||||
|
||||
// Block button
|
||||
// --------------------------------------------------
|
||||
|
||||
.btn-block
|
||||
display: block
|
||||
width: 100%
|
||||
padding-left: 0
|
||||
padding-right: 0
|
||||
|
||||
// Vertically space out multiple block buttons
|
||||
.btn-block + .btn-block
|
||||
margin-top: 5px
|
||||
|
||||
// Specificity overrides
|
||||
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"]
|
||||
&.btn-block
|
||||
width: 100%
|
||||
@@ -1,185 +0,0 @@
|
||||
//
|
||||
// Carousel
|
||||
// --------------------------------------------------
|
||||
|
||||
// Wrapper for the slide container and indicators
|
||||
.carousel
|
||||
position: relative
|
||||
|
||||
.carousel-inner
|
||||
position: relative
|
||||
overflow: hidden
|
||||
width: 100%
|
||||
> .item
|
||||
display: none
|
||||
position: relative
|
||||
+transition(0.6s ease-in-out left)
|
||||
// Account for jankitude on images
|
||||
> img,
|
||||
> a > img
|
||||
+img-responsive
|
||||
line-height: 1
|
||||
> .active,
|
||||
> .next,
|
||||
> .prev
|
||||
display: block
|
||||
> .active
|
||||
left: 0
|
||||
> .next,
|
||||
> .prev
|
||||
position: absolute
|
||||
top: 0
|
||||
width: 100%
|
||||
> .next
|
||||
left: 100%
|
||||
> .prev
|
||||
left: -100%
|
||||
> .next.left,
|
||||
> .prev.right
|
||||
left: 0
|
||||
> .active.left
|
||||
left: -100%
|
||||
> .active.right
|
||||
left: 100%
|
||||
|
||||
// Left/right controls for nav
|
||||
// ---------------------------
|
||||
|
||||
.carousel-control
|
||||
position: absolute
|
||||
top: 0
|
||||
left: 0
|
||||
bottom: 0
|
||||
width: $carousel-control-width
|
||||
+opacity($carousel-control-opacity)
|
||||
font-size: $carousel-control-font-size
|
||||
color: $carousel-control-color
|
||||
text-align: center
|
||||
text-shadow: $carousel-text-shadow
|
||||
// We can't have this transition here because WebKit cancels the carousel
|
||||
// animation if you trip this while in the middle of another animation.
|
||||
// Set gradients for backgrounds
|
||||
&.left
|
||||
+gradient-horizontal($start_color: rgba(0, 0, 0, 0.5), $end_color: rgba(0, 0, 0, 0.0001))
|
||||
&.right
|
||||
left: auto
|
||||
right: 0
|
||||
+gradient-horizontal($start_color: rgba(0, 0, 0, 0.0001), $end_color: rgba(0, 0, 0, 0.5))
|
||||
// Hover/focus state
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $carousel-control-color
|
||||
text-decoration: none
|
||||
+opacity(0.9)
|
||||
// Toggles
|
||||
.icon-prev,
|
||||
.icon-next,
|
||||
.glyphicon-chevron-left,
|
||||
.glyphicon-chevron-right
|
||||
position: absolute
|
||||
top: 50%
|
||||
z-index: 5
|
||||
display: inline-block
|
||||
.icon-prev,
|
||||
.glyphicon-chevron-left
|
||||
left: 50%
|
||||
.icon-next,
|
||||
.glyphicon-chevron-right
|
||||
right: 50%
|
||||
.icon-prev,
|
||||
.icon-next
|
||||
width: 20px
|
||||
height: 20px
|
||||
margin-top: -10px
|
||||
margin-left: -10px
|
||||
font-family: serif
|
||||
.icon-prev
|
||||
&:before
|
||||
content: '\2039'
|
||||
// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
|
||||
.icon-next
|
||||
&:before
|
||||
content: '\203a'
|
||||
// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
|
||||
|
||||
// Optional indicator pips
|
||||
//
|
||||
// Add an unordered list with the following class and add a list item for each
|
||||
// slide your carousel holds.
|
||||
|
||||
.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
|
||||
li
|
||||
display: inline-block
|
||||
width: 10px
|
||||
height: 10px
|
||||
margin: 1px
|
||||
text-indent: -999px
|
||||
border: 1px solid $carousel-indicator-border-color
|
||||
border-radius: 10px
|
||||
cursor: pointer
|
||||
// IE8-9 hack for event handling
|
||||
//
|
||||
// Internet Explorer 8-9 does not support clicks on elements without a set
|
||||
// `background-color`. We cannot use `filter` since that's not viewed as a
|
||||
// background color by the browser. Thus, a hack is needed.
|
||||
//
|
||||
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
|
||||
// set alpha transparency for the best results possible.
|
||||
background-color: #000 \9
|
||||
// IE8
|
||||
background-color: rgba(0, 0, 0, 0)
|
||||
// IE9
|
||||
.active
|
||||
margin: 0
|
||||
width: 12px
|
||||
height: 12px
|
||||
background-color: $carousel-indicator-active-bg
|
||||
|
||||
// Optional captions
|
||||
// -----------------------------
|
||||
// Hidden by default for smaller viewports
|
||||
.carousel-caption
|
||||
position: absolute
|
||||
left: 15%
|
||||
right: 15%
|
||||
bottom: 20px
|
||||
z-index: 10
|
||||
padding-top: 20px
|
||||
padding-bottom: 20px
|
||||
color: $carousel-caption-color
|
||||
text-align: center
|
||||
text-shadow: $carousel-text-shadow
|
||||
& .btn
|
||||
text-shadow: none
|
||||
// No shadow for button elements in carousel-caption
|
||||
|
||||
// Scale up controls for tablets and up
|
||||
@media screen and (min-width: $screen-sm-min)
|
||||
// Scale up the controls a smidge
|
||||
.carousel-control
|
||||
.glyphicons-chevron-left,
|
||||
.glyphicons-chevron-right,
|
||||
.icon-prev,
|
||||
.icon-next
|
||||
width: 30px
|
||||
height: 30px
|
||||
margin-top: -15px
|
||||
margin-left: -15px
|
||||
font-size: 30px
|
||||
// Show and left align the captions
|
||||
.carousel-caption
|
||||
left: 20%
|
||||
right: 20%
|
||||
padding-bottom: 30px
|
||||
// Move up the indicators
|
||||
.carousel-indicators
|
||||
bottom: 20px
|
||||
@@ -1,29 +0,0 @@
|
||||
//
|
||||
// Close icons
|
||||
// --------------------------------------------------
|
||||
|
||||
.close
|
||||
float: right
|
||||
font-size: $font-size-base * 1.5
|
||||
font-weight: $close-font-weight
|
||||
line-height: 1
|
||||
color: $close-color
|
||||
text-shadow: $close-text-shadow
|
||||
+opacity(0.2)
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $close-color
|
||||
text-decoration: none
|
||||
cursor: pointer
|
||||
+opacity(0.5)
|
||||
// [converter] extracted button& to button.close
|
||||
|
||||
// Additional properties for button version
|
||||
// iOS requires the button element instead of an anchor tag.
|
||||
// If you want the anchor version, it requires `href="#"`.
|
||||
button.close
|
||||
padding: 0
|
||||
cursor: pointer
|
||||
background: transparent
|
||||
border: 0
|
||||
-webkit-appearance: none
|
||||
@@ -1,48 +0,0 @@
|
||||
//
|
||||
// Code (inline and block)
|
||||
// --------------------------------------------------
|
||||
|
||||
// Inline and block code styles
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp
|
||||
font-family: $font-family-monospace
|
||||
|
||||
// Inline code
|
||||
code
|
||||
padding: 2px 4px
|
||||
font-size: 90%
|
||||
color: $code-color
|
||||
background-color: $code-bg
|
||||
white-space: nowrap
|
||||
border-radius: $border-radius-base
|
||||
|
||||
// Blocks of code
|
||||
pre
|
||||
display: block
|
||||
padding: ($line-height-computed - 1) / 2
|
||||
margin: 0 0 $line-height-computed / 2
|
||||
font-size: $font-size-base - 1
|
||||
// 14px to 13px
|
||||
line-height: $line-height-base
|
||||
word-break: break-all
|
||||
word-wrap: break-word
|
||||
color: $pre-color
|
||||
background-color: $pre-bg
|
||||
border: 1px solid $pre-border-color
|
||||
border-radius: $border-radius-base
|
||||
// Account for some code outputs that place code tags in pre tags
|
||||
code
|
||||
padding: 0
|
||||
font-size: inherit
|
||||
color: inherit
|
||||
white-space: pre-wrap
|
||||
background-color: transparent
|
||||
border-radius: 0
|
||||
|
||||
// Enable scrollable blocks of code
|
||||
.pre-scrollable
|
||||
max-height: $pre-scrollable-max-height
|
||||
overflow-y: scroll
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// Component animations
|
||||
// --------------------------------------------------
|
||||
|
||||
// Heads up!
|
||||
//
|
||||
// We don't use the `.opacity()` mixin here since it causes a bug with text
|
||||
// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.
|
||||
|
||||
.fade
|
||||
opacity: 0
|
||||
+transition(opacity 0.15s linear)
|
||||
&.in
|
||||
opacity: 1
|
||||
|
||||
.collapse
|
||||
display: none
|
||||
&.in
|
||||
display: block
|
||||
|
||||
.collapsing
|
||||
position: relative
|
||||
height: 0
|
||||
overflow: hidden
|
||||
+transition(height 0.35s ease)
|
||||
@@ -1,165 +0,0 @@
|
||||
//
|
||||
// Dropdown menus
|
||||
// --------------------------------------------------
|
||||
|
||||
// Dropdown arrow/caret
|
||||
.caret
|
||||
display: inline-block
|
||||
width: 0
|
||||
height: 0
|
||||
margin-left: 2px
|
||||
vertical-align: middle
|
||||
border-top: $caret-width-base solid $dropdown-caret-color
|
||||
border-right: $caret-width-base solid transparent
|
||||
border-left: $caret-width-base solid transparent
|
||||
// Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once fixed,
|
||||
// we can just straight up remove this.
|
||||
border-bottom: 0 dotted
|
||||
|
||||
// The dropdown wrapper (div)
|
||||
.dropdown
|
||||
position: relative
|
||||
|
||||
// Prevent the focus on the dropdown toggle when closing dropdowns
|
||||
.dropdown-toggle:focus
|
||||
outline: 0
|
||||
|
||||
// The dropdown menu (ul)
|
||||
.dropdown-menu
|
||||
position: absolute
|
||||
top: 100%
|
||||
left: 0
|
||||
z-index: $zindex-dropdown
|
||||
display: none
|
||||
// none by default, but block on "open" of the menu
|
||||
float: left
|
||||
min-width: 160px
|
||||
padding: 5px 0
|
||||
margin: 2px 0 0
|
||||
// override default ul
|
||||
list-style: none
|
||||
font-size: $font-size-base
|
||||
background-color: $dropdown-bg
|
||||
border: 1px solid $dropdown-fallback-border
|
||||
// IE8 fallback
|
||||
border: 1px solid $dropdown-border
|
||||
border-radius: $border-radius-base
|
||||
+box-shadow(0 6px 12px rgba(0, 0, 0, 0.175))
|
||||
background-clip: padding-box
|
||||
// Aligns the dropdown menu to right
|
||||
&.pull-right
|
||||
right: 0
|
||||
left: auto
|
||||
// Dividers (basically an hr) within the dropdown
|
||||
.divider
|
||||
+nav-divider($dropdown-divider-bg)
|
||||
// Links within the dropdown menu
|
||||
> li > a
|
||||
display: block
|
||||
padding: 3px 20px
|
||||
clear: both
|
||||
font-weight: normal
|
||||
line-height: $line-height-base
|
||||
color: $dropdown-link-color
|
||||
white-space: nowrap
|
||||
// prevent links from randomly breaking onto new lines
|
||||
|
||||
// Hover/Focus state
|
||||
.dropdown-menu > li > a
|
||||
&:hover,
|
||||
&:focus
|
||||
text-decoration: none
|
||||
color: $dropdown-link-hover-color
|
||||
background-color: $dropdown-link-hover-bg
|
||||
|
||||
// Active state
|
||||
.dropdown-menu > .active > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $dropdown-link-active-color
|
||||
text-decoration: none
|
||||
outline: 0
|
||||
background-color: $dropdown-link-active-bg
|
||||
|
||||
// Disabled state
|
||||
//
|
||||
// Gray out text and ensure the hover/focus state remains gray
|
||||
|
||||
.dropdown-menu > .disabled > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $dropdown-link-disabled-color
|
||||
|
||||
// Nuke hover/focus effects
|
||||
.dropdown-menu > .disabled > a
|
||||
&:hover,
|
||||
&:focus
|
||||
text-decoration: none
|
||||
background-color: transparent
|
||||
background-image: none
|
||||
// Remove CSS gradient
|
||||
+reset-filter
|
||||
cursor: not-allowed
|
||||
|
||||
// Open state for the dropdown
|
||||
.open
|
||||
// Show the menu
|
||||
> .dropdown-menu
|
||||
display: block
|
||||
// Remove the outline when :focus is triggered
|
||||
> a
|
||||
outline: 0
|
||||
|
||||
// Dropdown section headers
|
||||
.dropdown-header
|
||||
display: block
|
||||
padding: 3px 20px
|
||||
font-size: $font-size-small
|
||||
line-height: $line-height-base
|
||||
color: $dropdown-header-color
|
||||
|
||||
// Backdrop to catch body clicks on mobile, etc.
|
||||
.dropdown-backdrop
|
||||
position: fixed
|
||||
left: 0
|
||||
right: 0
|
||||
bottom: 0
|
||||
top: 0
|
||||
z-index: $zindex-dropdown - 10
|
||||
|
||||
// Right aligned dropdowns
|
||||
.pull-right > .dropdown-menu
|
||||
right: 0
|
||||
left: auto
|
||||
|
||||
// Allow for dropdowns to go bottom up (aka, dropup-menu)
|
||||
//
|
||||
// Just add .dropup after the standard .dropdown class and you're set, bro.
|
||||
// TODO: abstract this so that the navbar fixed styles are not placed here?
|
||||
|
||||
.dropup,
|
||||
.navbar-fixed-bottom .dropdown
|
||||
// Reverse the caret
|
||||
.caret
|
||||
// Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once this
|
||||
// gets fixed, restore `border-top: 0;`.
|
||||
border-top: 0 dotted
|
||||
border-bottom: $caret-width-base solid $dropdown-caret-color
|
||||
content: ""
|
||||
// Different positioning for bottom up menu
|
||||
.dropdown-menu
|
||||
top: auto
|
||||
bottom: 100%
|
||||
margin-bottom: 1px
|
||||
|
||||
// Component alignment
|
||||
//
|
||||
// Reiterate per navbar.less and the modified component alignment there.
|
||||
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
.navbar-right
|
||||
.dropdown-menu
|
||||
right: 0
|
||||
left: auto
|
||||
@@ -1,320 +0,0 @@
|
||||
//
|
||||
// Forms
|
||||
// --------------------------------------------------
|
||||
|
||||
// Normalize non-controls
|
||||
//
|
||||
// Restyle and baseline non-control form elements.
|
||||
|
||||
fieldset
|
||||
padding: 0
|
||||
margin: 0
|
||||
border: 0
|
||||
|
||||
legend
|
||||
display: block
|
||||
width: 100%
|
||||
padding: 0
|
||||
margin-bottom: $line-height-computed
|
||||
font-size: $font-size-base * 1.5
|
||||
line-height: inherit
|
||||
color: $legend-color
|
||||
border: 0
|
||||
border-bottom: 1px solid $legend-border-color
|
||||
|
||||
label
|
||||
display: inline-block
|
||||
margin-bottom: 5px
|
||||
font-weight: bold
|
||||
|
||||
// Normalize form controls
|
||||
|
||||
// Override content-box in Normalize (* isn't specific enough)
|
||||
input[type="search"]
|
||||
+box-sizing(border-box)
|
||||
|
||||
// Position radios and checkboxes better
|
||||
|
||||
input[type="radio"],
|
||||
input[type="checkbox"]
|
||||
margin: 4px 0 0
|
||||
margin-top: 1px \9
|
||||
/* IE8-9
|
||||
line-height: normal
|
||||
|
||||
// Set the height of select and file controls to match text inputs
|
||||
input[type="file"]
|
||||
display: block
|
||||
|
||||
// Make multiple select elements height not fixed
|
||||
|
||||
select[multiple],
|
||||
select[size]
|
||||
height: auto
|
||||
|
||||
// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611
|
||||
select optgroup
|
||||
font-size: inherit
|
||||
font-style: inherit
|
||||
font-family: inherit
|
||||
|
||||
// Focus for select, file, radio, and checkbox
|
||||
|
||||
input[type="file"]:focus,
|
||||
input[type="radio"]:focus,
|
||||
input[type="checkbox"]:focus
|
||||
+tab-focus
|
||||
|
||||
// Fix for Chrome number input
|
||||
// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.
|
||||
// See https://github.com/twbs/bootstrap/issues/8350 for more.
|
||||
input[type="number"]
|
||||
&::-webkit-outer-spin-button,
|
||||
&::-webkit-inner-spin-button
|
||||
height: auto
|
||||
|
||||
// Adjust output element
|
||||
output
|
||||
display: block
|
||||
padding-top: $padding-base-vertical + 1
|
||||
font-size: $font-size-base
|
||||
line-height: $line-height-base
|
||||
color: $input-color
|
||||
vertical-align: middle
|
||||
|
||||
// Common form controls
|
||||
//
|
||||
// Shared size and type resets for form controls. Apply `.form-control` to any
|
||||
// of the following form controls:
|
||||
//
|
||||
// select
|
||||
// textarea
|
||||
// input[type="text"]
|
||||
// input[type="password"]
|
||||
// input[type="datetime"]
|
||||
// input[type="datetime-local"]
|
||||
// input[type="date"]
|
||||
// input[type="month"]
|
||||
// input[type="time"]
|
||||
// input[type="week"]
|
||||
// input[type="number"]
|
||||
// input[type="email"]
|
||||
// input[type="url"]
|
||||
// input[type="search"]
|
||||
// input[type="tel"]
|
||||
// input[type="color"]
|
||||
|
||||
.form-control
|
||||
display: block
|
||||
width: 100%
|
||||
height: $input-height-base
|
||||
// Make inputs at least the height of their button counterpart (base line-height + padding + border)
|
||||
padding: $padding-base-vertical $padding-base-horizontal
|
||||
font-size: $font-size-base
|
||||
line-height: $line-height-base
|
||||
color: $input-color
|
||||
vertical-align: middle
|
||||
background-color: $input-bg
|
||||
background-image: none
|
||||
// Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||
border: 1px solid $input-border
|
||||
border-radius: $input-border-radius
|
||||
+box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.075))
|
||||
+transition(border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s)
|
||||
// Customize the `:focus` state to imitate native WebKit styles.
|
||||
+form-control-focus
|
||||
// Placeholder
|
||||
//
|
||||
// Placeholder text gets special styles because when browsers invalidate entire
|
||||
// lines if it doesn't understand a selector/
|
||||
+placeholder
|
||||
// Disabled and read-only inputs
|
||||
// Note: HTML5 says that controls under a fieldset > legend:first-child won't
|
||||
// be disabled if the fieldset is disabled. Due to implementation difficulty,
|
||||
// we don't honor that edge case; we style them as disabled anyway.
|
||||
&[disabled],
|
||||
&[readonly],
|
||||
fieldset[disabled] &
|
||||
cursor: not-allowed
|
||||
background-color: $input-bg-disabled
|
||||
// [converter] extracted textarea& to textarea.form-control
|
||||
|
||||
// Reset height for `textarea`s
|
||||
textarea.form-control
|
||||
height: auto
|
||||
|
||||
// Form groups
|
||||
//
|
||||
// Designed to help with the organization and spacing of vertical forms. For
|
||||
// horizontal forms, use the predefined grid classes.
|
||||
|
||||
.form-group
|
||||
margin-bottom: 15px
|
||||
|
||||
// Checkboxes and radios
|
||||
//
|
||||
// Indent the labels to position radios/checkboxes as hanging controls.
|
||||
|
||||
.radio,
|
||||
.checkbox
|
||||
display: block
|
||||
min-height: $line-height-computed
|
||||
// clear the floating input if there is no label text
|
||||
margin-top: 10px
|
||||
margin-bottom: 10px
|
||||
padding-left: 20px
|
||||
vertical-align: middle
|
||||
label
|
||||
display: inline
|
||||
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"]
|
||||
float: left
|
||||
margin-left: -20px
|
||||
|
||||
.radio + .radio,
|
||||
.checkbox + .checkbox
|
||||
margin-top: -5px
|
||||
// Move up sibling radios or checkboxes for tighter spacing
|
||||
|
||||
// Radios and checkboxes on same line
|
||||
|
||||
.radio-inline,
|
||||
.checkbox-inline
|
||||
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
|
||||
// space out consecutive inline controls
|
||||
|
||||
// Apply same disabled cursor tweak as for inputs
|
||||
//
|
||||
// Note: Neither radios nor checkboxes can be readonly.
|
||||
|
||||
input[type="radio"],
|
||||
input[type="checkbox"],
|
||||
.radio,
|
||||
.radio-inline,
|
||||
.checkbox,
|
||||
.checkbox-inline
|
||||
&[disabled],
|
||||
fieldset[disabled] &
|
||||
cursor: not-allowed
|
||||
|
||||
// Form control sizing
|
||||
|
||||
+input-size(".input-sm", $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small)
|
||||
|
||||
+input-size(".input-lg", $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large)
|
||||
|
||||
// Form control feedback states
|
||||
//
|
||||
// Apply contextual and semantic states to individual form controls.
|
||||
|
||||
// Warning
|
||||
.has-warning
|
||||
+form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg)
|
||||
|
||||
// Error
|
||||
.has-error
|
||||
+form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg)
|
||||
|
||||
// Success
|
||||
.has-success
|
||||
+form-control-validation($state-success-text, $state-success-text, $state-success-bg)
|
||||
|
||||
// Static form control text
|
||||
//
|
||||
// Apply class to a `p` element to make any string of text align with labels in
|
||||
// a horizontal form layout.
|
||||
|
||||
.form-control-static
|
||||
margin-bottom: 0
|
||||
// Remove default margin from `p`
|
||||
|
||||
// Help text
|
||||
//
|
||||
// Apply to any element you wish to create light text for placement immediately
|
||||
// below a form control. Use for general help, formatting, or instructional text.
|
||||
|
||||
.help-block
|
||||
display: block
|
||||
// account for any element using help-block
|
||||
margin-top: 5px
|
||||
margin-bottom: 10px
|
||||
color: lighten($text-color, 25%)
|
||||
// lighten the text some for contrast
|
||||
|
||||
// Inline forms
|
||||
//
|
||||
// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
|
||||
// forms begin stacked on extra small (mobile) devices and then go inline when
|
||||
// viewports reach <768px.
|
||||
//
|
||||
// Requires wrapping inputs and labels with `.form-group` for proper display of
|
||||
// default HTML form controls and our custom form controls (e.g., input groups).
|
||||
//
|
||||
// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
|
||||
|
||||
.form-inline
|
||||
// Kick in the inline
|
||||
@media (min-width: $screen-sm)
|
||||
// Inline-block all the things for "inline"
|
||||
.form-group
|
||||
display: inline-block
|
||||
margin-bottom: 0
|
||||
vertical-align: middle
|
||||
// In navbar-form, allow folks to *not* use `.form-group`
|
||||
.form-control
|
||||
display: inline-block
|
||||
// Remove default margin on radios/checkboxes that were used for stacking, and
|
||||
// then undo the floating of radios and checkboxes to match (which also avoids
|
||||
// a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
|
||||
.radio,
|
||||
.checkbox
|
||||
display: inline-block
|
||||
margin-top: 0
|
||||
margin-bottom: 0
|
||||
padding-left: 0
|
||||
.radio input[type="radio"],
|
||||
.checkbox input[type="checkbox"]
|
||||
float: none
|
||||
margin-left: 0
|
||||
|
||||
// Horizontal forms
|
||||
//
|
||||
// Horizontal forms are built on grid classes and allow you to create forms with
|
||||
// labels on the left and inputs on the right.
|
||||
|
||||
.form-horizontal
|
||||
// Consistent vertical alignment of labels, radios, and checkboxes
|
||||
.control-label,
|
||||
.radio,
|
||||
.checkbox,
|
||||
.radio-inline,
|
||||
.checkbox-inline
|
||||
margin-top: 0
|
||||
margin-bottom: 0
|
||||
padding-top: $padding-base-vertical + 1
|
||||
// Default padding plus a border
|
||||
// Make form groups behave like rows
|
||||
.form-group
|
||||
+make-row
|
||||
.form-control-static
|
||||
padding-top: $padding-base-vertical + 1
|
||||
// Only right align form labels here when the columns stop stacking
|
||||
@media (min-width: $screen-sm-min)
|
||||
.control-label
|
||||
text-align: right
|
||||
@@ -1,830 +0,0 @@
|
||||
//
|
||||
// Glyphicons for Bootstrap
|
||||
//
|
||||
// Since icons are fonts, they can be placed anywhere text is placed and are
|
||||
// thus automatically sized to match the surrounding child. To use, create an
|
||||
// inline element with the appropriate classes, like so:
|
||||
//
|
||||
// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
|
||||
|
||||
// Import the fonts
|
||||
@font-face
|
||||
font-family: 'Glyphicons Halflings'
|
||||
src: url("#{$icon-font-path}#{$icon-font-name}.eot")
|
||||
src: url("#{$icon-font-path}#{$icon-font-name}.eot?#iefix") format("embedded-opentype"), url("#{$icon-font-path}#{$icon-font-name}.woff") format("woff"), url("#{$icon-font-path}#{$icon-font-name}.ttf") format("truetype"), url("#{$icon-font-path}#{$icon-font-name}.svg#glyphicons_halflingsregular") format("svg")
|
||||
|
||||
|
||||
// Catchall baseclass
|
||||
.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
|
||||
&:empty
|
||||
width: 1em
|
||||
|
||||
// Individual icons
|
||||
.glyphicon-asterisk
|
||||
&:before
|
||||
content: "\2a"
|
||||
|
||||
.glyphicon-plus
|
||||
&:before
|
||||
content: "\2b"
|
||||
|
||||
.glyphicon-euro
|
||||
&: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"
|
||||
@@ -1,81 +0,0 @@
|
||||
//
|
||||
// Grid system
|
||||
// --------------------------------------------------
|
||||
|
||||
// Set the container width, and override it for fixed navbars in media queries
|
||||
.container
|
||||
+container-fixed
|
||||
|
||||
// mobile first defaults
|
||||
.row
|
||||
+make-row
|
||||
|
||||
// Common styles for small and large grid columns
|
||||
+make-grid-columns
|
||||
|
||||
// Extra small grid
|
||||
//
|
||||
// Grid classes for extra small devices like smartphones. No offset, push, or
|
||||
// pull classes are present here due to the size of the target.
|
||||
//
|
||||
// Note that `.col-xs-12` doesn't get floated on purpose--there's no need since
|
||||
// it's full-width.
|
||||
|
||||
+make-grid-columns-float(xs)
|
||||
|
||||
+make-grid($grid-columns, xs, width)
|
||||
|
||||
+make-grid($grid-columns, xs, pull)
|
||||
|
||||
+make-grid($grid-columns, xs, push)
|
||||
|
||||
+make-grid($grid-columns, xs, offset)
|
||||
|
||||
// Small grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the small device range, from phones
|
||||
// to tablets.
|
||||
//
|
||||
// Note that `.col-sm-12` doesn't get floated on purpose--there's no need since
|
||||
// it's full-width.
|
||||
|
||||
@media (min-width: $screen-sm-min)
|
||||
.container
|
||||
width: $container-sm
|
||||
+make-grid-columns-float(sm)
|
||||
+make-grid($grid-columns, sm, width)
|
||||
+make-grid($grid-columns, sm, pull)
|
||||
+make-grid($grid-columns, sm, push)
|
||||
+make-grid($grid-columns, sm, offset)
|
||||
|
||||
// Medium grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the desktop device range.
|
||||
//
|
||||
// Note that `.col-md-12` doesn't get floated on purpose--there's no need since
|
||||
// it's full-width.
|
||||
|
||||
@media (min-width: $screen-md-min)
|
||||
.container
|
||||
width: $container-md
|
||||
+make-grid-columns-float(md)
|
||||
+make-grid($grid-columns, md, width)
|
||||
+make-grid($grid-columns, md, pull)
|
||||
+make-grid($grid-columns, md, push)
|
||||
+make-grid($grid-columns, md, offset)
|
||||
|
||||
// Large grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the large desktop device range.
|
||||
//
|
||||
// Note that `.col-lg-12` doesn't get floated on purpose--there's no need since
|
||||
// it's full-width.
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
.container
|
||||
width: $container-lg
|
||||
+make-grid-columns-float(lg)
|
||||
+make-grid($grid-columns, lg, width)
|
||||
+make-grid($grid-columns, lg, pull)
|
||||
+make-grid($grid-columns, lg, push)
|
||||
+make-grid($grid-columns, lg, offset)
|
||||
@@ -1,123 +0,0 @@
|
||||
//
|
||||
// Input groups
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base styles
|
||||
// -------------------------
|
||||
.input-group
|
||||
position: relative
|
||||
// For dropdowns
|
||||
display: table
|
||||
border-collapse: separate
|
||||
// prevent input groups from inheriting border styles from table cells when placed within a table
|
||||
// Undo padding and float of grid classes
|
||||
&.col
|
||||
float: none
|
||||
padding-left: 0
|
||||
padding-right: 0
|
||||
.form-control
|
||||
width: 100%
|
||||
margin-bottom: 0
|
||||
|
||||
// Sizing options
|
||||
//
|
||||
// Remix the default form control sizing classes into new ones for easier
|
||||
// manipulation.
|
||||
|
||||
.input-group-lg > .form-control,
|
||||
.input-group-lg > .input-group-addon,
|
||||
.input-group-lg > .input-group-btn > .btn
|
||||
@extend .input-lg
|
||||
|
||||
.input-group-sm > .form-control,
|
||||
.input-group-sm > .input-group-addon,
|
||||
.input-group-sm > .input-group-btn > .btn
|
||||
@extend .input-sm
|
||||
|
||||
// Display as table-cell
|
||||
// -------------------------
|
||||
|
||||
.input-group-addon,
|
||||
.input-group-btn,
|
||||
.input-group .form-control
|
||||
display: table-cell
|
||||
&:not(:first-child):not(:last-child)
|
||||
border-radius: 0
|
||||
|
||||
// Addon and addon wrapper for buttons
|
||||
|
||||
.input-group-addon,
|
||||
.input-group-btn
|
||||
width: 1%
|
||||
white-space: nowrap
|
||||
vertical-align: middle
|
||||
// Match the inputs
|
||||
|
||||
// Text input groups
|
||||
// -------------------------
|
||||
.input-group-addon
|
||||
padding: $padding-base-vertical $padding-base-horizontal
|
||||
font-size: $font-size-base
|
||||
font-weight: normal
|
||||
line-height: 1
|
||||
color: $input-color
|
||||
text-align: center
|
||||
background-color: $input-group-addon-bg
|
||||
border: 1px solid $input-group-addon-border-color
|
||||
border-radius: $border-radius-base
|
||||
// Sizing
|
||||
&.input-sm
|
||||
padding: $padding-small-vertical $padding-small-horizontal
|
||||
font-size: $font-size-small
|
||||
border-radius: $border-radius-small
|
||||
&.input-lg
|
||||
padding: $padding-large-vertical $padding-large-horizontal
|
||||
font-size: $font-size-large
|
||||
border-radius: $border-radius-large
|
||||
// Nuke default margins from checkboxes and radios to vertically center within.
|
||||
input[type="radio"],
|
||||
input[type="checkbox"]
|
||||
margin-top: 0
|
||||
|
||||
// Reset rounded corners
|
||||
|
||||
.input-group .form-control:first-child,
|
||||
.input-group-addon:first-child,
|
||||
.input-group-btn:first-child > .btn,
|
||||
.input-group-btn:first-child > .dropdown-toggle,
|
||||
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle)
|
||||
+border-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 > .dropdown-toggle,
|
||||
.input-group-btn:first-child > .btn:not(:first-child)
|
||||
+border-left-radius(0)
|
||||
|
||||
.input-group-addon:last-child
|
||||
border-left: 0
|
||||
|
||||
// Button input groups
|
||||
// -------------------------
|
||||
.input-group-btn
|
||||
position: relative
|
||||
white-space: nowrap
|
||||
// Negative margin to only have a 1px border between the two
|
||||
&:first-child > .btn
|
||||
margin-right: -1px
|
||||
&:last-child > .btn
|
||||
margin-left: -1px
|
||||
|
||||
.input-group-btn > .btn
|
||||
position: relative
|
||||
// Jankily prevent input button groups from wrapping
|
||||
+ .btn
|
||||
margin-left: -4px
|
||||
// Bring the "active" button to the front
|
||||
&:hover,
|
||||
&:active
|
||||
z-index: 2
|
||||
@@ -1,28 +0,0 @@
|
||||
//
|
||||
// Jumbotron
|
||||
// --------------------------------------------------
|
||||
|
||||
.jumbotron
|
||||
padding: $jumbotron-padding
|
||||
margin-bottom: $jumbotron-padding
|
||||
font-size: $jumbotron-font-size
|
||||
font-weight: 200
|
||||
line-height: $line-height-base * 1.5
|
||||
color: $jumbotron-color
|
||||
background-color: $jumbotron-bg
|
||||
h1
|
||||
line-height: 1
|
||||
color: $jumbotron-heading-color
|
||||
p
|
||||
line-height: 1.4
|
||||
.container &
|
||||
border-radius: $border-radius-large
|
||||
// Only round corners at higher resolutions if contained in a container
|
||||
@media screen and (min-width: $screen-sm-min)
|
||||
padding-top: $jumbotron-padding * 1.6
|
||||
padding-bottom: $jumbotron-padding * 1.6
|
||||
.container &
|
||||
padding-left: $jumbotron-padding * 2
|
||||
padding-right: $jumbotron-padding * 2
|
||||
h1
|
||||
font-size: $font-size-base * 4.5
|
||||
@@ -1,46 +0,0 @@
|
||||
//
|
||||
// Labels
|
||||
// --------------------------------------------------
|
||||
|
||||
.label
|
||||
display: inline
|
||||
padding: .2em .6em .3em
|
||||
font-size: 75%
|
||||
font-weight: bold
|
||||
line-height: 1
|
||||
color: $label-color
|
||||
text-align: center
|
||||
white-space: nowrap
|
||||
vertical-align: baseline
|
||||
border-radius: .25em
|
||||
// Add hover effects, but only for links
|
||||
&[href]
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $label-link-hover-color
|
||||
text-decoration: none
|
||||
cursor: pointer
|
||||
// Empty labels collapse automatically (not available in IE8)
|
||||
&:empty
|
||||
display: none
|
||||
|
||||
// Colors
|
||||
// Contextual variations (linked labels get darker on :hover)
|
||||
|
||||
.label-default
|
||||
+label-variant($label-default-bg)
|
||||
|
||||
.label-primary
|
||||
+label-variant($label-primary-bg)
|
||||
|
||||
.label-success
|
||||
+label-variant($label-success-bg)
|
||||
|
||||
.label-info
|
||||
+label-variant($label-info-bg)
|
||||
|
||||
.label-warning
|
||||
+label-variant($label-warning-bg)
|
||||
|
||||
.label-danger
|
||||
+label-variant($label-danger-bg)
|
||||
@@ -1,71 +0,0 @@
|
||||
//
|
||||
// List groups
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base class
|
||||
//
|
||||
// Easily usable on <ul>, <ol>, or <div>.
|
||||
.list-group
|
||||
// No need to set list-style: none; since .list-group-item is block level
|
||||
margin-bottom: 20px
|
||||
padding-left: 0
|
||||
// reset padding because ul and ol
|
||||
|
||||
// Individual list items
|
||||
// -------------------------
|
||||
|
||||
.list-group-item
|
||||
position: relative
|
||||
display: block
|
||||
padding: 10px 15px
|
||||
// Place the border on the list items and negative margin up for better styling
|
||||
margin-bottom: -1px
|
||||
background-color: $list-group-bg
|
||||
border: 1px solid $list-group-border
|
||||
// Round the first and last items
|
||||
&:first-child
|
||||
+border-top-radius($list-group-border-radius)
|
||||
&:last-child
|
||||
margin-bottom: 0
|
||||
+border-bottom-radius($list-group-border-radius)
|
||||
// Align badges within list items
|
||||
> .badge
|
||||
float: right
|
||||
> .badge + .badge
|
||||
margin-right: 5px
|
||||
|
||||
// Linked list items
|
||||
a.list-group-item
|
||||
color: $list-group-link-color
|
||||
.list-group-item-heading
|
||||
color: $list-group-link-heading-color
|
||||
// Hover state
|
||||
&:hover,
|
||||
&:focus
|
||||
text-decoration: none
|
||||
background-color: $list-group-hover-bg
|
||||
// Active class on item itself, not parent
|
||||
&.active,
|
||||
&.active:hover,
|
||||
&.active:focus
|
||||
z-index: 2
|
||||
// Place active items above their siblings for proper border styling
|
||||
color: $list-group-active-color
|
||||
background-color: $list-group-active-bg
|
||||
border-color: $list-group-active-border
|
||||
// Force color to inherit for custom content
|
||||
.list-group-item-heading
|
||||
color: inherit
|
||||
.list-group-item-text
|
||||
color: lighten($list-group-active-bg, 40%)
|
||||
|
||||
// Custom content options
|
||||
// -------------------------
|
||||
|
||||
.list-group-item-heading
|
||||
margin-top: 0
|
||||
margin-bottom: 5px
|
||||
|
||||
.list-group-item-text
|
||||
margin-bottom: 0
|
||||
line-height: 1.3
|
||||
@@ -1,47 +0,0 @@
|
||||
// Media objects
|
||||
// Source: http://stubbornella.org/content/?p=497
|
||||
// --------------------------------------------------
|
||||
|
||||
// Common styles
|
||||
// -------------------------
|
||||
|
||||
// Clear the floats
|
||||
|
||||
.media,
|
||||
.media-body
|
||||
overflow: hidden
|
||||
zoom: 1
|
||||
|
||||
// Proper spacing between instances of .media
|
||||
|
||||
.media,
|
||||
.media .media
|
||||
margin-top: 15px
|
||||
|
||||
.media:first-child
|
||||
margin-top: 0
|
||||
|
||||
// For images and videos, set to block
|
||||
.media-object
|
||||
display: block
|
||||
|
||||
// Reset margins on headings for tighter default spacing
|
||||
.media-heading
|
||||
margin: 0 0 5px
|
||||
|
||||
// Media image alignment
|
||||
// -------------------------
|
||||
|
||||
.media
|
||||
> .pull-left
|
||||
margin-right: 10px
|
||||
> .pull-right
|
||||
margin-left: 10px
|
||||
|
||||
// Media list variation
|
||||
// -------------------------
|
||||
|
||||
// Undo default ul/ol styles
|
||||
.media-list
|
||||
padding-left: 0
|
||||
list-style: none
|
||||
@@ -1,759 +0,0 @@
|
||||
//
|
||||
// Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
// Utilities
|
||||
// -------------------------
|
||||
|
||||
// Clearfix
|
||||
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
|
||||
//
|
||||
// For modern browsers
|
||||
// 1. The space content is one way to avoid an Opera bug when the
|
||||
// contenteditable attribute is included anywhere else in the document.
|
||||
// Otherwise it causes space to appear at the top and bottom of elements
|
||||
// that are clearfixed.
|
||||
// 2. The use of `table` rather than `block` is only necessary if using
|
||||
// `:before` to contain the top-margins of child elements.
|
||||
=clearfix
|
||||
&:before,
|
||||
&:after
|
||||
content: " "
|
||||
/* 1
|
||||
display: table
|
||||
/* 2
|
||||
&:after
|
||||
clear: both
|
||||
|
||||
// WebKit-style focus
|
||||
=tab-focus
|
||||
// Default
|
||||
outline: thin dotted #333
|
||||
// WebKit
|
||||
outline: 5px auto -webkit-focus-ring-color
|
||||
outline-offset: -2px
|
||||
|
||||
// Center-align a block level element
|
||||
=center-block
|
||||
display: block
|
||||
margin-left: auto
|
||||
margin-right: auto
|
||||
|
||||
// Sizing shortcuts
|
||||
=size($width, $height)
|
||||
width: $width
|
||||
height: $height
|
||||
|
||||
=square($size)
|
||||
+size($size, $size)
|
||||
|
||||
// Placeholder text
|
||||
=placeholder($color: $input-color-placeholder)
|
||||
&:-moz-placeholder
|
||||
color: $color
|
||||
// Firefox 4-18
|
||||
&::-moz-placeholder
|
||||
color: $color
|
||||
// Firefox 19+
|
||||
&:-ms-input-placeholder
|
||||
color: $color
|
||||
// Internet Explorer 10+
|
||||
&::-webkit-input-placeholder
|
||||
color: $color
|
||||
// Safari and Chrome
|
||||
|
||||
// Text overflow
|
||||
// Requires inline-block or block for proper styling
|
||||
=text-overflow
|
||||
overflow: hidden
|
||||
text-overflow: ellipsis
|
||||
white-space: nowrap
|
||||
|
||||
// CSS image replacement
|
||||
//
|
||||
// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
|
||||
// mixins being reused as classes with the same name, this doesn't hold up. As
|
||||
// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note
|
||||
// that we cannot chain the mixins together in Less, so they are repeated.
|
||||
//
|
||||
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
|
||||
|
||||
// Deprecated as of v3.0.1 (will be removed in v4)
|
||||
=hide-text
|
||||
font: #{0 / 0} a
|
||||
color: transparent
|
||||
text-shadow: none
|
||||
background-color: transparent
|
||||
border: 0
|
||||
|
||||
// New mixin to use as of v3.0.1
|
||||
=text-hide
|
||||
font: #{0 / 0} a
|
||||
color: transparent
|
||||
text-shadow: none
|
||||
background-color: transparent
|
||||
border: 0
|
||||
|
||||
// CSS3 PROPERTIES
|
||||
// --------------------------------------------------
|
||||
|
||||
// Single side border-radius
|
||||
=border-top-radius($radius)
|
||||
border-top-right-radius: $radius
|
||||
border-top-left-radius: $radius
|
||||
|
||||
=border-right-radius($radius)
|
||||
border-bottom-right-radius: $radius
|
||||
border-top-right-radius: $radius
|
||||
|
||||
=border-bottom-radius($radius)
|
||||
border-bottom-right-radius: $radius
|
||||
border-bottom-left-radius: $radius
|
||||
|
||||
=border-left-radius($radius)
|
||||
border-bottom-left-radius: $radius
|
||||
border-top-left-radius: $radius
|
||||
|
||||
// Drop shadows
|
||||
=box-shadow($shadow...)
|
||||
-webkit-box-shadow: $shadow
|
||||
// iOS <4.3 & Android <4.1
|
||||
box-shadow: $shadow
|
||||
|
||||
// Transitions
|
||||
=transition($transition...)
|
||||
-webkit-transition: $transition
|
||||
transition: $transition
|
||||
|
||||
=transition-property($transition-property)
|
||||
-webkit-transition-property: $transition-property
|
||||
transition-property: $transition-property
|
||||
|
||||
=transition-delay($transition-delay)
|
||||
-webkit-transition-delay: $transition-delay
|
||||
transition-delay: $transition-delay
|
||||
|
||||
=transition-duration($transition-duration)
|
||||
-webkit-transition-duration: $transition-duration
|
||||
transition-duration: $transition-duration
|
||||
|
||||
=transition-transform($transition...)
|
||||
-webkit-transition: -webkit-transform $transition
|
||||
-moz-transition: -moz-transform $transition
|
||||
-o-transition: -o-transform $transition
|
||||
transition: transform $transition
|
||||
|
||||
// Transformations
|
||||
=rotate($degrees)
|
||||
-webkit-transform: rotate($degrees)
|
||||
-ms-transform: rotate($degrees)
|
||||
// IE9+
|
||||
transform: rotate($degrees)
|
||||
|
||||
=scale($ratio)
|
||||
-webkit-transform: scale($ratio)
|
||||
-ms-transform: scale($ratio)
|
||||
// IE9+
|
||||
transform: scale($ratio)
|
||||
|
||||
=translate($x, $y)
|
||||
-webkit-transform: translate($x, $y)
|
||||
-ms-transform: translate($x, $y)
|
||||
// IE9+
|
||||
transform: translate($x, $y)
|
||||
|
||||
=skew($x, $y)
|
||||
-webkit-transform: skew($x, $y)
|
||||
-ms-transform: skewX($x) skewY($y)
|
||||
// See https://github.com/twbs/bootstrap/issues/4885; IE9+
|
||||
transform: skew($x, $y)
|
||||
|
||||
=translate3d($x, $y, $z)
|
||||
-webkit-transform: translate3d($x, $y, $z)
|
||||
transform: translate3d($x, $y, $z)
|
||||
|
||||
=rotateX($degrees)
|
||||
-webkit-transform: rotateX($degrees)
|
||||
-ms-transform: rotateX($degrees)
|
||||
// IE9+
|
||||
transform: rotateX($degrees)
|
||||
|
||||
=rotateY($degrees)
|
||||
-webkit-transform: rotateY($degrees)
|
||||
-ms-transform: rotateY($degrees)
|
||||
// IE9+
|
||||
transform: rotateY($degrees)
|
||||
|
||||
=perspective($perspective)
|
||||
-webkit-perspective: $perspective
|
||||
-moz-perspective: $perspective
|
||||
perspective: $perspective
|
||||
|
||||
=perspective-origin($perspective)
|
||||
-webkit-perspective-origin: $perspective
|
||||
-moz-perspective-origin: $perspective
|
||||
perspective-origin: $perspective
|
||||
|
||||
=transform-origin($origin)
|
||||
-webkit-transform-origin: $origin
|
||||
-moz-transform-origin: $origin
|
||||
transform-origin: $origin
|
||||
|
||||
// Animations
|
||||
=animation($animation)
|
||||
-webkit-animation: $animation
|
||||
animation: $animation
|
||||
|
||||
// Backface visibility
|
||||
// Prevent browsers from flickering when using CSS 3D transforms.
|
||||
// Default value is `visible`, but can be changed to `hidden`
|
||||
=backface-visibility($visibility)
|
||||
-webkit-backface-visibility: $visibility
|
||||
-moz-backface-visibility: $visibility
|
||||
backface-visibility: $visibility
|
||||
|
||||
// Box sizing
|
||||
=box-sizing($boxmodel)
|
||||
-webkit-box-sizing: $boxmodel
|
||||
-moz-box-sizing: $boxmodel
|
||||
box-sizing: $boxmodel
|
||||
|
||||
// User select
|
||||
// For selecting text on the page
|
||||
=user-select($select)
|
||||
-webkit-user-select: $select
|
||||
-moz-user-select: $select
|
||||
-ms-user-select: $select
|
||||
// IE10+
|
||||
-o-user-select: $select
|
||||
user-select: $select
|
||||
|
||||
// Resize anything
|
||||
=resizable($direction)
|
||||
resize: $direction
|
||||
// Options: horizontal, vertical, both
|
||||
overflow: auto
|
||||
// Safari fix
|
||||
|
||||
// CSS3 Content Columns
|
||||
=content-columns($column-count, $column-gap: $grid-gutter-width)
|
||||
-webkit-column-count: $column-count
|
||||
-moz-column-count: $column-count
|
||||
column-count: $column-count
|
||||
-webkit-column-gap: $column-gap
|
||||
-moz-column-gap: $column-gap
|
||||
column-gap: $column-gap
|
||||
|
||||
// Optional hyphenation
|
||||
=hyphens($mode: auto)
|
||||
word-wrap: break-word
|
||||
-webkit-hyphens: $mode
|
||||
-moz-hyphens: $mode
|
||||
-ms-hyphens: $mode
|
||||
// IE10+
|
||||
-o-hyphens: $mode
|
||||
hyphens: $mode
|
||||
|
||||
// Opacity
|
||||
=opacity($opacity)
|
||||
opacity: $opacity
|
||||
// IE8 filter
|
||||
$opacity-ie: $opacity * 100
|
||||
filter: #{alpha(opacity = $opacity-ie)}
|
||||
|
||||
// GRADIENTS
|
||||
// --------------------------------------------------
|
||||
|
||||
// Horizontal gradient, from left to right
|
||||
//
|
||||
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
||||
// Color stops are not available in IE9 and below.
|
||||
=gradient-horizontal($start-color: #555555, $end-color: #333333, $start-percent: 0%, $end-percent: 100%)
|
||||
background-image: -webkit-gradient(linear, $start-percent top, $end-percent top, from($start-color), to($end-color))
|
||||
// Safari 4+, Chrome 2+
|
||||
background-image: -webkit-linear-gradient(left, color-stop($start-color $start-percent), color-stop($end-color $end-percent))
|
||||
// Safari 5.1+, Chrome 10+
|
||||
background-image: -moz-linear-gradient(left, $start-color $start-percent, $end-color $end-percent)
|
||||
// FF 3.6+
|
||||
background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent)
|
||||
// Standard, IE10
|
||||
background-repeat: repeat-x
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1)
|
||||
// IE9 and down
|
||||
|
||||
// Vertical gradient, from top to bottom
|
||||
//
|
||||
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
||||
// Color stops are not available in IE9 and below.
|
||||
=gradient-vertical($start-color: #555555, $end-color: #333333, $start-percent: 0%, $end-percent: 100%)
|
||||
background-image: -webkit-gradient(linear, left $start-percent, left $end-percent, from($start-color), to($end-color))
|
||||
// Safari 4+, Chrome 2+
|
||||
background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent)
|
||||
// Safari 5.1+, Chrome 10+
|
||||
background-image: -moz-linear-gradient(top, $start-color $start-percent, $end-color $end-percent)
|
||||
// FF 3.6+
|
||||
background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent)
|
||||
// Standard, IE10
|
||||
background-repeat: repeat-x
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0)
|
||||
// IE9 and down
|
||||
|
||||
=gradient-directional($start-color: #555555, $end-color: #333333, $deg: 45deg)
|
||||
background-repeat: repeat-x
|
||||
background-image: -webkit-linear-gradient($deg, $start-color, $end-color)
|
||||
// Safari 5.1+, Chrome 10+
|
||||
background-image: -moz-linear-gradient($deg, $start-color, $end-color)
|
||||
// FF 3.6+
|
||||
background-image: linear-gradient($deg, $start-color, $end-color)
|
||||
// Standard, IE10
|
||||
|
||||
=gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f)
|
||||
background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from($start-color), color-stop($color-stop, $mid-color), to($end-color))
|
||||
background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color)
|
||||
background-image: -moz-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color)
|
||||
background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color)
|
||||
background-repeat: no-repeat
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1)
|
||||
// IE9 and down, gets no color-stop at all for proper fallback
|
||||
|
||||
=gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f)
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from($start-color), color-stop($color-stop, $mid-color), to($end-color))
|
||||
background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color)
|
||||
background-image: -moz-linear-gradient(top, $start-color, $mid-color $color-stop, $end-color)
|
||||
background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color)
|
||||
background-repeat: no-repeat
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0)
|
||||
// IE9 and down, gets no color-stop at all for proper fallback
|
||||
|
||||
=gradient-radial($inner-color: #555555, $outer-color: #333333)
|
||||
background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($inner-color), to($outer-color))
|
||||
background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color)
|
||||
background-image: -moz-radial-gradient(circle, $inner-color, $outer-color)
|
||||
background-image: radial-gradient(circle, $inner-color, $outer-color)
|
||||
background-repeat: no-repeat
|
||||
|
||||
=gradient-striped($color: rgba(255, 255, 255, 0.15), $angle: 45deg)
|
||||
background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, $color), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, $color), color-stop(0.75, $color), color-stop(0.75, transparent), to(transparent))
|
||||
background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent)
|
||||
background-image: -moz-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent)
|
||||
background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent)
|
||||
|
||||
// Reset filters for IE
|
||||
//
|
||||
// When you need to remove a gradient background, do not forget to use this to reset
|
||||
// the IE filter for IE9 and below.
|
||||
=reset-filter
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false)
|
||||
|
||||
// Retina images
|
||||
//
|
||||
// Short retina mixin for setting background-image and -size
|
||||
|
||||
=img-retina($file-1x, $file-2x, $width-1x, $height-1x)
|
||||
background-image: image-url(#{$file-1x})
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)
|
||||
background-image: image-url(#{$file-2x})
|
||||
background-size: $width-1x $height-1x
|
||||
|
||||
// Responsive image
|
||||
//
|
||||
// Keep images from scaling beyond the width of their parents.
|
||||
|
||||
=img-responsive($display: block)
|
||||
display: $display
|
||||
max-width: 100%
|
||||
// Part 1: Set a maximum relative to the parent
|
||||
height: auto
|
||||
// Part 2: Scale the height according to the width, otherwise you get stretching
|
||||
|
||||
// COMPONENT MIXINS
|
||||
// --------------------------------------------------
|
||||
|
||||
// Horizontal dividers
|
||||
// -------------------------
|
||||
// Dividers (basically an hr) within dropdowns and nav lists
|
||||
=nav-divider($color: #e5e5e5)
|
||||
height: 1px
|
||||
margin: $line-height-computed / 2 - 1 0
|
||||
overflow: hidden
|
||||
background-color: $color
|
||||
|
||||
// Panels
|
||||
// -------------------------
|
||||
=panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border)
|
||||
border-color: $border
|
||||
& > .panel-heading
|
||||
color: $heading-text-color
|
||||
background-color: $heading-bg-color
|
||||
border-color: $heading-border
|
||||
+ .panel-collapse .panel-body
|
||||
border-top-color: $border
|
||||
& > .dropdown .caret
|
||||
border-color: $heading-text-color transparent
|
||||
& > .panel-footer
|
||||
+ .panel-collapse .panel-body
|
||||
border-bottom-color: $border
|
||||
|
||||
// Alerts
|
||||
// -------------------------
|
||||
=alert-variant($background, $border, $text-color)
|
||||
background-color: $background
|
||||
border-color: $border
|
||||
color: $text-color
|
||||
hr
|
||||
border-top-color: darken($border, 5%)
|
||||
.alert-link
|
||||
color: darken($text-color, 10%)
|
||||
|
||||
// Tables
|
||||
// -------------------------
|
||||
=table-row-variant($state, $background, $border)
|
||||
// Exact selectors below required to override `.table-striped` and prevent
|
||||
// inheritance to nested tables.
|
||||
.table > thead > tr,
|
||||
.table > tbody > tr,
|
||||
.table > tfoot > tr
|
||||
> td.#{$state},
|
||||
> th.#{$state},
|
||||
&.#{$state} > td,
|
||||
&.#{$state} > th
|
||||
background-color: $background
|
||||
// Hover states for `.table-hover`
|
||||
// Note: this is not available for cells or rows within `thead` or `tfoot`.
|
||||
.table-hover > tbody > tr
|
||||
> td.#{$state}:hover,
|
||||
> th.#{$state}:hover,
|
||||
&.#{$state}:hover > td,
|
||||
&.#{$state}:hover > th
|
||||
background-color: darken($background, 5%)
|
||||
|
||||
// Button variants
|
||||
// -------------------------
|
||||
// Easily pump out default styles, as well as :hover, :focus, :active,
|
||||
// and disabled options for all buttons
|
||||
=button-variant($color, $background, $border)
|
||||
color: $color
|
||||
background-color: $background
|
||||
border-color: $border
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active,
|
||||
&.active
|
||||
color: $color
|
||||
background-color: darken($background, 8%)
|
||||
border-color: darken($border, 12%)
|
||||
.open &
|
||||
&.dropdown-toggle
|
||||
color: $color
|
||||
background-color: darken($background, 8%)
|
||||
border-color: darken($border, 12%)
|
||||
&:active,
|
||||
&.active
|
||||
background-image: none
|
||||
.open &
|
||||
&.dropdown-toggle
|
||||
background-image: none
|
||||
&.disabled,
|
||||
&[disabled],
|
||||
fieldset[disabled] &
|
||||
&,
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active,
|
||||
&.active
|
||||
background-color: $background
|
||||
border-color: $border
|
||||
|
||||
// Button sizes
|
||||
// -------------------------
|
||||
=button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius)
|
||||
padding: $padding-vertical $padding-horizontal
|
||||
font-size: $font-size
|
||||
line-height: $line-height
|
||||
border-radius: $border-radius
|
||||
|
||||
// Pagination
|
||||
// -------------------------
|
||||
=pagination-size($padding-vertical, $padding-horizontal, $font-size, $border-radius)
|
||||
> li
|
||||
> a,
|
||||
> span
|
||||
padding: $padding-vertical $padding-horizontal
|
||||
font-size: $font-size
|
||||
&:first-child
|
||||
> a,
|
||||
> span
|
||||
+border-left-radius($border-radius)
|
||||
&:last-child
|
||||
> a,
|
||||
> span
|
||||
+border-right-radius($border-radius)
|
||||
|
||||
// Labels
|
||||
// -------------------------
|
||||
=label-variant($color)
|
||||
background-color: $color
|
||||
&[href]
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: darken($color, 10%)
|
||||
|
||||
// Navbar vertical align
|
||||
// -------------------------
|
||||
// Vertically center elements in the navbar.
|
||||
// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
|
||||
=navbar-vertical-align($element-height)
|
||||
margin-top: ($navbar-height - $element-height) / 2
|
||||
margin-bottom: ($navbar-height - $element-height) / 2
|
||||
|
||||
// Progress bars
|
||||
// -------------------------
|
||||
=progress-bar-variant($color)
|
||||
background-color: $color
|
||||
.progress-striped &
|
||||
+gradient-striped
|
||||
|
||||
// Responsive utilities
|
||||
// -------------------------
|
||||
// More easily include all the states for responsive-utilities.less.
|
||||
// [converter] $parent hack
|
||||
=responsive-visibility($parent)
|
||||
#{$parent}
|
||||
display: block !important
|
||||
tr#{$parent}
|
||||
display: table-row !important
|
||||
th#{$parent},
|
||||
td#{$parent}
|
||||
display: table-cell !important
|
||||
|
||||
// [converter] $parent hack
|
||||
=responsive-invisibility($parent)
|
||||
#{$parent},
|
||||
tr#{$parent},
|
||||
th#{$parent},
|
||||
td#{$parent}
|
||||
display: none !important
|
||||
|
||||
// Grid System
|
||||
// -----------
|
||||
|
||||
// Centered container element
|
||||
=container-fixed
|
||||
margin-right: auto
|
||||
margin-left: auto
|
||||
padding-left: $grid-gutter-width / 2
|
||||
padding-right: $grid-gutter-width / 2
|
||||
+clearfix
|
||||
|
||||
// Creates a wrapper for a series of columns
|
||||
=make-row($gutter: $grid-gutter-width)
|
||||
margin-left: $gutter / -2
|
||||
margin-right: $gutter / -2
|
||||
+clearfix
|
||||
|
||||
// Generate the extra small columns
|
||||
=make-xs-column($columns, $gutter: $grid-gutter-width)
|
||||
position: relative
|
||||
float: left
|
||||
width: percentage($columns / $grid-columns)
|
||||
// Prevent columns from collapsing when empty
|
||||
min-height: 1px
|
||||
// Inner gutter via padding
|
||||
padding-left: $gutter / 2
|
||||
padding-right: $gutter / 2
|
||||
|
||||
// Generate the small columns
|
||||
=make-sm-column($columns, $gutter: $grid-gutter-width)
|
||||
position: relative
|
||||
// Prevent columns from collapsing when empty
|
||||
min-height: 1px
|
||||
// Inner gutter via padding
|
||||
padding-left: $gutter / 2
|
||||
padding-right: $gutter / 2
|
||||
// Calculate width based on number of columns available
|
||||
@media (min-width: $screen-sm-min)
|
||||
float: left
|
||||
width: percentage($columns / $grid-columns)
|
||||
|
||||
// Generate the small column offsets
|
||||
=make-sm-column-offset($columns)
|
||||
@media (min-width: $screen-sm-min)
|
||||
margin-left: percentage($columns / $grid-columns)
|
||||
|
||||
=make-sm-column-push($columns)
|
||||
@media (min-width: $screen-sm-min)
|
||||
left: percentage($columns / $grid-columns)
|
||||
|
||||
=make-sm-column-pull($columns)
|
||||
@media (min-width: $screen-sm-min)
|
||||
right: percentage($columns / $grid-columns)
|
||||
|
||||
// Generate the medium columns
|
||||
=make-md-column($columns, $gutter: $grid-gutter-width)
|
||||
position: relative
|
||||
// Prevent columns from collapsing when empty
|
||||
min-height: 1px
|
||||
// Inner gutter via padding
|
||||
padding-left: $gutter / 2
|
||||
padding-right: $gutter / 2
|
||||
// Calculate width based on number of columns available
|
||||
@media (min-width: $screen-md-min)
|
||||
float: left
|
||||
width: percentage($columns / $grid-columns)
|
||||
|
||||
// Generate the medium column offsets
|
||||
=make-md-column-offset($columns)
|
||||
@media (min-width: $screen-md-min)
|
||||
margin-left: percentage($columns / $grid-columns)
|
||||
|
||||
=make-md-column-push($columns)
|
||||
@media (min-width: $screen-md)
|
||||
left: percentage($columns / $grid-columns)
|
||||
|
||||
=make-md-column-pull($columns)
|
||||
@media (min-width: $screen-md-min)
|
||||
right: percentage($columns / $grid-columns)
|
||||
|
||||
// Generate the large columns
|
||||
=make-lg-column($columns, $gutter: $grid-gutter-width)
|
||||
position: relative
|
||||
// Prevent columns from collapsing when empty
|
||||
min-height: 1px
|
||||
// Inner gutter via padding
|
||||
padding-left: $gutter / 2
|
||||
padding-right: $gutter / 2
|
||||
// Calculate width based on number of columns available
|
||||
@media (min-width: $screen-lg-min)
|
||||
float: left
|
||||
width: percentage($columns / $grid-columns)
|
||||
|
||||
// Generate the large column offsets
|
||||
=make-lg-column-offset($columns)
|
||||
@media (min-width: $screen-lg-min)
|
||||
margin-left: percentage($columns / $grid-columns)
|
||||
|
||||
=make-lg-column-push($columns)
|
||||
@media (min-width: $screen-lg-min)
|
||||
left: percentage($columns / $grid-columns)
|
||||
|
||||
=make-lg-column-pull($columns)
|
||||
@media (min-width: $screen-lg-min)
|
||||
right: percentage($columns / $grid-columns)
|
||||
|
||||
// Framework grid generation
|
||||
//
|
||||
// Used only by Bootstrap to generate the correct number of grid classes given
|
||||
// any value of `$grid-columns`.
|
||||
|
||||
// [converter] Grid converted to use SASS cycles (LESS uses recursive nested mixin defs not supported by SASS)
|
||||
=make-grid-columns
|
||||
$list: ""
|
||||
$i: 1
|
||||
$list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}"
|
||||
@for $i from 2 through $grid-columns
|
||||
$list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}, #{$list}"
|
||||
#{$list}
|
||||
position: relative
|
||||
// Prevent columns from collapsing when empty
|
||||
min-height: 1px
|
||||
// Inner gutter via padding
|
||||
padding-left: $grid-gutter-width / 2
|
||||
padding-right: $grid-gutter-width / 2
|
||||
|
||||
// [converter] Grid converted to use SASS cycles (LESS uses recursive nested mixin defs not supported by SASS)
|
||||
=make-grid-columns-float($class)
|
||||
$list: ""
|
||||
$i: 1
|
||||
$list: ".col-#{$class}-#{$i}"
|
||||
@for $i from 2 through $grid-columns
|
||||
$list: ".col-#{$class}-#{$i}, #{$list}"
|
||||
#{$list}
|
||||
float: left
|
||||
|
||||
=calc-grid($index, $class, $type)
|
||||
@if $type == width and $index > 0
|
||||
.col-#{$class}-#{$index}
|
||||
width: percentage($index / $grid-columns)
|
||||
@if $type == push
|
||||
.col-#{$class}-push-#{$index}
|
||||
left: percentage($index / $grid-columns)
|
||||
@if $type == pull
|
||||
.col-#{$class}-pull-#{$index}
|
||||
right: percentage($index / $grid-columns)
|
||||
@if $type == offset
|
||||
.col-#{$class}-offset-#{$index}
|
||||
margin-left: percentage($index / $grid-columns)
|
||||
|
||||
// [converter] This is defined recursively in LESS, but SASS supports real loops
|
||||
=make-grid($columns, $class, $type)
|
||||
@for $i from 0 through $columns
|
||||
+calc-grid($i, $class, $type)
|
||||
|
||||
// Form validation states
|
||||
//
|
||||
// Used in forms.less to generate the form validation CSS for warnings, errors,
|
||||
// and successes.
|
||||
|
||||
=form-control-validation($text-color: #555555, $border-color: #cccccc, $background-color: whitesmoke)
|
||||
// Color the label and help text
|
||||
.help-block,
|
||||
.control-label,
|
||||
.radio,
|
||||
.checkbox,
|
||||
.radio-inline,
|
||||
.checkbox-inline
|
||||
color: $text-color
|
||||
// Set the border and box shadow on specific inputs to match
|
||||
.form-control
|
||||
border-color: $border-color
|
||||
+box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.075))
|
||||
// Redeclare so transitions work
|
||||
&:focus
|
||||
border-color: darken($border-color, 10%)
|
||||
$shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px lighten($border-color, 20%)
|
||||
+box-shadow($shadow)
|
||||
// Set validation states also for addons
|
||||
.input-group-addon
|
||||
color: $text-color
|
||||
border-color: $border-color
|
||||
background-color: $background-color
|
||||
|
||||
// Form control focus state
|
||||
//
|
||||
// Generate a customized focus state and for any input with the specified color,
|
||||
// which defaults to the `$input-focus-border` variable.
|
||||
//
|
||||
// We highly encourage you to not customize the default value, but instead use
|
||||
// this to tweak colors on an as-needed basis. This aesthetic change is based on
|
||||
// WebKit's default styles, but applicable to a wider range of browsers. Its
|
||||
// usability and accessibility should be taken into account with any change.
|
||||
//
|
||||
// Example usage: change the default blue border and shadow to white for better
|
||||
// contrast against a dark gray background.
|
||||
|
||||
=form-control-focus($color: $input-border-focus)
|
||||
$color-rgba: rgba(red($color), green($color), blue($color), 0.6)
|
||||
&:focus
|
||||
border-color: $color
|
||||
outline: 0
|
||||
+box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px $color-rgba)
|
||||
|
||||
// Form control sizing
|
||||
//
|
||||
// Relative text size, padding, and border-radii changes for form controls. For
|
||||
// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
|
||||
// element gets special love because it's special, and that's a fact!
|
||||
|
||||
// [converter] $parent hack
|
||||
=input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius)
|
||||
#{$parent}
|
||||
height: $input-height
|
||||
padding: $padding-vertical $padding-horizontal
|
||||
font-size: $font-size
|
||||
line-height: $line-height
|
||||
border-radius: $border-radius
|
||||
select#{$parent}
|
||||
height: $input-height
|
||||
line-height: $input-height
|
||||
textarea#{$parent}
|
||||
height: auto
|
||||
@@ -1,119 +0,0 @@
|
||||
//
|
||||
// Modals
|
||||
// --------------------------------------------------
|
||||
|
||||
// .modal-open - body class for killing the scroll
|
||||
// .modal - container to scroll within
|
||||
// .modal-dialog - positioning shell for the actual modal
|
||||
// .modal-content - actual modal w/ bg and corners and shit
|
||||
|
||||
// Kill the scroll on the body
|
||||
.modal-open
|
||||
overflow: hidden
|
||||
|
||||
// Container that the modal scrolls within
|
||||
.modal
|
||||
display: none
|
||||
overflow: auto
|
||||
overflow-y: scroll
|
||||
position: fixed
|
||||
top: 0
|
||||
right: 0
|
||||
bottom: 0
|
||||
left: 0
|
||||
z-index: $zindex-modal-background
|
||||
// When fading in the modal, animate it to slide down
|
||||
&.fade .modal-dialog
|
||||
+translate(0, -25%)
|
||||
+transition-transform(0.3s ease-out)
|
||||
&.in .modal-dialog
|
||||
+translate(0, 0)
|
||||
|
||||
// Shell div to position the modal with bottom padding
|
||||
.modal-dialog
|
||||
position: relative
|
||||
margin-left: auto
|
||||
margin-right: auto
|
||||
width: auto
|
||||
padding: 10px
|
||||
z-index: $zindex-modal-background + 10
|
||||
|
||||
// Actual modal
|
||||
.modal-content
|
||||
position: relative
|
||||
background-color: $modal-content-bg
|
||||
border: 1px solid $modal-content-fallback-border-color
|
||||
//old browsers fallback (ie8 etc)
|
||||
border: 1px solid $modal-content-border-color
|
||||
border-radius: $border-radius-large
|
||||
+box-shadow(0 3px 9px rgba(0, 0, 0, 0.5))
|
||||
background-clip: padding-box
|
||||
// Remove focus outline from opened modal
|
||||
outline: none
|
||||
|
||||
// Modal background
|
||||
.modal-backdrop
|
||||
position: fixed
|
||||
top: 0
|
||||
right: 0
|
||||
bottom: 0
|
||||
left: 0
|
||||
z-index: $zindex-modal-background - 10
|
||||
background-color: $modal-backdrop-bg
|
||||
// Fade for backdrop
|
||||
&.fade
|
||||
+opacity(0)
|
||||
&.in
|
||||
+opacity(0.5)
|
||||
|
||||
// Modal header
|
||||
// Top section of the modal w/ title and dismiss
|
||||
.modal-header
|
||||
padding: $modal-title-padding
|
||||
border-bottom: 1px solid $modal-header-border-color
|
||||
min-height: $modal-title-padding + $modal-title-line-height
|
||||
|
||||
// Close icon
|
||||
.modal-header .close
|
||||
margin-top: -2px
|
||||
|
||||
// Title text within header
|
||||
.modal-title
|
||||
margin: 0
|
||||
line-height: $modal-title-line-height
|
||||
|
||||
// Modal body
|
||||
// Where all modal content resides (sibling of .modal-header and .modal-footer)
|
||||
.modal-body
|
||||
position: relative
|
||||
padding: $modal-inner-padding
|
||||
|
||||
// Footer (for actions)
|
||||
.modal-footer
|
||||
margin-top: 15px
|
||||
padding: $modal-inner-padding - 1 $modal-inner-padding $modal-inner-padding
|
||||
text-align: right
|
||||
// right align buttons
|
||||
border-top: 1px solid $modal-footer-border-color
|
||||
+clearfix
|
||||
// clear it in case folks use .pull-* classes on buttons
|
||||
// Properly space out buttons
|
||||
.btn + .btn
|
||||
margin-left: 5px
|
||||
margin-bottom: 0
|
||||
// account for input[type="submit"] which gets the bottom margin like all other inputs
|
||||
// but override that for button groups
|
||||
.btn-group .btn + .btn
|
||||
margin-left: -1px
|
||||
// and override it for block buttons as well
|
||||
.btn-block + .btn-block
|
||||
margin-left: 0
|
||||
|
||||
// Scale up the modal
|
||||
@media screen and (min-width: $screen-sm-min)
|
||||
.modal-dialog
|
||||
width: 600px
|
||||
padding-top: 30px
|
||||
padding-bottom: 30px
|
||||
.modal-content
|
||||
+box-shadow(0 5px 15px rgba(0, 0, 0, 0.5))
|
||||
@@ -1,458 +0,0 @@
|
||||
//
|
||||
// Navbars
|
||||
// --------------------------------------------------
|
||||
|
||||
// Wrapper and base class
|
||||
//
|
||||
// Provide a static navbar from which we expand to create full-width, fixed, and
|
||||
// other navbar variations.
|
||||
|
||||
.navbar
|
||||
position: relative
|
||||
min-height: $navbar-height
|
||||
// Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
|
||||
margin-bottom: $navbar-margin-bottom
|
||||
border: 1px solid transparent
|
||||
// Prevent floats from breaking the navbar
|
||||
+clearfix
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
border-radius: $navbar-border-radius
|
||||
|
||||
// Navbar heading
|
||||
//
|
||||
// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
|
||||
// styling of responsive aspects.
|
||||
|
||||
.navbar-header
|
||||
+clearfix
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
float: left
|
||||
|
||||
// Navbar collapse (body)
|
||||
//
|
||||
// Group your navbar content into this for easy collapsing and expanding across
|
||||
// various device sizes. By default, this content is collapsed when <768px, but
|
||||
// will expand past that for a horizontal display.
|
||||
//
|
||||
// To start (on mobile devices) the navbar links, forms, and buttons are stacked
|
||||
// vertically and include a `max-height` to overflow in case you have too much
|
||||
// content for the user's viewport.
|
||||
|
||||
.navbar-collapse
|
||||
max-height: 340px
|
||||
overflow-x: visible
|
||||
padding-right: $navbar-padding-horizontal
|
||||
padding-left: $navbar-padding-horizontal
|
||||
border-top: 1px solid transparent
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1)
|
||||
+clearfix
|
||||
-webkit-overflow-scrolling: touch
|
||||
&.in
|
||||
overflow-y: auto
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
width: auto
|
||||
border-top: 0
|
||||
box-shadow: none
|
||||
&.collapse
|
||||
display: block !important
|
||||
height: auto !important
|
||||
padding-bottom: 0
|
||||
// Override default setting
|
||||
overflow: visible !important
|
||||
&.in
|
||||
overflow-y: auto
|
||||
// Account for first and last children spacing
|
||||
.navbar-nav.navbar-left:first-child
|
||||
margin-left: -$navbar-padding-horizontal
|
||||
.navbar-nav.navbar-right:last-child
|
||||
margin-right: -$navbar-padding-horizontal
|
||||
.navbar-text:last-child
|
||||
margin-right: 0
|
||||
|
||||
// Both navbar header and collapse
|
||||
//
|
||||
// When a container is present, change the behavior of the header and collapse.
|
||||
|
||||
.container > .navbar-header,
|
||||
.container > .navbar-collapse
|
||||
margin-right: -$navbar-padding-horizontal
|
||||
margin-left: -$navbar-padding-horizontal
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
margin-right: 0
|
||||
margin-left: 0
|
||||
|
||||
//
|
||||
// Navbar alignment options
|
||||
//
|
||||
// Display the navbar across the entirety of the page or fixed it to the top or
|
||||
// bottom of the page.
|
||||
|
||||
// Static top (unfixed, but 100% wide) navbar
|
||||
.navbar-static-top
|
||||
z-index: $zindex-navbar
|
||||
border-width: 0 0 1px
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
border-radius: 0
|
||||
|
||||
// Fix the top/bottom navbars when screen real estate supports it
|
||||
|
||||
.navbar-fixed-top,
|
||||
.navbar-fixed-bottom
|
||||
position: fixed
|
||||
right: 0
|
||||
left: 0
|
||||
z-index: $zindex-navbar-fixed
|
||||
// Undo the rounded corners
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
border-radius: 0
|
||||
|
||||
.navbar-fixed-top
|
||||
top: 0
|
||||
border-width: 0 0 1px
|
||||
|
||||
.navbar-fixed-bottom
|
||||
bottom: 0
|
||||
margin-bottom: 0
|
||||
// override .navbar defaults
|
||||
border-width: 1px 0 0
|
||||
|
||||
// Brand/project name
|
||||
|
||||
.navbar-brand
|
||||
float: left
|
||||
padding: $navbar-padding-vertical $navbar-padding-horizontal
|
||||
font-size: $font-size-large
|
||||
line-height: $line-height-computed
|
||||
&:hover,
|
||||
&:focus
|
||||
text-decoration: none
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
.navbar > .container &
|
||||
margin-left: -$navbar-padding-horizontal
|
||||
|
||||
// Navbar toggle
|
||||
//
|
||||
// Custom button for toggling the `.navbar-collapse`, powered by the collapse
|
||||
// JavaScript plugin.
|
||||
|
||||
.navbar-toggle
|
||||
position: relative
|
||||
float: right
|
||||
margin-right: $navbar-padding-horizontal
|
||||
padding: 9px 10px
|
||||
+navbar-vertical-align(34px)
|
||||
background-color: transparent
|
||||
border: 1px solid transparent
|
||||
border-radius: $border-radius-base
|
||||
// Bars
|
||||
.icon-bar
|
||||
display: block
|
||||
width: 22px
|
||||
height: 2px
|
||||
border-radius: 1px
|
||||
.icon-bar + .icon-bar
|
||||
margin-top: 4px
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
display: none
|
||||
|
||||
// Navbar nav links
|
||||
//
|
||||
// Builds on top of the `.nav` components with it's own modifier class to make
|
||||
// the nav the full height of the horizontal nav (above 768px).
|
||||
|
||||
.navbar-nav
|
||||
margin: $navbar-padding-vertical / 2 (-$navbar-padding-horizontal)
|
||||
> li > a
|
||||
padding-top: 10px
|
||||
padding-bottom: 10px
|
||||
line-height: $line-height-computed
|
||||
@media (max-width: $screen-xs-max)
|
||||
// Dropdowns get custom display when collapsed
|
||||
.open .dropdown-menu
|
||||
position: static
|
||||
float: none
|
||||
width: auto
|
||||
margin-top: 0
|
||||
background-color: transparent
|
||||
border: 0
|
||||
box-shadow: none
|
||||
> li > a,
|
||||
.dropdown-header
|
||||
padding: 5px 15px 5px 25px
|
||||
> li > a
|
||||
line-height: $line-height-computed
|
||||
&:hover,
|
||||
&:focus
|
||||
background-image: none
|
||||
// Uncollapse the nav
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
float: left
|
||||
margin: 0
|
||||
> li
|
||||
float: left
|
||||
> a
|
||||
padding-top: ($navbar-height - $line-height-computed) / 2
|
||||
padding-bottom: ($navbar-height - $line-height-computed) / 2
|
||||
|
||||
// Component alignment
|
||||
//
|
||||
// Repurpose the pull utilities as their own navbar utilities to avoid specificity
|
||||
// issues with parents and chaining. Only do this when the navbar is uncollapsed
|
||||
// though so that navbar contents properly stack and align in mobile.
|
||||
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
.navbar-left
|
||||
float: left !important
|
||||
.navbar-right
|
||||
float: right !important
|
||||
|
||||
// Navbar form
|
||||
//
|
||||
// Extension of the `.form-inline` with some extra flavor for optimum display in
|
||||
// our navbars.
|
||||
|
||||
.navbar-form
|
||||
margin-left: -$navbar-padding-horizontal
|
||||
margin-right: -$navbar-padding-horizontal
|
||||
padding: 10px $navbar-padding-horizontal
|
||||
border-top: 1px solid transparent
|
||||
border-bottom: 1px solid transparent
|
||||
$shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1)
|
||||
+box-shadow($shadow)
|
||||
// Mixin behavior for optimum display
|
||||
@extend .form-inline
|
||||
.form-group
|
||||
@media (max-width: $screen-xs-max)
|
||||
margin-bottom: 5px
|
||||
// Vertically center in expanded, horizontal navbar
|
||||
+navbar-vertical-align($input-height-base)
|
||||
// Undo 100% width for pull classes
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
width: auto
|
||||
border: 0
|
||||
margin-left: 0
|
||||
margin-right: 0
|
||||
padding-top: 0
|
||||
padding-bottom: 0
|
||||
+box-shadow(none)
|
||||
|
||||
// Dropdown menus
|
||||
|
||||
// Menu position and menu carets
|
||||
.navbar-nav > li > .dropdown-menu
|
||||
margin-top: 0
|
||||
+border-top-radius(0)
|
||||
|
||||
// Menu position and menu caret support for dropups via extra dropup class
|
||||
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu
|
||||
+border-bottom-radius(0)
|
||||
|
||||
// Right aligned menus need alt position
|
||||
|
||||
.navbar-nav.pull-right > li > .dropdown-menu,
|
||||
.navbar-nav > li > .dropdown-menu.pull-right
|
||||
left: auto
|
||||
right: 0
|
||||
|
||||
// Buttons in navbars
|
||||
//
|
||||
// Vertically center a button within a navbar (when *not* in a form).
|
||||
|
||||
.navbar-btn
|
||||
+navbar-vertical-align($input-height-base)
|
||||
|
||||
// Text in navbars
|
||||
//
|
||||
// Add a class to make any element properly align itself vertically within the navbars.
|
||||
|
||||
.navbar-text
|
||||
float: left
|
||||
+navbar-vertical-align($line-height-computed)
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
margin-left: $navbar-padding-horizontal
|
||||
margin-right: $navbar-padding-horizontal
|
||||
|
||||
// Alternate navbars
|
||||
// --------------------------------------------------
|
||||
|
||||
// Default navbar
|
||||
.navbar-default
|
||||
background-color: $navbar-default-bg
|
||||
border-color: $navbar-default-border
|
||||
.navbar-brand
|
||||
color: $navbar-default-brand-color
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-default-brand-hover-color
|
||||
background-color: $navbar-default-brand-hover-bg
|
||||
.navbar-text
|
||||
color: $navbar-default-color
|
||||
.navbar-nav
|
||||
> li > a
|
||||
color: $navbar-default-link-color
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-default-link-hover-color
|
||||
background-color: $navbar-default-link-hover-bg
|
||||
> .active > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-default-link-active-color
|
||||
background-color: $navbar-default-link-active-bg
|
||||
> .disabled > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-default-link-disabled-color
|
||||
background-color: $navbar-default-link-disabled-bg
|
||||
.navbar-toggle
|
||||
border-color: $navbar-default-toggle-border-color
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: $navbar-default-toggle-hover-bg
|
||||
.icon-bar
|
||||
background-color: $navbar-default-toggle-icon-bar-bg
|
||||
.navbar-collapse,
|
||||
.navbar-form
|
||||
border-color: $navbar-default-border
|
||||
// Dropdown menu items and carets
|
||||
.navbar-nav
|
||||
// Caret should match text color on hover
|
||||
> .dropdown > a:hover .caret,
|
||||
> .dropdown > a:focus .caret
|
||||
border-top-color: $navbar-default-link-hover-color
|
||||
border-bottom-color: $navbar-default-link-hover-color
|
||||
// Remove background color from open dropdown
|
||||
> .open > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: $navbar-default-link-active-bg
|
||||
color: $navbar-default-link-active-color
|
||||
.caret
|
||||
border-top-color: $navbar-default-link-active-color
|
||||
border-bottom-color: $navbar-default-link-active-color
|
||||
> .dropdown > a .caret
|
||||
border-top-color: $navbar-default-link-color
|
||||
border-bottom-color: $navbar-default-link-color
|
||||
@media (max-width: $screen-xs-max)
|
||||
// Dropdowns get custom display when collapsed
|
||||
.open .dropdown-menu
|
||||
> li > a
|
||||
color: $navbar-default-link-color
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-default-link-hover-color
|
||||
background-color: $navbar-default-link-hover-bg
|
||||
> .active > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-default-link-active-color
|
||||
background-color: $navbar-default-link-active-bg
|
||||
> .disabled > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-default-link-disabled-color
|
||||
background-color: $navbar-default-link-disabled-bg
|
||||
// Links in navbars
|
||||
//
|
||||
// Add a class to ensure links outside the navbar nav are colored correctly.
|
||||
.navbar-link
|
||||
color: $navbar-default-link-color
|
||||
&:hover
|
||||
color: $navbar-default-link-hover-color
|
||||
|
||||
// Inverse navbar
|
||||
|
||||
.navbar-inverse
|
||||
background-color: $navbar-inverse-bg
|
||||
border-color: $navbar-inverse-border
|
||||
.navbar-brand
|
||||
color: $navbar-inverse-brand-color
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-inverse-brand-hover-color
|
||||
background-color: $navbar-inverse-brand-hover-bg
|
||||
.navbar-text
|
||||
color: $navbar-inverse-color
|
||||
.navbar-nav
|
||||
> li > a
|
||||
color: $navbar-inverse-link-color
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-inverse-link-hover-color
|
||||
background-color: $navbar-inverse-link-hover-bg
|
||||
> .active > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-inverse-link-active-color
|
||||
background-color: $navbar-inverse-link-active-bg
|
||||
> .disabled > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-inverse-link-disabled-color
|
||||
background-color: $navbar-inverse-link-disabled-bg
|
||||
// Darken the responsive nav toggle
|
||||
.navbar-toggle
|
||||
border-color: $navbar-inverse-toggle-border-color
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: $navbar-inverse-toggle-hover-bg
|
||||
.icon-bar
|
||||
background-color: $navbar-inverse-toggle-icon-bar-bg
|
||||
.navbar-collapse,
|
||||
.navbar-form
|
||||
border-color: darken($navbar-inverse-bg, 7%)
|
||||
// Dropdowns
|
||||
.navbar-nav
|
||||
> .open > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: $navbar-inverse-link-active-bg
|
||||
color: $navbar-inverse-link-active-color
|
||||
> .dropdown > a:hover .caret
|
||||
border-top-color: $navbar-inverse-link-hover-color
|
||||
border-bottom-color: $navbar-inverse-link-hover-color
|
||||
> .dropdown > a .caret
|
||||
border-top-color: $navbar-inverse-link-color
|
||||
border-bottom-color: $navbar-inverse-link-color
|
||||
> .open > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
.caret
|
||||
border-top-color: $navbar-inverse-link-active-color
|
||||
border-bottom-color: $navbar-inverse-link-active-color
|
||||
@media (max-width: $screen-xs-max)
|
||||
// Dropdowns get custom display
|
||||
.open .dropdown-menu
|
||||
> .dropdown-header
|
||||
border-color: $navbar-inverse-border
|
||||
> li > a
|
||||
color: $navbar-inverse-link-color
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-inverse-link-hover-color
|
||||
background-color: $navbar-inverse-link-hover-bg
|
||||
> .active > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-inverse-link-active-color
|
||||
background-color: $navbar-inverse-link-active-bg
|
||||
> .disabled > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $navbar-inverse-link-disabled-color
|
||||
background-color: $navbar-inverse-link-disabled-bg
|
||||
.navbar-link
|
||||
color: $navbar-inverse-link-color
|
||||
&:hover
|
||||
color: $navbar-inverse-link-hover-color
|
||||
@@ -1,192 +0,0 @@
|
||||
//
|
||||
// Navs
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base class
|
||||
// --------------------------------------------------
|
||||
|
||||
.nav
|
||||
margin-bottom: 0
|
||||
padding-left: 0
|
||||
// Override default ul/ol
|
||||
list-style: none
|
||||
+clearfix
|
||||
> li
|
||||
position: relative
|
||||
display: block
|
||||
> a
|
||||
position: relative
|
||||
display: block
|
||||
padding: $nav-link-padding
|
||||
&:hover,
|
||||
&:focus
|
||||
text-decoration: none
|
||||
background-color: $nav-link-hover-bg
|
||||
// Disabled state sets text to gray and nukes hover/tab effects
|
||||
&.disabled > a
|
||||
color: $nav-disabled-link-color
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $nav-disabled-link-hover-color
|
||||
text-decoration: none
|
||||
background-color: transparent
|
||||
cursor: not-allowed
|
||||
// Open dropdowns
|
||||
.open > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: $nav-link-hover-bg
|
||||
border-color: $link-color
|
||||
.caret
|
||||
border-top-color: $link-hover-color
|
||||
border-bottom-color: $link-hover-color
|
||||
// Nav dividers (deprecated with v3.0.1)
|
||||
//
|
||||
// This should have been removed in v3 with the dropping of `.nav-list`, but
|
||||
// we missed it. We don't currently support this anywhere, but in the interest
|
||||
// of maintaining backward compatibility in case you use it, it's deprecated.
|
||||
.nav-divider
|
||||
+nav-divider
|
||||
// Prevent IE8 from misplacing imgs
|
||||
//
|
||||
// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
|
||||
> li > a > img
|
||||
max-width: none
|
||||
|
||||
// Tabs
|
||||
// -------------------------
|
||||
|
||||
// Give the tabs something to sit on
|
||||
.nav-tabs
|
||||
border-bottom: 1px solid $nav-tabs-border-color
|
||||
> li
|
||||
float: left
|
||||
// Make the list-items overlay the bottom border
|
||||
margin-bottom: -1px
|
||||
// Actual tabs (as links)
|
||||
> a
|
||||
margin-right: 2px
|
||||
line-height: $line-height-base
|
||||
border: 1px solid transparent
|
||||
border-radius: $border-radius-base $border-radius-base 0 0
|
||||
&:hover
|
||||
border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color
|
||||
// Active state, and it's :hover to override normal :hover
|
||||
&.active > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $nav-tabs-active-link-hover-color
|
||||
background-color: $nav-tabs-active-link-hover-bg
|
||||
border: 1px solid $nav-tabs-active-link-hover-border-color
|
||||
border-bottom-color: transparent
|
||||
cursor: default
|
||||
// pulling this in mainly for less shorthand
|
||||
&.nav-justified
|
||||
@extend .nav-justified
|
||||
@extend .nav-tabs-justified
|
||||
|
||||
// Pills
|
||||
// -------------------------
|
||||
.nav-pills
|
||||
> li
|
||||
float: left
|
||||
// Links rendered as pills
|
||||
> a
|
||||
border-radius: $nav-pills-border-radius
|
||||
+ li
|
||||
margin-left: 2px
|
||||
// Active state
|
||||
&.active > a
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $nav-pills-active-link-hover-color
|
||||
background-color: $nav-pills-active-link-hover-bg
|
||||
.caret
|
||||
border-top-color: $nav-pills-active-link-hover-color
|
||||
border-bottom-color: $nav-pills-active-link-hover-color
|
||||
|
||||
// Stacked pills
|
||||
.nav-stacked
|
||||
> li
|
||||
float: none
|
||||
+ li
|
||||
margin-top: 2px
|
||||
margin-left: 0
|
||||
// no need for this gap between nav items
|
||||
|
||||
// Nav variations
|
||||
// --------------------------------------------------
|
||||
|
||||
// Justified nav links
|
||||
// -------------------------
|
||||
|
||||
.nav-justified
|
||||
width: 100%
|
||||
> li
|
||||
float: none
|
||||
> a
|
||||
text-align: center
|
||||
margin-bottom: 5px
|
||||
> .dropdown .dropdown-menu
|
||||
top: auto
|
||||
left: auto
|
||||
@media (min-width: $screen-sm-min)
|
||||
> li
|
||||
display: table-cell
|
||||
width: 1%
|
||||
> a
|
||||
margin-bottom: 0
|
||||
|
||||
// Move borders to anchors instead of bottom of list
|
||||
//
|
||||
// Mixin for adding on top the shared `.nav-justified` styles for our tabs
|
||||
.nav-tabs-justified
|
||||
border-bottom: 0
|
||||
> li > a
|
||||
// Override margin from .nav-tabs
|
||||
margin-right: 0
|
||||
border-radius: $border-radius-base
|
||||
> .active > a,
|
||||
> .active > a:hover,
|
||||
> .active > a:focus
|
||||
border: 1px solid $nav-tabs-justified-link-border-color
|
||||
@media (min-width: $screen-sm-min)
|
||||
> li > a
|
||||
border-bottom: 1px solid $nav-tabs-justified-link-border-color
|
||||
border-radius: $border-radius-base $border-radius-base 0 0
|
||||
> .active > a,
|
||||
> .active > a:hover,
|
||||
> .active > a:focus
|
||||
border-bottom-color: $nav-tabs-justified-active-link-border-color
|
||||
|
||||
// Tabbable tabs
|
||||
// -------------------------
|
||||
|
||||
// Hide tabbable panes to start, show them when `.active`
|
||||
.tab-content
|
||||
> .tab-pane
|
||||
display: none
|
||||
> .active
|
||||
display: block
|
||||
|
||||
// Dropdowns
|
||||
// -------------------------
|
||||
|
||||
// Make dropdown carets use link color in navs
|
||||
.nav .caret
|
||||
border-top-color: $link-color
|
||||
border-bottom-color: $link-color
|
||||
|
||||
.nav a:hover .caret
|
||||
border-top-color: $link-hover-color
|
||||
border-bottom-color: $link-hover-color
|
||||
|
||||
// Specific dropdowns
|
||||
.nav-tabs .dropdown-menu
|
||||
// make dropdown border overlap tab border
|
||||
margin-top: -1px
|
||||
// Remove the top rounded corners here since there is a hard edge above the menu
|
||||
+border-top-radius(0)
|
||||
@@ -1,384 +0,0 @@
|
||||
/*! normalize.css v2.1.3 | MIT License | git.io/normalize
|
||||
|
||||
// ==========================================================================
|
||||
// HTML5 display definitions
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// Correct `block` display not defined in IE 8/9.
|
||||
//
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary
|
||||
display: block
|
||||
|
||||
//
|
||||
// Correct `inline-block` display not defined in IE 8/9.
|
||||
//
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video
|
||||
display: inline-block
|
||||
|
||||
//
|
||||
// Prevent modern browsers from displaying `audio` without controls.
|
||||
// Remove excess height in iOS 5 devices.
|
||||
//
|
||||
|
||||
audio:not([controls])
|
||||
display: none
|
||||
height: 0
|
||||
|
||||
//
|
||||
// Address `[hidden]` styling not present in IE 8/9.
|
||||
// Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
//
|
||||
|
||||
[hidden],
|
||||
template
|
||||
display: none
|
||||
|
||||
// ==========================================================================
|
||||
// Base
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// 1. Set default font family to sans-serif.
|
||||
// 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
// user zoom.
|
||||
//
|
||||
|
||||
html
|
||||
font-family: sans-serif
|
||||
// 1
|
||||
-ms-text-size-adjust: 100%
|
||||
// 2
|
||||
-webkit-text-size-adjust: 100%
|
||||
// 2
|
||||
|
||||
//
|
||||
// Remove default margin.
|
||||
//
|
||||
|
||||
body
|
||||
margin: 0
|
||||
|
||||
// ==========================================================================
|
||||
// Links
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// Remove the gray background color from active links in IE 10.
|
||||
//
|
||||
|
||||
a
|
||||
background: transparent
|
||||
|
||||
//
|
||||
// Address `outline` inconsistency between Chrome and other browsers.
|
||||
//
|
||||
|
||||
a:focus
|
||||
outline: thin dotted
|
||||
|
||||
//
|
||||
// Improve readability when focused and also mouse hovered in all browsers.
|
||||
//
|
||||
|
||||
a:active,
|
||||
a:hover
|
||||
outline: 0
|
||||
|
||||
// ==========================================================================
|
||||
// Typography
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// Address variable `h1` font-size and margin within `section` and `article`
|
||||
// contexts in Firefox 4+, Safari 5, and Chrome.
|
||||
//
|
||||
|
||||
h1
|
||||
font-size: 2em
|
||||
margin: 0.67em 0
|
||||
|
||||
//
|
||||
// Address styling not present in IE 8/9, Safari 5, and Chrome.
|
||||
//
|
||||
|
||||
abbr[title]
|
||||
border-bottom: 1px dotted
|
||||
|
||||
//
|
||||
// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
//
|
||||
|
||||
b,
|
||||
strong
|
||||
font-weight: bold
|
||||
|
||||
//
|
||||
// Address styling not present in Safari 5 and Chrome.
|
||||
//
|
||||
|
||||
dfn
|
||||
font-style: italic
|
||||
|
||||
//
|
||||
// Address differences between Firefox and other browsers.
|
||||
//
|
||||
|
||||
hr
|
||||
-moz-box-sizing: content-box
|
||||
box-sizing: content-box
|
||||
height: 0
|
||||
|
||||
//
|
||||
// Address styling not present in IE 8/9.
|
||||
//
|
||||
|
||||
mark
|
||||
background: #ff0
|
||||
color: #000
|
||||
|
||||
//
|
||||
// Correct font family set oddly in Safari 5 and Chrome.
|
||||
//
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp
|
||||
font-family: monospace, serif
|
||||
font-size: 1em
|
||||
|
||||
//
|
||||
// Improve readability of pre-formatted text in all browsers.
|
||||
//
|
||||
|
||||
pre
|
||||
white-space: pre-wrap
|
||||
|
||||
//
|
||||
// Set consistent quote types.
|
||||
//
|
||||
|
||||
q
|
||||
quotes: "\201C" "\201D" "\2018" "\2019"
|
||||
|
||||
//
|
||||
// Address inconsistent and variable font size in all browsers.
|
||||
//
|
||||
|
||||
small
|
||||
font-size: 80%
|
||||
|
||||
//
|
||||
// Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
//
|
||||
|
||||
sub,
|
||||
sup
|
||||
font-size: 75%
|
||||
line-height: 0
|
||||
position: relative
|
||||
vertical-align: baseline
|
||||
|
||||
sup
|
||||
top: -0.5em
|
||||
|
||||
sub
|
||||
bottom: -0.25em
|
||||
|
||||
// ==========================================================================
|
||||
// Embedded content
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// Remove border when inside `a` element in IE 8/9.
|
||||
//
|
||||
|
||||
img
|
||||
border: 0
|
||||
|
||||
//
|
||||
// Correct overflow displayed oddly in IE 9.
|
||||
//
|
||||
|
||||
svg:not(:root)
|
||||
overflow: hidden
|
||||
|
||||
// ==========================================================================
|
||||
// Figures
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// Address margin not present in IE 8/9 and Safari 5.
|
||||
//
|
||||
|
||||
figure
|
||||
margin: 0
|
||||
|
||||
// ==========================================================================
|
||||
// Forms
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// Define consistent border, margin, and padding.
|
||||
//
|
||||
|
||||
fieldset
|
||||
border: 1px solid #c0c0c0
|
||||
margin: 0 2px
|
||||
padding: 0.35em 0.625em 0.75em
|
||||
|
||||
//
|
||||
// 1. Correct `color` not being inherited in IE 8/9.
|
||||
// 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
//
|
||||
|
||||
legend
|
||||
border: 0
|
||||
// 1
|
||||
padding: 0
|
||||
// 2
|
||||
|
||||
//
|
||||
// 1. Correct font family not being inherited in all browsers.
|
||||
// 2. Correct font size not being inherited in all browsers.
|
||||
// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
//
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea
|
||||
font-family: inherit
|
||||
// 1
|
||||
font-size: 100%
|
||||
// 2
|
||||
margin: 0
|
||||
// 3
|
||||
|
||||
//
|
||||
// Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
// the UA stylesheet.
|
||||
//
|
||||
|
||||
button,
|
||||
input
|
||||
line-height: normal
|
||||
|
||||
//
|
||||
// Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
// All other form control elements do not inherit `text-transform` values.
|
||||
// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
// Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
//
|
||||
|
||||
button,
|
||||
select
|
||||
text-transform: none
|
||||
|
||||
//
|
||||
// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
// and `video` controls.
|
||||
// 2. Correct inability to style clickable `input` types in iOS.
|
||||
// 3. Improve usability and consistency of cursor style between image-type
|
||||
// `input` and others.
|
||||
//
|
||||
|
||||
button,
|
||||
html input[type="button"],
|
||||
input[type="reset"],
|
||||
input[type="submit"]
|
||||
-webkit-appearance: button
|
||||
// 2
|
||||
cursor: pointer
|
||||
// 3
|
||||
|
||||
//
|
||||
// Re-set default cursor for disabled elements.
|
||||
//
|
||||
|
||||
button[disabled],
|
||||
html input[disabled]
|
||||
cursor: default
|
||||
|
||||
//
|
||||
// 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
// 2. Remove excess padding in IE 8/9/10.
|
||||
//
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"]
|
||||
box-sizing: border-box
|
||||
// 1
|
||||
padding: 0
|
||||
// 2
|
||||
|
||||
//
|
||||
// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
// (include `-moz` to future-proof).
|
||||
//
|
||||
|
||||
input[type="search"]
|
||||
-webkit-appearance: textfield
|
||||
// 1
|
||||
-moz-box-sizing: content-box
|
||||
-webkit-box-sizing: content-box
|
||||
// 2
|
||||
box-sizing: content-box
|
||||
|
||||
//
|
||||
// Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
// on OS X.
|
||||
//
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration
|
||||
-webkit-appearance: none
|
||||
|
||||
//
|
||||
// Remove inner padding and border in Firefox 4+.
|
||||
//
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner
|
||||
border: 0
|
||||
padding: 0
|
||||
|
||||
//
|
||||
// 1. Remove default vertical scrollbar in IE 8/9.
|
||||
// 2. Improve readability and alignment in all browsers.
|
||||
//
|
||||
|
||||
textarea
|
||||
overflow: auto
|
||||
// 1
|
||||
vertical-align: top
|
||||
// 2
|
||||
|
||||
// ==========================================================================
|
||||
// Tables
|
||||
// ==========================================================================
|
||||
|
||||
//
|
||||
// Remove most spacing between table cells.
|
||||
//
|
||||
|
||||
table
|
||||
border-collapse: collapse
|
||||
border-spacing: 0
|
||||
@@ -1,39 +0,0 @@
|
||||
//
|
||||
// Pager pagination
|
||||
// --------------------------------------------------
|
||||
|
||||
.pager
|
||||
padding-left: 0
|
||||
margin: $line-height-computed 0
|
||||
list-style: none
|
||||
text-align: center
|
||||
+clearfix
|
||||
li
|
||||
display: inline
|
||||
> a,
|
||||
> span
|
||||
display: inline-block
|
||||
padding: 5px 14px
|
||||
background-color: $pagination-bg
|
||||
border: 1px solid $pagination-border
|
||||
border-radius: $pager-border-radius
|
||||
> a:hover,
|
||||
> a:focus
|
||||
text-decoration: none
|
||||
background-color: $pagination-hover-bg
|
||||
.next
|
||||
> a,
|
||||
> span
|
||||
float: right
|
||||
.previous
|
||||
> a,
|
||||
> span
|
||||
float: left
|
||||
.disabled
|
||||
> a,
|
||||
> a:hover,
|
||||
> a:focus,
|
||||
> span
|
||||
color: $pager-disabled-color
|
||||
background-color: $pagination-bg
|
||||
cursor: not-allowed
|
||||
@@ -1,68 +0,0 @@
|
||||
//
|
||||
// Pagination (multiple pages)
|
||||
// --------------------------------------------------
|
||||
.pagination
|
||||
display: inline-block
|
||||
padding-left: 0
|
||||
margin: $line-height-computed 0
|
||||
border-radius: $border-radius-base
|
||||
> li
|
||||
display: inline
|
||||
// Remove list-style and block-level defaults
|
||||
> a,
|
||||
> span
|
||||
position: relative
|
||||
float: left
|
||||
// Collapse white-space
|
||||
padding: $padding-base-vertical $padding-base-horizontal
|
||||
line-height: $line-height-base
|
||||
text-decoration: none
|
||||
background-color: $pagination-bg
|
||||
border: 1px solid $pagination-border
|
||||
margin-left: -1px
|
||||
&:first-child
|
||||
> a,
|
||||
> span
|
||||
margin-left: 0
|
||||
+border-left-radius($border-radius-base)
|
||||
&:last-child
|
||||
> a,
|
||||
> span
|
||||
+border-right-radius($border-radius-base)
|
||||
> li > a,
|
||||
> li > span
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: $pagination-hover-bg
|
||||
> .active > a,
|
||||
> .active > span
|
||||
&,
|
||||
&:hover,
|
||||
&:focus
|
||||
z-index: 2
|
||||
color: $pagination-active-color
|
||||
background-color: $pagination-active-bg
|
||||
border-color: $pagination-active-bg
|
||||
cursor: default
|
||||
> .disabled
|
||||
> span,
|
||||
> span:hover,
|
||||
> span:focus,
|
||||
> a,
|
||||
> a:hover,
|
||||
> a:focus
|
||||
color: $pagination-disabled-color
|
||||
background-color: $pagination-bg
|
||||
border-color: $pagination-border
|
||||
cursor: not-allowed
|
||||
|
||||
// Sizing
|
||||
// --------------------------------------------------
|
||||
|
||||
// Large
|
||||
.pagination-lg
|
||||
+pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large)
|
||||
|
||||
// Small
|
||||
.pagination-sm
|
||||
+pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small)
|
||||
@@ -1,132 +0,0 @@
|
||||
//
|
||||
// Panels
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base class
|
||||
.panel
|
||||
margin-bottom: $line-height-computed
|
||||
background-color: $panel-bg
|
||||
border: 1px solid transparent
|
||||
border-radius: $panel-border-radius
|
||||
+box-shadow(0 1px 1px rgba(0, 0, 0, 0.05))
|
||||
|
||||
// Panel contents
|
||||
.panel-body
|
||||
padding: 15px
|
||||
+clearfix
|
||||
|
||||
// List groups in panels
|
||||
//
|
||||
// By default, space out list group content from panel headings to account for
|
||||
// any kind of custom content between the two.
|
||||
|
||||
.panel
|
||||
> .list-group
|
||||
margin-bottom: 0
|
||||
.list-group-item
|
||||
border-width: 1px 0
|
||||
// Remove border radius for top one
|
||||
&:first-child
|
||||
+border-top-radius(0)
|
||||
// But keep it for the last one
|
||||
&:last-child
|
||||
border-bottom: 0
|
||||
|
||||
// Collapse space between when there's no additional content.
|
||||
.panel-heading + .list-group
|
||||
.list-group-item:first-child
|
||||
border-top-width: 0
|
||||
|
||||
// Tables in panels
|
||||
//
|
||||
// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
|
||||
// watch it go full width.
|
||||
|
||||
.panel
|
||||
> .table,
|
||||
> .table-responsive
|
||||
margin-bottom: 0
|
||||
> .panel-body + .table,
|
||||
> .panel-body + .table-responsive
|
||||
border-top: 1px solid $table-border-color
|
||||
> .table-bordered,
|
||||
> .table-responsive > .table-bordered
|
||||
border: 0
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr
|
||||
> th:first-child,
|
||||
> td:first-child
|
||||
border-left: 0
|
||||
> th:last-child,
|
||||
> td:last-child
|
||||
border-right: 0
|
||||
&:last-child > th,
|
||||
&:last-child > td
|
||||
border-bottom: 0
|
||||
|
||||
// Optional heading
|
||||
.panel-heading
|
||||
padding: 10px 15px
|
||||
border-bottom: 1px solid transparent
|
||||
+border-top-radius($panel-border-radius - 1)
|
||||
> .dropdown .dropdown-toggle
|
||||
color: inherit
|
||||
|
||||
// Within heading, strip any `h*` tag of it's default margins for spacing.
|
||||
.panel-title
|
||||
margin-top: 0
|
||||
margin-bottom: 0
|
||||
font-size: ceil($font-size-base * 1.125)
|
||||
> a
|
||||
color: inherit
|
||||
|
||||
// Optional footer (stays gray in every modifier class)
|
||||
.panel-footer
|
||||
padding: 10px 15px
|
||||
background-color: $panel-footer-bg
|
||||
border-top: 1px solid $panel-inner-border
|
||||
+border-bottom-radius($panel-border-radius - 1)
|
||||
|
||||
// Collapsable panels (aka, accordion)
|
||||
//
|
||||
// Wrap a series of panels in `.panel-group` to turn them into an accordion with
|
||||
// the help of our collapse JavaScript plugin.
|
||||
|
||||
.panel-group
|
||||
// Tighten up margin so it's only between panels
|
||||
.panel
|
||||
margin-bottom: 0
|
||||
border-radius: $panel-border-radius
|
||||
overflow: hidden
|
||||
// crop contents when collapsed
|
||||
+ .panel
|
||||
margin-top: 5px
|
||||
.panel-heading
|
||||
border-bottom: 0
|
||||
+ .panel-collapse .panel-body
|
||||
border-top: 1px solid $panel-inner-border
|
||||
.panel-footer
|
||||
border-top: 0
|
||||
+ .panel-collapse .panel-body
|
||||
border-bottom: 1px solid $panel-inner-border
|
||||
|
||||
// Contextual variations
|
||||
.panel-default
|
||||
+panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border)
|
||||
|
||||
.panel-primary
|
||||
+panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border)
|
||||
|
||||
.panel-success
|
||||
+panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border)
|
||||
|
||||
.panel-warning
|
||||
+panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border)
|
||||
|
||||
.panel-danger
|
||||
+panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border)
|
||||
|
||||
.panel-info
|
||||
+panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border)
|
||||
@@ -1,124 +0,0 @@
|
||||
//
|
||||
// Popovers
|
||||
// --------------------------------------------------
|
||||
|
||||
.popover
|
||||
position: absolute
|
||||
top: 0
|
||||
left: 0
|
||||
z-index: $zindex-popover
|
||||
display: none
|
||||
max-width: $popover-max-width
|
||||
padding: 1px
|
||||
text-align: left
|
||||
// Reset given new insertion method
|
||||
background-color: $popover-bg
|
||||
background-clip: padding-box
|
||||
border: 1px solid $popover-fallback-border-color
|
||||
border: 1px solid $popover-border-color
|
||||
border-radius: $border-radius-large
|
||||
+box-shadow(0 5px 10px rgba(0, 0, 0, 0.2))
|
||||
// Overrides for proper insertion
|
||||
white-space: normal
|
||||
// Offset the popover to account for the popover arrow
|
||||
&.top
|
||||
margin-top: -10px
|
||||
&.right
|
||||
margin-left: 10px
|
||||
&.bottom
|
||||
margin-top: 10px
|
||||
&.left
|
||||
margin-left: -10px
|
||||
|
||||
.popover-title
|
||||
margin: 0
|
||||
// reset heading margin
|
||||
padding: 8px 14px
|
||||
font-size: $font-size-base
|
||||
font-weight: normal
|
||||
line-height: 18px
|
||||
background-color: $popover-title-bg
|
||||
border-bottom: 1px solid darken($popover-title-bg, 5%)
|
||||
border-radius: 5px 5px 0 0
|
||||
|
||||
.popover-content
|
||||
padding: 9px 14px
|
||||
|
||||
// Arrows
|
||||
//
|
||||
// .arrow is outer, .arrow:after is inner
|
||||
|
||||
.popover .arrow
|
||||
&,
|
||||
&:after
|
||||
position: absolute
|
||||
display: block
|
||||
width: 0
|
||||
height: 0
|
||||
border-color: transparent
|
||||
border-style: solid
|
||||
|
||||
.popover .arrow
|
||||
border-width: $popover-arrow-outer-width
|
||||
|
||||
.popover .arrow:after
|
||||
border-width: $popover-arrow-width
|
||||
content: ""
|
||||
|
||||
.popover
|
||||
&.top .arrow
|
||||
left: 50%
|
||||
margin-left: -$popover-arrow-outer-width
|
||||
border-bottom-width: 0
|
||||
border-top-color: $popover-arrow-outer-fallback-color
|
||||
// IE8 fallback
|
||||
border-top-color: $popover-arrow-outer-color
|
||||
bottom: -$popover-arrow-outer-width
|
||||
&:after
|
||||
content: " "
|
||||
bottom: 1px
|
||||
margin-left: -$popover-arrow-width
|
||||
border-bottom-width: 0
|
||||
border-top-color: $popover-arrow-color
|
||||
&.right .arrow
|
||||
top: 50%
|
||||
left: -$popover-arrow-outer-width
|
||||
margin-top: -$popover-arrow-outer-width
|
||||
border-left-width: 0
|
||||
border-right-color: $popover-arrow-outer-fallback-color
|
||||
// IE8 fallback
|
||||
border-right-color: $popover-arrow-outer-color
|
||||
&:after
|
||||
content: " "
|
||||
left: 1px
|
||||
bottom: -$popover-arrow-width
|
||||
border-left-width: 0
|
||||
border-right-color: $popover-arrow-color
|
||||
&.bottom .arrow
|
||||
left: 50%
|
||||
margin-left: -$popover-arrow-outer-width
|
||||
border-top-width: 0
|
||||
border-bottom-color: $popover-arrow-outer-fallback-color
|
||||
// IE8 fallback
|
||||
border-bottom-color: $popover-arrow-outer-color
|
||||
top: -$popover-arrow-outer-width
|
||||
&:after
|
||||
content: " "
|
||||
top: 1px
|
||||
margin-left: -$popover-arrow-width
|
||||
border-top-width: 0
|
||||
border-bottom-color: $popover-arrow-color
|
||||
&.left .arrow
|
||||
top: 50%
|
||||
right: -$popover-arrow-outer-width
|
||||
margin-top: -$popover-arrow-outer-width
|
||||
border-right-width: 0
|
||||
border-left-color: $popover-arrow-outer-fallback-color
|
||||
// IE8 fallback
|
||||
border-left-color: $popover-arrow-outer-color
|
||||
&:after
|
||||
content: " "
|
||||
right: 1px
|
||||
border-right-width: 0
|
||||
border-left-color: $popover-arrow-color
|
||||
bottom: -$popover-arrow-width
|
||||
@@ -1,69 +0,0 @@
|
||||
//
|
||||
// Basic print styles
|
||||
// --------------------------------------------------
|
||||
// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
|
||||
|
||||
@media print
|
||||
*
|
||||
text-shadow: none !important
|
||||
color: #000 !important
|
||||
// Black prints faster: h5bp.com/s
|
||||
background: transparent !important
|
||||
box-shadow: none !important
|
||||
a,
|
||||
a:visited
|
||||
text-decoration: underline
|
||||
a[href]:after
|
||||
content: " (" attr(href) ")"
|
||||
abbr[title]:after
|
||||
content: " (" attr(title) ")"
|
||||
// Don't show links for images, or javascript/internal links
|
||||
a[href^="javascript:"]:after,
|
||||
a[href^="#"]:after
|
||||
content: ""
|
||||
pre,
|
||||
blockquote
|
||||
border: 1px solid #999
|
||||
page-break-inside: avoid
|
||||
thead
|
||||
display: table-header-group
|
||||
// h5bp.com/t
|
||||
tr,
|
||||
img
|
||||
page-break-inside: avoid
|
||||
img
|
||||
max-width: 100% !important
|
||||
@page
|
||||
margin: 2cm .5cm
|
||||
|
||||
p,
|
||||
h2,
|
||||
h3
|
||||
orphans: 3
|
||||
widows: 3
|
||||
h2,
|
||||
h3
|
||||
page-break-after: avoid
|
||||
// Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
|
||||
// Once fixed, we can just straight up remove this.
|
||||
select
|
||||
background: #fff !important
|
||||
// Bootstrap components
|
||||
.navbar
|
||||
display: none
|
||||
.table
|
||||
td,
|
||||
th
|
||||
background-color: #fff !important
|
||||
.btn,
|
||||
.dropup > .btn
|
||||
> .caret
|
||||
border-top-color: #000 !important
|
||||
.label
|
||||
border: 1px solid #000
|
||||
.table
|
||||
border-collapse: collapse !important
|
||||
.table-bordered
|
||||
th,
|
||||
td
|
||||
border: 1px solid #ddd !important
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// Progress bars
|
||||
// --------------------------------------------------
|
||||
|
||||
// Bar animations
|
||||
// -------------------------
|
||||
|
||||
// WebKit
|
||||
@-webkit-keyframes progress-bar-stripes
|
||||
from
|
||||
background-position: 40px 0
|
||||
to
|
||||
background-position: 0 0
|
||||
|
||||
|
||||
// Firefox
|
||||
@-moz-keyframes progress-bar-stripes
|
||||
from
|
||||
background-position: 40px 0
|
||||
to
|
||||
background-position: 0 0
|
||||
|
||||
|
||||
// Opera
|
||||
@-o-keyframes progress-bar-stripes
|
||||
from
|
||||
background-position: 0 0
|
||||
to
|
||||
background-position: 40px 0
|
||||
|
||||
|
||||
// Spec and IE10+
|
||||
@keyframes progress-bar-stripes
|
||||
from
|
||||
background-position: 40px 0
|
||||
to
|
||||
background-position: 0 0
|
||||
|
||||
|
||||
// Bar itself
|
||||
// -------------------------
|
||||
|
||||
// Outer container
|
||||
.progress
|
||||
overflow: hidden
|
||||
height: $line-height-computed
|
||||
margin-bottom: $line-height-computed
|
||||
background-color: $progress-bg
|
||||
border-radius: $border-radius-base
|
||||
+box-shadow(inset 0 1px 2px rgba(0, 0, 0, 0.1))
|
||||
|
||||
// Bar of progress
|
||||
.progress-bar
|
||||
float: left
|
||||
width: 0%
|
||||
height: 100%
|
||||
font-size: $font-size-small
|
||||
line-height: $line-height-computed
|
||||
color: $progress-bar-color
|
||||
text-align: center
|
||||
background-color: $progress-bar-bg
|
||||
+box-shadow(inset 0 -1px 0 rgba(0, 0, 0, 0.15))
|
||||
+transition(width 0.6s ease)
|
||||
|
||||
// Striped bars
|
||||
.progress-striped .progress-bar
|
||||
+gradient-striped
|
||||
background-size: 40px 40px
|
||||
|
||||
// Call animation for the active one
|
||||
.progress.active .progress-bar
|
||||
+animation(progress-bar-stripes 2s linear infinite)
|
||||
|
||||
// Variations
|
||||
// -------------------------
|
||||
|
||||
.progress-bar-success
|
||||
+progress-bar-variant($progress-bar-success-bg)
|
||||
|
||||
.progress-bar-info
|
||||
+progress-bar-variant($progress-bar-info-bg)
|
||||
|
||||
.progress-bar-warning
|
||||
+progress-bar-variant($progress-bar-warning-bg)
|
||||
|
||||
.progress-bar-danger
|
||||
+progress-bar-variant($progress-bar-danger-bg)
|
||||
@@ -1,143 +0,0 @@
|
||||
//
|
||||
// Responsive: Utility classes
|
||||
// --------------------------------------------------
|
||||
|
||||
// IE10 in Windows (Phone) 8
|
||||
//
|
||||
// Support for responsive views via media queries is kind of borked in IE10, for
|
||||
// Surface/desktop in split view and for Windows Phone 8. This particular fix
|
||||
// must be accompanied by a snippet of JavaScript to sniff the user agent and
|
||||
// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
|
||||
// our Getting Started page for more information on this bug.
|
||||
//
|
||||
// For more information, see the following:
|
||||
//
|
||||
// Issue: https://github.com/twbs/bootstrap/issues/10497
|
||||
// Docs: http://getbootstrap.com/getting-started/#browsers
|
||||
// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
|
||||
|
||||
@-ms-viewport
|
||||
width: device-width
|
||||
|
||||
|
||||
// Visibility utilities
|
||||
|
||||
+responsive-invisibility(".visible-xs")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-visibility(".visible-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-visibility(".visible-xs.visible-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-visibility(".visible-xs.visible-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-visibility(".visible-xs.visible-lg")
|
||||
|
||||
+responsive-invisibility(".visible-sm")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-visibility(".visible-sm.visible-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-visibility(".visible-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-visibility(".visible-sm.visible-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-visibility(".visible-sm.visible-lg")
|
||||
|
||||
+responsive-invisibility(".visible-md")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-visibility(".visible-md.visible-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-visibility(".visible-md.visible-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-visibility(".visible-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-visibility(".visible-md.visible-lg")
|
||||
|
||||
+responsive-invisibility(".visible-lg")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-visibility(".visible-lg.visible-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-visibility(".visible-lg.visible-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-visibility(".visible-lg.visible-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-visibility(".visible-lg")
|
||||
|
||||
+responsive-visibility(".hidden-xs")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-invisibility(".hidden-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-invisibility(".hidden-xs.hidden-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-invisibility(".hidden-xs.hidden-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-invisibility(".hidden-xs.hidden-lg")
|
||||
|
||||
+responsive-visibility(".hidden-sm")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-invisibility(".hidden-sm.hidden-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-invisibility(".hidden-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-invisibility(".hidden-sm.hidden-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-invisibility(".hidden-sm.hidden-lg")
|
||||
|
||||
+responsive-visibility(".hidden-md")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-invisibility(".hidden-md.hidden-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-invisibility(".hidden-md.hidden-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-invisibility(".hidden-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-invisibility(".hidden-md.hidden-lg")
|
||||
|
||||
+responsive-visibility(".hidden-lg")
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
+responsive-invisibility(".hidden-lg.hidden-xs")
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max)
|
||||
+responsive-invisibility(".hidden-lg.hidden-sm")
|
||||
|
||||
@media (min-width: $screen-md-min) and (max-width: $screen-md-max)
|
||||
+responsive-invisibility(".hidden-lg.hidden-md")
|
||||
|
||||
@media (min-width: $screen-lg-min)
|
||||
+responsive-invisibility(".hidden-lg")
|
||||
|
||||
// Print utilities
|
||||
|
||||
+responsive-invisibility(".visible-print")
|
||||
|
||||
@media print
|
||||
+responsive-visibility(".visible-print")
|
||||
+responsive-invisibility(".hidden-print")
|
||||
@@ -1,98 +0,0 @@
|
||||
//
|
||||
// Scaffolding
|
||||
// --------------------------------------------------
|
||||
|
||||
// Reset the box-sizing
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after
|
||||
+box-sizing(border-box)
|
||||
|
||||
// Body reset
|
||||
|
||||
html
|
||||
font-size: 62.5%
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0)
|
||||
|
||||
body
|
||||
font-family: $font-family-base
|
||||
font-size: $font-size-base
|
||||
line-height: $line-height-base
|
||||
color: $text-color
|
||||
background-color: $body-bg
|
||||
|
||||
// Reset fonts for relevant elements
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea
|
||||
font-family: inherit
|
||||
font-size: inherit
|
||||
line-height: inherit
|
||||
|
||||
// Links
|
||||
|
||||
a
|
||||
color: $link-color
|
||||
text-decoration: none
|
||||
&:hover,
|
||||
&:focus
|
||||
color: $link-hover-color
|
||||
text-decoration: underline
|
||||
&:focus
|
||||
+tab-focus
|
||||
|
||||
// Images
|
||||
|
||||
img
|
||||
vertical-align: middle
|
||||
|
||||
// Responsive images (ensure images don't scale beyond their parents)
|
||||
.img-responsive
|
||||
+img-responsive
|
||||
|
||||
// Rounded corners
|
||||
.img-rounded
|
||||
border-radius: $border-radius-large
|
||||
|
||||
// Image thumbnails
|
||||
//
|
||||
// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
|
||||
.img-thumbnail
|
||||
padding: $thumbnail-padding
|
||||
line-height: $line-height-base
|
||||
background-color: $thumbnail-bg
|
||||
border: 1px solid $thumbnail-border
|
||||
border-radius: $thumbnail-border-radius
|
||||
+transition(all 0.2s ease-in-out)
|
||||
// Keep them at most 100% wide
|
||||
+img-responsive(inline-block)
|
||||
|
||||
// Perfect circle
|
||||
.img-circle
|
||||
border-radius: 50%
|
||||
// set radius in percents
|
||||
|
||||
// Horizontal rules
|
||||
|
||||
hr
|
||||
margin-top: $line-height-computed
|
||||
margin-bottom: $line-height-computed
|
||||
border: 0
|
||||
border-top: 1px solid $hr-border
|
||||
|
||||
// Only display content to screen readers
|
||||
//
|
||||
// See: http://a11yproject.com/posts/how-to-hide-content/
|
||||
|
||||
.sr-only
|
||||
position: absolute
|
||||
width: 1px
|
||||
height: 1px
|
||||
margin: -1px
|
||||
padding: 0
|
||||
overflow: hidden
|
||||
clip: rect(0, 0, 0, 0)
|
||||
border: 0
|
||||
@@ -1,182 +0,0 @@
|
||||
//
|
||||
// Tables
|
||||
// --------------------------------------------------
|
||||
|
||||
table
|
||||
max-width: 100%
|
||||
background-color: $table-bg
|
||||
|
||||
th
|
||||
text-align: left
|
||||
|
||||
// Baseline styles
|
||||
|
||||
.table
|
||||
width: 100%
|
||||
margin-bottom: $line-height-computed
|
||||
// Cells
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr
|
||||
> th,
|
||||
> td
|
||||
padding: $table-cell-padding
|
||||
line-height: $line-height-base
|
||||
vertical-align: top
|
||||
border-top: 1px solid $table-border-color
|
||||
// Bottom align for column headings
|
||||
> thead > tr > th
|
||||
vertical-align: bottom
|
||||
border-bottom: 2px solid $table-border-color
|
||||
// Remove top border from thead by default
|
||||
> caption + thead,
|
||||
> colgroup + thead,
|
||||
> thead:first-child
|
||||
> tr:first-child
|
||||
> th,
|
||||
> td
|
||||
border-top: 0
|
||||
// Account for multiple tbody instances
|
||||
> tbody + tbody
|
||||
border-top: 2px solid $table-border-color
|
||||
// Nesting
|
||||
.table
|
||||
background-color: $body-bg
|
||||
|
||||
// Condensed table w/ half padding
|
||||
|
||||
.table-condensed
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr
|
||||
> th,
|
||||
> td
|
||||
padding: $table-condensed-cell-padding
|
||||
|
||||
// Bordered version
|
||||
//
|
||||
// Add borders all around the table and between all the columns.
|
||||
|
||||
.table-bordered
|
||||
border: 1px solid $table-border-color
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr
|
||||
> th,
|
||||
> td
|
||||
border: 1px solid $table-border-color
|
||||
> thead > tr
|
||||
> th,
|
||||
> td
|
||||
border-bottom-width: 2px
|
||||
|
||||
// Zebra-striping
|
||||
//
|
||||
// Default zebra-stripe styles (alternating gray and transparent backgrounds)
|
||||
|
||||
.table-striped
|
||||
> tbody > tr:nth-child(odd)
|
||||
> td,
|
||||
> th
|
||||
background-color: $table-bg-accent
|
||||
|
||||
// Hover effect
|
||||
//
|
||||
// Placed here since it has to come after the potential zebra striping
|
||||
|
||||
.table-hover
|
||||
> tbody > tr:hover
|
||||
> td,
|
||||
> th
|
||||
background-color: $table-bg-hover
|
||||
|
||||
// Table cell sizing
|
||||
//
|
||||
// Reset default table behavior
|
||||
|
||||
table col[class*="col-"]
|
||||
float: none
|
||||
display: table-column
|
||||
|
||||
table
|
||||
td,
|
||||
th
|
||||
&[class*="col-"]
|
||||
float: none
|
||||
display: table-cell
|
||||
|
||||
// Table backgrounds
|
||||
//
|
||||
// Exact selectors below required to override `.table-striped` and prevent
|
||||
// inheritance to nested tables.
|
||||
|
||||
.table
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr
|
||||
> td.active,
|
||||
> th.active,
|
||||
&.active > td,
|
||||
&.active > th
|
||||
background-color: $table-bg-active
|
||||
|
||||
// Generate the contextual variants
|
||||
+table-row-variant("success", $state-success-bg, $state-success-border)
|
||||
|
||||
+table-row-variant("danger", $state-danger-bg, $state-danger-border)
|
||||
|
||||
+table-row-variant("warning", $state-warning-bg, $state-warning-border)
|
||||
|
||||
// Responsive tables
|
||||
//
|
||||
// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
|
||||
// by enabling horizontal scrolling. Only applies <768px. Everything above that
|
||||
// will display normally.
|
||||
|
||||
@media (max-width: $screen-xs-max)
|
||||
.table-responsive
|
||||
width: 100%
|
||||
margin-bottom: $line-height-computed * 0.75
|
||||
overflow-y: hidden
|
||||
overflow-x: scroll
|
||||
-ms-overflow-style: -ms-autohiding-scrollbar
|
||||
border: 1px solid $table-border-color
|
||||
-webkit-overflow-scrolling: touch
|
||||
// Tighten up spacing
|
||||
> .table
|
||||
margin-bottom: 0
|
||||
// Ensure the content doesn't wrap
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr
|
||||
> th,
|
||||
> td
|
||||
white-space: nowrap
|
||||
// Special overrides for the bordered tables
|
||||
> .table-bordered
|
||||
border: 0
|
||||
// Nuke the appropriate borders so that the parent can handle them
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr
|
||||
> th:first-child,
|
||||
> td:first-child
|
||||
border-left: 0
|
||||
> th:last-child,
|
||||
> td:last-child
|
||||
border-right: 0
|
||||
// Only nuke the last row's bottom-border in `tbody` and `tfoot` since
|
||||
// chances are there will be only one `tr` in a `thead` and that would
|
||||
// remove the border altogether.
|
||||
> tbody,
|
||||
> tfoot
|
||||
> tr:last-child
|
||||
> th,
|
||||
> td
|
||||
border-bottom: 0
|
||||
@@ -1,244 +0,0 @@
|
||||
//
|
||||
// Load core variables and mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@import variables
|
||||
@import mixins
|
||||
|
||||
//
|
||||
// Buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
// Common styles
|
||||
|
||||
.btn-default,
|
||||
.btn-primary,
|
||||
.btn-success,
|
||||
.btn-info,
|
||||
.btn-warning,
|
||||
.btn-danger
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2)
|
||||
$shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075)
|
||||
+box-shadow($shadow)
|
||||
// Reset the shadow
|
||||
&:active,
|
||||
&.active
|
||||
+box-shadow(inset 0 3px 5px rgba(0, 0, 0, 0.125))
|
||||
|
||||
// Mixin for generating new styles
|
||||
=btn-styles($btn-color: #555555)
|
||||
+gradient-vertical($start_color: $btn-color, $end_color: darken($btn-color, 12%))
|
||||
+reset-filter
|
||||
// Disable gradients for IE9 because filter bleeds through rounded corners
|
||||
background-repeat: repeat-x
|
||||
border-color: darken($btn-color, 14%)
|
||||
&:hover,
|
||||
&:focus
|
||||
background-color: darken($btn-color, 12%)
|
||||
background-position: 0 -15px
|
||||
&:active,
|
||||
&.active
|
||||
background-color: darken($btn-color, 12%)
|
||||
border-color: darken($btn-color, 14%)
|
||||
|
||||
// Common styles
|
||||
.btn
|
||||
// Remove the gradient for the pressed/active state
|
||||
&:active,
|
||||
&.active
|
||||
background-image: none
|
||||
|
||||
// Apply the mixin to the buttons
|
||||
.btn-default
|
||||
+btn-styles($btn-default-bg)
|
||||
text-shadow: 0 1px 0 #fff
|
||||
border-color: #ccc
|
||||
|
||||
.btn-primary
|
||||
+btn-styles($btn-primary-bg)
|
||||
|
||||
.btn-success
|
||||
+btn-styles($btn-success-bg)
|
||||
|
||||
.btn-warning
|
||||
+btn-styles($btn-warning-bg)
|
||||
|
||||
.btn-danger
|
||||
+btn-styles($btn-danger-bg)
|
||||
|
||||
.btn-info
|
||||
+btn-styles($btn-info-bg)
|
||||
|
||||
//
|
||||
// Images
|
||||
// --------------------------------------------------
|
||||
|
||||
.thumbnail,
|
||||
.img-thumbnail
|
||||
+box-shadow(0 1px 2px rgba(0, 0, 0, 0.075))
|
||||
|
||||
//
|
||||
// Dropdowns
|
||||
// --------------------------------------------------
|
||||
|
||||
.dropdown-menu > li > a:hover,
|
||||
.dropdown-menu > li > a:focus
|
||||
+gradient-vertical($start_color: $dropdown-link-hover-bg, $end_color: darken($dropdown-link-hover-bg, 5%))
|
||||
background-color: darken($dropdown-link-hover-bg, 5%)
|
||||
|
||||
.dropdown-menu > .active > a,
|
||||
.dropdown-menu > .active > a:hover,
|
||||
.dropdown-menu > .active > a:focus
|
||||
+gradient-vertical($start_color: $dropdown-link-active-bg, $end_color: darken($dropdown-link-active-bg, 5%))
|
||||
background-color: darken($dropdown-link-active-bg, 5%)
|
||||
|
||||
//
|
||||
// Navbar
|
||||
// --------------------------------------------------
|
||||
|
||||
// Default navbar
|
||||
.navbar-default
|
||||
+gradient-vertical($start_color: lighten($navbar-default-bg, 10%), $end_color: $navbar-default-bg)
|
||||
+reset-filter
|
||||
// Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
|
||||
border-radius: $navbar-border-radius
|
||||
$shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075)
|
||||
+box-shadow($shadow)
|
||||
.navbar-nav > .active > a
|
||||
+gradient-vertical($start_color: darken($navbar-default-bg, 5%), $end_color: darken($navbar-default-bg, 2%))
|
||||
+box-shadow(inset 0 3px 9px rgba(0, 0, 0, 0.075))
|
||||
|
||||
.navbar-brand,
|
||||
.navbar-nav > li > a
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25)
|
||||
|
||||
// Inverted navbar
|
||||
.navbar-inverse
|
||||
+gradient-vertical($start_color: lighten($navbar-inverse-bg, 10%), $end_color: $navbar-inverse-bg)
|
||||
+reset-filter
|
||||
// Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
|
||||
.navbar-nav > .active > a
|
||||
+gradient-vertical($start_color: $navbar-inverse-bg, $end_color: lighten($navbar-inverse-bg, 2.5%))
|
||||
+box-shadow(inset 0 3px 9px rgba(0, 0, 0, 0.25))
|
||||
.navbar-brand,
|
||||
.navbar-nav > li > a
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25)
|
||||
|
||||
// Undo rounded corners in static and fixed navbars
|
||||
|
||||
.navbar-static-top,
|
||||
.navbar-fixed-top,
|
||||
.navbar-fixed-bottom
|
||||
border-radius: 0
|
||||
|
||||
//
|
||||
// Alerts
|
||||
// --------------------------------------------------
|
||||
|
||||
// Common styles
|
||||
.alert
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2)
|
||||
$shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05)
|
||||
+box-shadow($shadow)
|
||||
|
||||
// Mixin for generating new styles
|
||||
=alert-styles($color)
|
||||
+gradient-vertical($start_color: $color, $end_color: darken($color, 7.5%))
|
||||
border-color: darken($color, 15%)
|
||||
|
||||
// Apply the mixin to the alerts
|
||||
.alert-success
|
||||
+alert-styles($alert-success-bg)
|
||||
|
||||
.alert-info
|
||||
+alert-styles($alert-info-bg)
|
||||
|
||||
.alert-warning
|
||||
+alert-styles($alert-warning-bg)
|
||||
|
||||
.alert-danger
|
||||
+alert-styles($alert-danger-bg)
|
||||
|
||||
//
|
||||
// Progress bars
|
||||
// --------------------------------------------------
|
||||
|
||||
// Give the progress background some depth
|
||||
.progress
|
||||
+gradient-vertical($start_color: darken($progress-bg, 4%), $end_color: $progress-bg)
|
||||
|
||||
// Mixin for generating new styles
|
||||
=progress-bar-styles($color)
|
||||
+gradient-vertical($start_color: $color, $end_color: darken($color, 10%))
|
||||
|
||||
// Apply the mixin to the progress bars
|
||||
.progress-bar
|
||||
+progress-bar-styles($progress-bar-bg)
|
||||
|
||||
.progress-bar-success
|
||||
+progress-bar-styles($progress-bar-success-bg)
|
||||
|
||||
.progress-bar-info
|
||||
+progress-bar-styles($progress-bar-info-bg)
|
||||
|
||||
.progress-bar-warning
|
||||
+progress-bar-styles($progress-bar-warning-bg)
|
||||
|
||||
.progress-bar-danger
|
||||
+progress-bar-styles($progress-bar-danger-bg)
|
||||
|
||||
//
|
||||
// List groups
|
||||
// --------------------------------------------------
|
||||
|
||||
.list-group
|
||||
border-radius: $border-radius-base
|
||||
+box-shadow(0 1px 2px rgba(0, 0, 0, 0.075))
|
||||
|
||||
.list-group-item.active,
|
||||
.list-group-item.active:hover,
|
||||
.list-group-item.active:focus
|
||||
text-shadow: 0 -1px 0 darken($list-group-active-bg, 10%)
|
||||
+gradient-vertical($start_color: $list-group-active-bg, $end_color: darken($list-group-active-bg, 7.5%))
|
||||
border-color: darken($list-group-active-border, 7.5%)
|
||||
|
||||
//
|
||||
// Panels
|
||||
// --------------------------------------------------
|
||||
|
||||
// Common styles
|
||||
.panel
|
||||
+box-shadow(0 1px 2px rgba(0, 0, 0, 0.05))
|
||||
|
||||
// Mixin for generating new styles
|
||||
=panel-heading-styles($color)
|
||||
+gradient-vertical($start_color: $color, $end_color: darken($color, 5%))
|
||||
|
||||
// Apply the mixin to the panel headings only
|
||||
.panel-default > .panel-heading
|
||||
+panel-heading-styles($panel-default-heading-bg)
|
||||
|
||||
.panel-primary > .panel-heading
|
||||
+panel-heading-styles($panel-primary-heading-bg)
|
||||
|
||||
.panel-success > .panel-heading
|
||||
+panel-heading-styles($panel-success-heading-bg)
|
||||
|
||||
.panel-info > .panel-heading
|
||||
+panel-heading-styles($panel-info-heading-bg)
|
||||
|
||||
.panel-warning > .panel-heading
|
||||
+panel-heading-styles($panel-warning-heading-bg)
|
||||
|
||||
.panel-danger > .panel-heading
|
||||
+panel-heading-styles($panel-danger-heading-bg)
|
||||
|
||||
//
|
||||
// Wells
|
||||
// --------------------------------------------------
|
||||
|
||||
.well
|
||||
+gradient-vertical($start_color: darken($well-bg, 5%), $end_color: $well-bg)
|
||||
border-color: darken($well-bg, 10%)
|
||||
$shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1)
|
||||
+box-shadow($shadow)
|
||||
@@ -1,26 +0,0 @@
|
||||
//
|
||||
// Thumbnails
|
||||
// --------------------------------------------------
|
||||
|
||||
// Mixin and adjust the regular image class
|
||||
.thumbnail
|
||||
@extend .img-thumbnail
|
||||
display: block
|
||||
// Override the inline-block from `.img-thumbnail`
|
||||
margin-bottom: $line-height-computed
|
||||
> img
|
||||
+img-responsive
|
||||
margin-left: auto
|
||||
margin-right: auto
|
||||
// [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active
|
||||
// Image captions
|
||||
.caption
|
||||
padding: $thumbnail-caption-padding
|
||||
color: $thumbnail-caption-color
|
||||
|
||||
// Add a hover state for linked versions only
|
||||
|
||||
a.thumbnail:hover,
|
||||
a.thumbnail:focus,
|
||||
a.thumbnail.active
|
||||
border-color: $link-color
|
||||
@@ -1,91 +0,0 @@
|
||||
//
|
||||
// Tooltips
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base class
|
||||
.tooltip
|
||||
position: absolute
|
||||
z-index: $zindex-tooltip
|
||||
display: block
|
||||
visibility: visible
|
||||
font-size: $font-size-small
|
||||
line-height: 1.4
|
||||
+opacity(0)
|
||||
&.in
|
||||
+opacity(0.9)
|
||||
&.top
|
||||
margin-top: -3px
|
||||
padding: $tooltip-arrow-width 0
|
||||
&.right
|
||||
margin-left: 3px
|
||||
padding: 0 $tooltip-arrow-width
|
||||
&.bottom
|
||||
margin-top: 3px
|
||||
padding: $tooltip-arrow-width 0
|
||||
&.left
|
||||
margin-left: -3px
|
||||
padding: 0 $tooltip-arrow-width
|
||||
|
||||
// Wrapper for the tooltip content
|
||||
.tooltip-inner
|
||||
max-width: $tooltip-max-width
|
||||
padding: 3px 8px
|
||||
color: $tooltip-color
|
||||
text-align: center
|
||||
text-decoration: none
|
||||
background-color: $tooltip-bg
|
||||
border-radius: $border-radius-base
|
||||
|
||||
// Arrows
|
||||
.tooltip-arrow
|
||||
position: absolute
|
||||
width: 0
|
||||
height: 0
|
||||
border-color: transparent
|
||||
border-style: solid
|
||||
|
||||
.tooltip
|
||||
&.top .tooltip-arrow
|
||||
bottom: 0
|
||||
left: 50%
|
||||
margin-left: -$tooltip-arrow-width
|
||||
border-width: $tooltip-arrow-width $tooltip-arrow-width 0
|
||||
border-top-color: $tooltip-arrow-color
|
||||
&.top-left .tooltip-arrow
|
||||
bottom: 0
|
||||
left: $tooltip-arrow-width
|
||||
border-width: $tooltip-arrow-width $tooltip-arrow-width 0
|
||||
border-top-color: $tooltip-arrow-color
|
||||
&.top-right .tooltip-arrow
|
||||
bottom: 0
|
||||
right: $tooltip-arrow-width
|
||||
border-width: $tooltip-arrow-width $tooltip-arrow-width 0
|
||||
border-top-color: $tooltip-arrow-color
|
||||
&.right .tooltip-arrow
|
||||
top: 50%
|
||||
left: 0
|
||||
margin-top: -$tooltip-arrow-width
|
||||
border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0
|
||||
border-right-color: $tooltip-arrow-color
|
||||
&.left .tooltip-arrow
|
||||
top: 50%
|
||||
right: 0
|
||||
margin-top: -$tooltip-arrow-width
|
||||
border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width
|
||||
border-left-color: $tooltip-arrow-color
|
||||
&.bottom .tooltip-arrow
|
||||
top: 0
|
||||
left: 50%
|
||||
margin-left: -$tooltip-arrow-width
|
||||
border-width: 0 $tooltip-arrow-width $tooltip-arrow-width
|
||||
border-bottom-color: $tooltip-arrow-color
|
||||
&.bottom-left .tooltip-arrow
|
||||
top: 0
|
||||
left: $tooltip-arrow-width
|
||||
border-width: 0 $tooltip-arrow-width $tooltip-arrow-width
|
||||
border-bottom-color: $tooltip-arrow-color
|
||||
&.bottom-right .tooltip-arrow
|
||||
top: 0
|
||||
right: $tooltip-arrow-width
|
||||
border-width: 0 $tooltip-arrow-width $tooltip-arrow-width
|
||||
border-bottom-color: $tooltip-arrow-color
|
||||
@@ -1,253 +0,0 @@
|
||||
//
|
||||
// Typography
|
||||
// --------------------------------------------------
|
||||
|
||||
// Body text
|
||||
// -------------------------
|
||||
|
||||
p
|
||||
margin: 0 0 $line-height-computed / 2
|
||||
|
||||
.lead
|
||||
margin-bottom: $line-height-computed
|
||||
font-size: floor($font-size-base * 1.15)
|
||||
font-weight: 200
|
||||
line-height: 1.4
|
||||
@media (min-width: $screen-sm-min)
|
||||
font-size: $font-size-base * 1.5
|
||||
|
||||
// Emphasis & misc
|
||||
// -------------------------
|
||||
|
||||
// Ex: 14px base font * 85% = about 12px
|
||||
|
||||
small,
|
||||
.small
|
||||
font-size: 85%
|
||||
|
||||
// Undo browser default styling
|
||||
cite
|
||||
font-style: normal
|
||||
|
||||
// Contextual emphasis
|
||||
.text-muted
|
||||
color: $text-muted
|
||||
|
||||
.text-primary
|
||||
color: $brand-primary
|
||||
&:hover
|
||||
color: darken($brand-primary, 10%)
|
||||
|
||||
.text-warning
|
||||
color: $state-warning-text
|
||||
&:hover
|
||||
color: darken($state-warning-text, 10%)
|
||||
|
||||
.text-danger
|
||||
color: $state-danger-text
|
||||
&:hover
|
||||
color: darken($state-danger-text, 10%)
|
||||
|
||||
.text-success
|
||||
color: $state-success-text
|
||||
&:hover
|
||||
color: darken($state-success-text, 10%)
|
||||
|
||||
.text-info
|
||||
color: $state-info-text
|
||||
&:hover
|
||||
color: darken($state-info-text, 10%)
|
||||
|
||||
// Alignment
|
||||
.text-left
|
||||
text-align: left
|
||||
|
||||
.text-right
|
||||
text-align: right
|
||||
|
||||
.text-center
|
||||
text-align: center
|
||||
|
||||
// Headings
|
||||
// -------------------------
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6
|
||||
font-family: $headings-font-family
|
||||
font-weight: $headings-font-weight
|
||||
line-height: $headings-line-height
|
||||
color: $headings-color
|
||||
small,
|
||||
.small
|
||||
font-weight: normal
|
||||
line-height: 1
|
||||
color: $headings-small-color
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3
|
||||
margin-top: $line-height-computed
|
||||
margin-bottom: $line-height-computed / 2
|
||||
small,
|
||||
.small
|
||||
font-size: 65%
|
||||
|
||||
h4,
|
||||
h5,
|
||||
h6
|
||||
margin-top: $line-height-computed / 2
|
||||
margin-bottom: $line-height-computed / 2
|
||||
small,
|
||||
.small
|
||||
font-size: 75%
|
||||
|
||||
h1, .h1
|
||||
font-size: $font-size-h1
|
||||
|
||||
h2, .h2
|
||||
font-size: $font-size-h2
|
||||
|
||||
h3, .h3
|
||||
font-size: $font-size-h3
|
||||
|
||||
h4, .h4
|
||||
font-size: $font-size-h4
|
||||
|
||||
h5, .h5
|
||||
font-size: $font-size-h5
|
||||
|
||||
h6, .h6
|
||||
font-size: $font-size-h6
|
||||
|
||||
// Page header
|
||||
// -------------------------
|
||||
|
||||
.page-header
|
||||
padding-bottom: $line-height-computed / 2 - 1
|
||||
margin: $line-height-computed * 2 0 $line-height-computed
|
||||
border-bottom: 1px solid $page-header-border-color
|
||||
|
||||
// Lists
|
||||
// --------------------------------------------------
|
||||
|
||||
// Unordered and Ordered lists
|
||||
|
||||
ul,
|
||||
ol
|
||||
margin-top: 0
|
||||
margin-bottom: $line-height-computed / 2
|
||||
ul,
|
||||
ol
|
||||
margin-bottom: 0
|
||||
|
||||
// List options
|
||||
|
||||
// Unstyled keeps list items block level, just removes default browser padding and list-style
|
||||
.list-unstyled
|
||||
padding-left: 0
|
||||
list-style: none
|
||||
|
||||
// Inline turns list items into inline-block
|
||||
.list-inline
|
||||
@extend .list-unstyled
|
||||
> li
|
||||
display: inline-block
|
||||
padding-left: 5px
|
||||
padding-right: 5px
|
||||
&:first-child
|
||||
padding-left: 0
|
||||
|
||||
// Description Lists
|
||||
dl
|
||||
margin-bottom: $line-height-computed
|
||||
|
||||
dt,
|
||||
dd
|
||||
line-height: $line-height-base
|
||||
|
||||
dt
|
||||
font-weight: bold
|
||||
|
||||
dd
|
||||
margin-left: 0
|
||||
// Undo browser default
|
||||
|
||||
// Horizontal description lists
|
||||
//
|
||||
// Defaults to being stacked without any of the below styles applied, until the
|
||||
// grid breakpoint is reached (default of ~768px).
|
||||
|
||||
@media (min-width: $grid-float-breakpoint)
|
||||
.dl-horizontal
|
||||
dt
|
||||
float: left
|
||||
width: $component-offset-horizontal - 20
|
||||
clear: left
|
||||
text-align: right
|
||||
+text-overflow
|
||||
dd
|
||||
margin-left: $component-offset-horizontal
|
||||
+clearfix
|
||||
// Clear the floated `dt` if an empty `dd` is present
|
||||
|
||||
// MISC
|
||||
// ----
|
||||
|
||||
// Abbreviations and acronyms
|
||||
|
||||
abbr[title],
|
||||
abbr[data-original-title]
|
||||
cursor: help
|
||||
border-bottom: 1px dotted $abbr-border-color
|
||||
|
||||
abbr.initialism
|
||||
font-size: 90%
|
||||
text-transform: uppercase
|
||||
|
||||
// Blockquotes
|
||||
blockquote
|
||||
padding: $line-height-computed / 2 $line-height-computed
|
||||
margin: 0 0 $line-height-computed
|
||||
border-left: 5px solid $blockquote-border-color
|
||||
p
|
||||
font-size: $font-size-base * 1.25
|
||||
font-weight: 300
|
||||
line-height: 1.25
|
||||
p:last-child
|
||||
margin-bottom: 0
|
||||
small
|
||||
display: block
|
||||
line-height: $line-height-base
|
||||
color: $blockquote-small-color
|
||||
&:before
|
||||
content: '\2014 \00A0'
|
||||
// EM DASH, NBSP
|
||||
// Float right with text-align: right
|
||||
&.pull-right
|
||||
padding-right: 15px
|
||||
padding-left: 0
|
||||
border-right: 5px solid $blockquote-border-color
|
||||
border-left: 0
|
||||
p,
|
||||
small,
|
||||
.small
|
||||
text-align: right
|
||||
small,
|
||||
.small
|
||||
&:before
|
||||
content: ''
|
||||
&:after
|
||||
content: '\00A0 \2014'
|
||||
// NBSP, EM DASH
|
||||
|
||||
// Quotes
|
||||
|
||||
blockquote:before,
|
||||
blockquote:after
|
||||
content: ""
|
||||
|
||||
// Addresses
|
||||
address
|
||||
margin-bottom: $line-height-computed
|
||||
font-style: normal
|
||||
line-height: $line-height-base
|
||||
@@ -1,48 +0,0 @@
|
||||
//
|
||||
// Utility classes
|
||||
// --------------------------------------------------
|
||||
|
||||
// Floats
|
||||
// -------------------------
|
||||
|
||||
.clearfix
|
||||
+clearfix
|
||||
|
||||
.center-block
|
||||
+center-block
|
||||
|
||||
.pull-right
|
||||
float: right !important
|
||||
|
||||
.pull-left
|
||||
float: left !important
|
||||
|
||||
// Toggling content
|
||||
// -------------------------
|
||||
|
||||
// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
|
||||
.hide
|
||||
display: none !important
|
||||
|
||||
.show
|
||||
display: block !important
|
||||
|
||||
.invisible
|
||||
visibility: hidden
|
||||
|
||||
.text-hide
|
||||
+text-hide
|
||||
|
||||
// Hide from screenreaders and browsers
|
||||
//
|
||||
// Credit: HTML5 Boilerplate
|
||||
|
||||
.hidden
|
||||
display: none !important
|
||||
visibility: hidden !important
|
||||
|
||||
// For Affix plugin
|
||||
// -------------------------
|
||||
|
||||
.affix
|
||||
position: fixed
|
||||
@@ -1,641 +0,0 @@
|
||||
//
|
||||
// Variables
|
||||
// --------------------------------------------------
|
||||
|
||||
// Global values
|
||||
// --------------------------------------------------
|
||||
|
||||
// Grays
|
||||
// -------------------------
|
||||
|
||||
$gray-darker: lighten(black, 13.5%) !default
|
||||
|
||||
// #222
|
||||
$gray-dark: lighten(black, 20%) !default
|
||||
|
||||
// #333
|
||||
$gray: lighten(black, 33.5%) !default
|
||||
|
||||
// #555
|
||||
$gray-light: lighten(black, 60%) !default
|
||||
|
||||
// #999
|
||||
$gray-lighter: lighten(black, 93.5%) !default
|
||||
|
||||
// #eee
|
||||
|
||||
// Brand colors
|
||||
// -------------------------
|
||||
|
||||
$brand-primary: #428bca !default
|
||||
$brand-success: #5cb85c !default
|
||||
$brand-warning: #f0ad4e !default
|
||||
$brand-danger: #d9534f !default
|
||||
$brand-info: #5bc0de !default
|
||||
|
||||
// Scaffolding
|
||||
// -------------------------
|
||||
|
||||
$body-bg: white !default
|
||||
$text-color: $gray-dark !default
|
||||
|
||||
// Links
|
||||
// -------------------------
|
||||
|
||||
$link-color: $brand-primary !default
|
||||
$link-hover-color: darken($link-color, 15%) !default
|
||||
|
||||
// Typography
|
||||
// -------------------------
|
||||
|
||||
$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif !default
|
||||
$font-family-serif: Georgia, "Times New Roman", Times, serif !default
|
||||
$font-family-monospace: Monaco, Menlo, Consolas, "Courier New", monospace !default
|
||||
$font-family-base: $font-family-sans-serif !default
|
||||
|
||||
$font-size-base: 14px !default
|
||||
$font-size-large: ceil($font-size-base * 1.25) !default
|
||||
|
||||
// ~18px
|
||||
$font-size-small: ceil($font-size-base * 0.85) !default
|
||||
|
||||
// ~12px
|
||||
|
||||
$font-size-h1: floor($font-size-base * 2.6) !default
|
||||
|
||||
// ~36px
|
||||
$font-size-h2: floor($font-size-base * 2.15) !default
|
||||
|
||||
// ~30px
|
||||
$font-size-h3: ceil($font-size-base * 1.7) !default
|
||||
|
||||
// ~24px
|
||||
$font-size-h4: ceil($font-size-base * 1.25) !default
|
||||
|
||||
// ~18px
|
||||
$font-size-h5: $font-size-base !default
|
||||
$font-size-h6: ceil($font-size-base * 0.85) !default
|
||||
|
||||
// ~12px
|
||||
|
||||
$line-height-base: 1.42857 !default
|
||||
|
||||
// 20/14
|
||||
$line-height-computed: floor($font-size-base * $line-height-base) !default
|
||||
|
||||
// ~20px
|
||||
|
||||
$headings-font-family: $font-family-base !default
|
||||
$headings-font-weight: 500 !default
|
||||
$headings-line-height: 1.1 !default
|
||||
$headings-color: inherit !default
|
||||
|
||||
// Iconography
|
||||
// -------------------------
|
||||
|
||||
$icon-font-path: "../fonts/" !default
|
||||
$icon-font-name: "glyphicons-halflings-regular" !default
|
||||
|
||||
// Components
|
||||
// -------------------------
|
||||
// Based on 14px font-size and 1.428 line-height (~20px to start)
|
||||
|
||||
$padding-base-vertical: 6px !default
|
||||
$padding-base-horizontal: 12px !default
|
||||
|
||||
$padding-large-vertical: 10px !default
|
||||
$padding-large-horizontal: 16px !default
|
||||
|
||||
$padding-small-vertical: 5px !default
|
||||
$padding-small-horizontal: 10px !default
|
||||
|
||||
$line-height-large: 1.33 !default
|
||||
$line-height-small: 1.5 !default
|
||||
|
||||
$border-radius-base: 4px !default
|
||||
$border-radius-large: 6px !default
|
||||
$border-radius-small: 3px !default
|
||||
|
||||
$component-active-color: white !default
|
||||
$component-active-bg: $brand-primary !default
|
||||
|
||||
$caret-width-base: 4px !default
|
||||
$caret-width-large: 5px !default
|
||||
|
||||
// Tables
|
||||
// -------------------------
|
||||
|
||||
$table-cell-padding: 8px !default
|
||||
$table-condensed-cell-padding: 5px !default
|
||||
|
||||
$table-bg: transparent !default
|
||||
|
||||
// overall background-color
|
||||
$table-bg-accent: #f9f9f9 !default
|
||||
|
||||
// for striping
|
||||
$table-bg-hover: whitesmoke !default
|
||||
$table-bg-active: $table-bg-hover !default
|
||||
|
||||
$table-border-color: #dddddd !default
|
||||
|
||||
// table and cell border
|
||||
|
||||
// Buttons
|
||||
// -------------------------
|
||||
|
||||
$btn-font-weight: normal !default
|
||||
|
||||
$btn-default-color: #333333 !default
|
||||
$btn-default-bg: white !default
|
||||
$btn-default-border: #cccccc !default
|
||||
|
||||
$btn-primary-color: white !default
|
||||
$btn-primary-bg: $brand-primary !default
|
||||
$btn-primary-border: darken($btn-primary-bg, 5%) !default
|
||||
|
||||
$btn-success-color: white !default
|
||||
$btn-success-bg: $brand-success !default
|
||||
$btn-success-border: darken($btn-success-bg, 5%) !default
|
||||
|
||||
$btn-warning-color: white !default
|
||||
$btn-warning-bg: $brand-warning !default
|
||||
$btn-warning-border: darken($btn-warning-bg, 5%) !default
|
||||
|
||||
$btn-danger-color: white !default
|
||||
$btn-danger-bg: $brand-danger !default
|
||||
$btn-danger-border: darken($btn-danger-bg, 5%) !default
|
||||
|
||||
$btn-info-color: white !default
|
||||
$btn-info-bg: $brand-info !default
|
||||
$btn-info-border: darken($btn-info-bg, 5%) !default
|
||||
|
||||
$btn-link-disabled-color: $gray-light !default
|
||||
|
||||
// Forms
|
||||
// -------------------------
|
||||
|
||||
$input-bg: white !default
|
||||
$input-bg-disabled: $gray-lighter !default
|
||||
|
||||
$input-color: $gray !default
|
||||
$input-border: #cccccc !default
|
||||
$input-border-radius: $border-radius-base !default
|
||||
$input-border-focus: #66afe9 !default
|
||||
|
||||
$input-color-placeholder: $gray-light !default
|
||||
|
||||
$input-height-base: $line-height-computed + $padding-base-vertical * 2 + 2 !default
|
||||
$input-height-large: floor($font-size-large * $line-height-large) + $padding-large-vertical * 2 + 2 !default
|
||||
$input-height-small: floor($font-size-small * $line-height-small) + $padding-small-vertical * 2 + 2 !default
|
||||
|
||||
$legend-color: $gray-dark !default
|
||||
$legend-border-color: #e5e5e5 !default
|
||||
|
||||
$input-group-addon-bg: $gray-lighter !default
|
||||
$input-group-addon-border-color: $input-border !default
|
||||
|
||||
// Dropdowns
|
||||
// -------------------------
|
||||
|
||||
$dropdown-bg: white !default
|
||||
$dropdown-border: rgba(0, 0, 0, 0.15) !default
|
||||
$dropdown-fallback-border: #cccccc !default
|
||||
$dropdown-divider-bg: #e5e5e5 !default
|
||||
|
||||
$dropdown-link-color: $gray-dark !default
|
||||
$dropdown-link-hover-color: darken($gray-dark, 5%) !default
|
||||
$dropdown-link-hover-bg: whitesmoke !default
|
||||
|
||||
$dropdown-link-active-color: $component-active-color !default
|
||||
$dropdown-link-active-bg: $component-active-bg !default
|
||||
|
||||
$dropdown-link-disabled-color: $gray-light !default
|
||||
|
||||
$dropdown-header-color: $gray-light !default
|
||||
|
||||
$dropdown-caret-color: black !default
|
||||
|
||||
// COMPONENT VARIABLES
|
||||
// --------------------------------------------------
|
||||
|
||||
// Z-index master list
|
||||
// -------------------------
|
||||
// Used for a bird's eye view of components dependent on the z-axis
|
||||
// Try to avoid customizing these :)
|
||||
|
||||
$zindex-navbar: 1000 !default
|
||||
$zindex-dropdown: 1000 !default
|
||||
$zindex-popover: 1010 !default
|
||||
$zindex-tooltip: 1030 !default
|
||||
$zindex-navbar-fixed: 1030 !default
|
||||
$zindex-modal-background: 1040 !default
|
||||
$zindex-modal: 1050 !default
|
||||
|
||||
// Media queries breakpoints
|
||||
// --------------------------------------------------
|
||||
|
||||
// Extra small screen / phone
|
||||
// Note: Deprecated $screen-xs and $screen-phone as of v3.0.1
|
||||
$screen-xs: 480px !default
|
||||
$screen-xs-min: $screen-xs !default
|
||||
$screen-phone: $screen-xs-min !default
|
||||
|
||||
// Small screen / tablet
|
||||
// Note: Deprecated $screen-sm and $screen-tablet as of v3.0.1
|
||||
$screen-sm: 768px !default
|
||||
$screen-sm-min: $screen-sm !default
|
||||
$screen-tablet: $screen-sm-min !default
|
||||
|
||||
// Medium screen / desktop
|
||||
// Note: Deprecated $screen-md and $screen-desktop as of v3.0.1
|
||||
$screen-md: 992px !default
|
||||
$screen-md-min: $screen-md !default
|
||||
$screen-desktop: $screen-md-min !default
|
||||
|
||||
// Large screen / wide desktop
|
||||
// Note: Deprecated $screen-lg and $screen-lg-desktop as of v3.0.1
|
||||
$screen-lg: 1200px !default
|
||||
$screen-lg-min: $screen-lg !default
|
||||
$screen-lg-desktop: $screen-lg-min !default
|
||||
|
||||
// So media queries don't overlap when required, provide a maximum
|
||||
$screen-xs-max: $screen-sm-min - 1 !default
|
||||
$screen-sm-max: $screen-md-min - 1 !default
|
||||
$screen-md-max: $screen-lg-min - 1 !default
|
||||
|
||||
// Grid system
|
||||
// --------------------------------------------------
|
||||
|
||||
// Number of columns in the grid system
|
||||
$grid-columns: 12 !default
|
||||
|
||||
// Padding, to be divided by two and applied to the left and right of all columns
|
||||
$grid-gutter-width: 30px !default
|
||||
|
||||
// Point at which the navbar stops collapsing
|
||||
$grid-float-breakpoint: $screen-sm-min !default
|
||||
|
||||
// Navbar
|
||||
// -------------------------
|
||||
|
||||
// Basics of a navbar
|
||||
$navbar-height: 50px !default
|
||||
$navbar-margin-bottom: $line-height-computed !default
|
||||
$navbar-border-radius: $border-radius-base !default
|
||||
$navbar-padding-horizontal: floor($grid-gutter-width / 2) !default
|
||||
$navbar-padding-vertical: ($navbar-height - $line-height-computed) / 2 !default
|
||||
|
||||
$navbar-default-color: #777777 !default
|
||||
$navbar-default-bg: #f8f8f8 !default
|
||||
$navbar-default-border: darken($navbar-default-bg, 6.5%) !default
|
||||
|
||||
// Navbar links
|
||||
$navbar-default-link-color: #777777 !default
|
||||
$navbar-default-link-hover-color: #333333 !default
|
||||
$navbar-default-link-hover-bg: transparent !default
|
||||
$navbar-default-link-active-color: #555555 !default
|
||||
$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default
|
||||
$navbar-default-link-disabled-color: #cccccc !default
|
||||
$navbar-default-link-disabled-bg: transparent !default
|
||||
|
||||
// Navbar brand label
|
||||
$navbar-default-brand-color: $navbar-default-link-color !default
|
||||
$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default
|
||||
$navbar-default-brand-hover-bg: transparent !default
|
||||
|
||||
// Navbar toggle
|
||||
$navbar-default-toggle-hover-bg: #dddddd !default
|
||||
$navbar-default-toggle-icon-bar-bg: #cccccc !default
|
||||
$navbar-default-toggle-border-color: #dddddd !default
|
||||
|
||||
// Inverted navbar
|
||||
//
|
||||
// Reset inverted navbar basics
|
||||
$navbar-inverse-color: $gray-light !default
|
||||
$navbar-inverse-bg: #222222 !default
|
||||
$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default
|
||||
|
||||
// Inverted navbar links
|
||||
$navbar-inverse-link-color: $gray-light !default
|
||||
$navbar-inverse-link-hover-color: white !default
|
||||
$navbar-inverse-link-hover-bg: transparent !default
|
||||
$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default
|
||||
$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default
|
||||
$navbar-inverse-link-disabled-color: #444444 !default
|
||||
$navbar-inverse-link-disabled-bg: transparent !default
|
||||
|
||||
// Inverted navbar brand label
|
||||
$navbar-inverse-brand-color: $navbar-inverse-link-color !default
|
||||
$navbar-inverse-brand-hover-color: white !default
|
||||
$navbar-inverse-brand-hover-bg: transparent !default
|
||||
|
||||
// Inverted navbar toggle
|
||||
$navbar-inverse-toggle-hover-bg: #333333 !default
|
||||
$navbar-inverse-toggle-icon-bar-bg: white !default
|
||||
$navbar-inverse-toggle-border-color: #333333 !default
|
||||
|
||||
// Navs
|
||||
// -------------------------
|
||||
|
||||
$nav-link-padding: 10px 15px !default
|
||||
$nav-link-hover-bg: $gray-lighter !default
|
||||
|
||||
$nav-disabled-link-color: $gray-light !default
|
||||
$nav-disabled-link-hover-color: $gray-light !default
|
||||
|
||||
$nav-open-link-hover-color: white !default
|
||||
$nav-open-caret-border-color: white !default
|
||||
|
||||
// Tabs
|
||||
$nav-tabs-border-color: #dddddd !default
|
||||
|
||||
$nav-tabs-link-hover-border-color: $gray-lighter !default
|
||||
|
||||
$nav-tabs-active-link-hover-bg: $body-bg !default
|
||||
$nav-tabs-active-link-hover-color: $gray !default
|
||||
$nav-tabs-active-link-hover-border-color: #dddddd !default
|
||||
|
||||
$nav-tabs-justified-link-border-color: #dddddd !default
|
||||
$nav-tabs-justified-active-link-border-color: $body-bg !default
|
||||
|
||||
// Pills
|
||||
$nav-pills-border-radius: $border-radius-base !default
|
||||
$nav-pills-active-link-hover-bg: $component-active-bg !default
|
||||
$nav-pills-active-link-hover-color: $component-active-color !default
|
||||
|
||||
// Pagination
|
||||
// -------------------------
|
||||
|
||||
$pagination-bg: white !default
|
||||
$pagination-border: #dddddd !default
|
||||
|
||||
$pagination-hover-bg: $gray-lighter !default
|
||||
|
||||
$pagination-active-bg: $brand-primary !default
|
||||
$pagination-active-color: white !default
|
||||
|
||||
$pagination-disabled-color: $gray-light !default
|
||||
|
||||
// Pager
|
||||
// -------------------------
|
||||
|
||||
$pager-border-radius: 15px !default
|
||||
$pager-disabled-color: $gray-light !default
|
||||
|
||||
// Jumbotron
|
||||
// -------------------------
|
||||
|
||||
$jumbotron-padding: 30px !default
|
||||
$jumbotron-color: inherit !default
|
||||
$jumbotron-bg: $gray-lighter !default
|
||||
$jumbotron-heading-color: inherit !default
|
||||
$jumbotron-font-size: ceil($font-size-base * 1.5) !default
|
||||
|
||||
// Form states and alerts
|
||||
// -------------------------
|
||||
|
||||
$state-success-text: #468847 !default
|
||||
$state-success-bg: #dff0d8 !default
|
||||
$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default
|
||||
|
||||
$state-info-text: #3a87ad !default
|
||||
$state-info-bg: #d9edf7 !default
|
||||
$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default
|
||||
|
||||
$state-warning-text: #c09853 !default
|
||||
$state-warning-bg: #fcf8e3 !default
|
||||
$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default
|
||||
|
||||
$state-danger-text: #b94a48 !default
|
||||
$state-danger-bg: #f2dede !default
|
||||
$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default
|
||||
|
||||
// Tooltips
|
||||
// -------------------------
|
||||
$tooltip-max-width: 200px !default
|
||||
$tooltip-color: white !default
|
||||
$tooltip-bg: black !default
|
||||
|
||||
$tooltip-arrow-width: 5px !default
|
||||
$tooltip-arrow-color: $tooltip-bg !default
|
||||
|
||||
// Popovers
|
||||
// -------------------------
|
||||
$popover-bg: white !default
|
||||
$popover-max-width: 276px !default
|
||||
$popover-border-color: rgba(0, 0, 0, 0.2) !default
|
||||
$popover-fallback-border-color: #cccccc !default
|
||||
|
||||
$popover-title-bg: darken($popover-bg, 3%) !default
|
||||
|
||||
$popover-arrow-width: 10px !default
|
||||
$popover-arrow-color: white !default
|
||||
|
||||
$popover-arrow-outer-width: $popover-arrow-width + 1 !default
|
||||
$popover-arrow-outer-color: rgba(0, 0, 0, 0.25) !default
|
||||
$popover-arrow-outer-fallback-color: #999999 !default
|
||||
|
||||
// Labels
|
||||
// -------------------------
|
||||
|
||||
$label-default-bg: $gray-light !default
|
||||
$label-primary-bg: $brand-primary !default
|
||||
$label-success-bg: $brand-success !default
|
||||
$label-info-bg: $brand-info !default
|
||||
$label-warning-bg: $brand-warning !default
|
||||
$label-danger-bg: $brand-danger !default
|
||||
|
||||
$label-color: white !default
|
||||
$label-link-hover-color: white !default
|
||||
|
||||
// Modals
|
||||
// -------------------------
|
||||
$modal-inner-padding: 20px !default
|
||||
|
||||
$modal-title-padding: 15px !default
|
||||
$modal-title-line-height: $line-height-base !default
|
||||
|
||||
$modal-content-bg: white !default
|
||||
$modal-content-border-color: rgba(0, 0, 0, 0.2) !default
|
||||
$modal-content-fallback-border-color: #999999 !default
|
||||
|
||||
$modal-backdrop-bg: black !default
|
||||
$modal-header-border-color: #e5e5e5 !default
|
||||
$modal-footer-border-color: $modal-header-border-color !default
|
||||
|
||||
// Alerts
|
||||
// -------------------------
|
||||
$alert-padding: 15px !default
|
||||
$alert-border-radius: $border-radius-base !default
|
||||
$alert-link-font-weight: bold !default
|
||||
|
||||
$alert-success-bg: $state-success-bg !default
|
||||
$alert-success-text: $state-success-text !default
|
||||
$alert-success-border: $state-success-border !default
|
||||
|
||||
$alert-info-bg: $state-info-bg !default
|
||||
$alert-info-text: $state-info-text !default
|
||||
$alert-info-border: $state-info-border !default
|
||||
|
||||
$alert-warning-bg: $state-warning-bg !default
|
||||
$alert-warning-text: $state-warning-text !default
|
||||
$alert-warning-border: $state-warning-border !default
|
||||
|
||||
$alert-danger-bg: $state-danger-bg !default
|
||||
$alert-danger-text: $state-danger-text !default
|
||||
$alert-danger-border: $state-danger-border !default
|
||||
|
||||
// Progress bars
|
||||
// -------------------------
|
||||
$progress-bg: whitesmoke !default
|
||||
$progress-bar-color: white !default
|
||||
|
||||
$progress-bar-bg: $brand-primary !default
|
||||
$progress-bar-success-bg: $brand-success !default
|
||||
$progress-bar-warning-bg: $brand-warning !default
|
||||
$progress-bar-danger-bg: $brand-danger !default
|
||||
$progress-bar-info-bg: $brand-info !default
|
||||
|
||||
// List group
|
||||
// -------------------------
|
||||
$list-group-bg: white !default
|
||||
$list-group-border: #dddddd !default
|
||||
$list-group-border-radius: $border-radius-base !default
|
||||
|
||||
$list-group-hover-bg: whitesmoke !default
|
||||
$list-group-active-color: $component-active-color !default
|
||||
$list-group-active-bg: $component-active-bg !default
|
||||
$list-group-active-border: $list-group-active-bg !default
|
||||
|
||||
$list-group-link-color: #555555 !default
|
||||
$list-group-link-heading-color: #333333 !default
|
||||
|
||||
// Panels
|
||||
// -------------------------
|
||||
$panel-bg: white !default
|
||||
$panel-inner-border: #dddddd !default
|
||||
$panel-border-radius: $border-radius-base !default
|
||||
$panel-footer-bg: whitesmoke !default
|
||||
|
||||
$panel-default-text: $gray-dark !default
|
||||
$panel-default-border: #dddddd !default
|
||||
$panel-default-heading-bg: whitesmoke !default
|
||||
|
||||
$panel-primary-text: white !default
|
||||
$panel-primary-border: $brand-primary !default
|
||||
$panel-primary-heading-bg: $brand-primary !default
|
||||
|
||||
$panel-success-text: $state-success-text !default
|
||||
$panel-success-border: $state-success-border !default
|
||||
$panel-success-heading-bg: $state-success-bg !default
|
||||
|
||||
$panel-warning-text: $state-warning-text !default
|
||||
$panel-warning-border: $state-warning-border !default
|
||||
$panel-warning-heading-bg: $state-warning-bg !default
|
||||
|
||||
$panel-danger-text: $state-danger-text !default
|
||||
$panel-danger-border: $state-danger-border !default
|
||||
$panel-danger-heading-bg: $state-danger-bg !default
|
||||
|
||||
$panel-info-text: $state-info-text !default
|
||||
$panel-info-border: $state-info-border !default
|
||||
$panel-info-heading-bg: $state-info-bg !default
|
||||
|
||||
// Thumbnails
|
||||
// -------------------------
|
||||
$thumbnail-padding: 4px !default
|
||||
$thumbnail-bg: $body-bg !default
|
||||
$thumbnail-border: #dddddd !default
|
||||
$thumbnail-border-radius: $border-radius-base !default
|
||||
|
||||
$thumbnail-caption-color: $text-color !default
|
||||
$thumbnail-caption-padding: 9px !default
|
||||
|
||||
// Wells
|
||||
// -------------------------
|
||||
$well-bg: whitesmoke !default
|
||||
|
||||
// Badges
|
||||
// -------------------------
|
||||
$badge-color: white !default
|
||||
$badge-link-hover-color: white !default
|
||||
$badge-bg: $gray-light !default
|
||||
|
||||
$badge-active-color: $link-color !default
|
||||
$badge-active-bg: white !default
|
||||
|
||||
$badge-font-weight: bold !default
|
||||
$badge-line-height: 1 !default
|
||||
$badge-border-radius: 10px !default
|
||||
|
||||
// Breadcrumbs
|
||||
// -------------------------
|
||||
$breadcrumb-bg: whitesmoke !default
|
||||
$breadcrumb-color: #cccccc !default
|
||||
$breadcrumb-active-color: $gray-light !default
|
||||
$breadcrumb-separator: "/" !default
|
||||
|
||||
// Carousel
|
||||
// ------------------------
|
||||
|
||||
$carousel-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6) !default
|
||||
|
||||
$carousel-control-color: white !default
|
||||
$carousel-control-width: 15% !default
|
||||
$carousel-control-opacity: 0.5 !default
|
||||
$carousel-control-font-size: 20px !default
|
||||
|
||||
$carousel-indicator-active-bg: white !default
|
||||
$carousel-indicator-border-color: white !default
|
||||
|
||||
$carousel-caption-color: white !default
|
||||
|
||||
// Close
|
||||
// ------------------------
|
||||
$close-font-weight: bold !default
|
||||
$close-color: black !default
|
||||
$close-text-shadow: 0 1px 0 white !default
|
||||
|
||||
// Code
|
||||
// ------------------------
|
||||
$code-color: #c7254e !default
|
||||
$code-bg: #f9f2f4 !default
|
||||
|
||||
$pre-bg: whitesmoke !default
|
||||
$pre-color: $gray-dark !default
|
||||
$pre-border-color: #cccccc !default
|
||||
$pre-scrollable-max-height: 340px !default
|
||||
|
||||
// Type
|
||||
// ------------------------
|
||||
$text-muted: $gray-light !default
|
||||
$abbr-border-color: $gray-light !default
|
||||
$headings-small-color: $gray-light !default
|
||||
$blockquote-small-color: $gray-light !default
|
||||
$blockquote-border-color: $gray-lighter !default
|
||||
$page-header-border-color: $gray-lighter !default
|
||||
|
||||
// Miscellaneous
|
||||
// -------------------------
|
||||
|
||||
// Hr border color
|
||||
$hr-border: $gray-lighter !default
|
||||
|
||||
// Horizontal forms & lists
|
||||
$component-offset-horizontal: 180px !default
|
||||
|
||||
// Container sizes
|
||||
// --------------------------------------------------
|
||||
|
||||
// Small screen / tablet
|
||||
$container-tablet: 720px + $grid-gutter-width !default
|
||||
$container-sm: $container-tablet !default
|
||||
|
||||
// Medium screen / desktop
|
||||
$container-desktop: 940px + $grid-gutter-width !default
|
||||
$container-md: $container-desktop !default
|
||||
|
||||
// Large screen / wide desktop
|
||||
$container-large-desktop: 1140px + $grid-gutter-width !default
|
||||
$container-lg: $container-large-desktop !default
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// Wells
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base class
|
||||
.well
|
||||
min-height: 20px
|
||||
padding: 19px
|
||||
margin-bottom: 20px
|
||||
background-color: $well-bg
|
||||
border: 1px solid darken($well-bg, 7%)
|
||||
border-radius: $border-radius-base
|
||||
+box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.05))
|
||||
blockquote
|
||||
border-color: #ddd
|
||||
border-color: rgba(0, 0, 0, 0.15)
|
||||
|
||||
// Sizes
|
||||
.well-lg
|
||||
padding: 24px
|
||||
border-radius: $border-radius-large
|
||||
|
||||
.well-sm
|
||||
padding: 9px
|
||||
border-radius: $border-radius-small
|
||||
@@ -1,49 +0,0 @@
|
||||
// Core variables and mixins
|
||||
@import variables
|
||||
@import mixins
|
||||
|
||||
// Reset
|
||||
@import normalize
|
||||
@import print
|
||||
|
||||
// Core CSS
|
||||
@import scaffolding
|
||||
@import type
|
||||
@import code
|
||||
@import grid
|
||||
@import tables
|
||||
@import forms
|
||||
@import buttons
|
||||
|
||||
// Components
|
||||
@import component-animations
|
||||
@import glyphicons
|
||||
@import dropdowns
|
||||
@import button-groups
|
||||
@import input-groups
|
||||
@import navs
|
||||
@import navbar
|
||||
@import breadcrumbs
|
||||
@import pagination
|
||||
@import pager
|
||||
@import labels
|
||||
@import badges
|
||||
@import jumbotron
|
||||
@import thumbnails
|
||||
@import alerts
|
||||
@import progress-bars
|
||||
@import media
|
||||
@import list-group
|
||||
@import panels
|
||||
@import wells
|
||||
@import close
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import modals
|
||||
@import tooltip
|
||||
@import popovers
|
||||
@import carousel
|
||||
|
||||
// Utility classes
|
||||
@import utilities
|
||||
@import responsive-utilities
|
||||
@@ -18,6 +18,9 @@ $shadow-alpha: .5
|
||||
html, body
|
||||
height: 100%
|
||||
font-family: "SourceCodePro"
|
||||
margin: 0
|
||||
padding: 0
|
||||
line-height: 1.2
|
||||
|
||||
body
|
||||
main
|
||||
|
||||
7630
app/static/stylesheets/bootstrap/bootstrap.css
vendored
7630
app/static/stylesheets/bootstrap/bootstrap.css
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,8 +8,7 @@
|
||||
<meta name="author" content="">
|
||||
<link rel="shortcut icon" href="{{ static_url('images/favicon.png') }}">
|
||||
|
||||
<title>Apparatus</title>
|
||||
<link href="{{ static_url('stylesheets/bootstrap/bootstrap.css') }}" rel="stylesheet">
|
||||
<title>Butterfly</title>
|
||||
<link href="{{ static_url('stylesheets/main.css') }}" rel="stylesheet">
|
||||
</head>
|
||||
|
||||
@@ -17,8 +16,6 @@
|
||||
<main>
|
||||
</main>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
|
||||
<script src="{{ static_url('javascripts/bootstrap.min.js') }}"></script>
|
||||
<script src="{{ static_url('javascripts/term.js/src/term.js') }}"></script>
|
||||
<script src="{{ static_url('javascripts/main.js') }}"></script>
|
||||
</body>
|
||||
|
||||
63
butterfly.py
Normal file
63
butterfly.py
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python
|
||||
# *-* coding: utf-8 *-*
|
||||
|
||||
# This file is part of butterfly
|
||||
#
|
||||
# butterfly Copyright (C) 2014 Florian Mounier
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import tornado.options
|
||||
import tornado.ioloop
|
||||
|
||||
tornado.options.define("secret", default='secret', help="Secret")
|
||||
tornado.options.define("debug", default=False, help="Debug mode")
|
||||
tornado.options.define("host", default='127.0.0.1', help="Server host")
|
||||
tornado.options.define("port", default=57575, type=int, help="Server port")
|
||||
tornado.options.define("command", help="Command to execute at login")
|
||||
|
||||
tornado.options.parse_command_line()
|
||||
|
||||
|
||||
from logging import getLogger
|
||||
for logger in ('tornado.access', 'tornado.application',
|
||||
'tornado.general', 'butterfly'):
|
||||
getLogger(logger).setLevel(10 if tornado.options.options.debug else 30)
|
||||
|
||||
log = getLogger('butterfly')
|
||||
log.debug('Starting server')
|
||||
ioloop = tornado.ioloop.IOLoop.instance()
|
||||
|
||||
|
||||
from app import application
|
||||
application.listen(tornado.options.options.port)
|
||||
|
||||
|
||||
url = "http://%s:%d/*" % (
|
||||
tornado.options.options.host, tornado.options.options.port)
|
||||
|
||||
# This is for debugging purpose
|
||||
try:
|
||||
from wsreload.client import sporadic_reload, watch
|
||||
except ImportError:
|
||||
log.debug('wsreload not found')
|
||||
else:
|
||||
sporadic_reload({'url': url})
|
||||
|
||||
files = ['app/static/javascripts/',
|
||||
'app/static/stylesheets/',
|
||||
'app/templates/']
|
||||
watch({'url': url}, files, unwatch_at_exit=True)
|
||||
|
||||
log.debug('Starting loop')
|
||||
ioloop.start()
|
||||
10
butterfly.service
Normal file
10
butterfly.service
Normal file
@@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=Butterfly Terminal Server
|
||||
After=syslog.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/butterfly.py
|
||||
Restart=on-abort
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -10,7 +10,7 @@ commands = [
|
||||
'coffee -wcb -j app/static/javascripts/main.js ' +
|
||||
' '.join(glob('app/static/coffees/*.coffee')),
|
||||
'compass watch app/static',
|
||||
'python serve.py ' + ' '.join(sys.argv[1:])
|
||||
'python butterfly.py ' + ' '.join(sys.argv[1:])
|
||||
]
|
||||
|
||||
|
||||
50
serve.py
50
serve.py
@@ -1,50 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
try:
|
||||
from wdb.ext import add_w_builtin
|
||||
add_w_builtin()
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
import tornado.options
|
||||
import tornado.ioloop
|
||||
|
||||
tornado.options.define("secret", default='secret', help="Secret")
|
||||
tornado.options.define("debug", default=False, help="Debug mode")
|
||||
tornado.options.define("host", default='wsterm.l', help="Server host")
|
||||
tornado.options.define("port", default=11112, type=int, help="Server port")
|
||||
|
||||
tornado.options.parse_command_line()
|
||||
|
||||
|
||||
from logging import getLogger
|
||||
for logger in ('tornado.access', 'tornado.application',
|
||||
'tornado.general', 'wsterm'):
|
||||
getLogger(logger).setLevel(10 if tornado.options.options.debug else 30)
|
||||
|
||||
log = getLogger('wsterm')
|
||||
log.debug('Starting server')
|
||||
ioloop = tornado.ioloop.IOLoop.instance()
|
||||
|
||||
|
||||
from app import application
|
||||
application.listen(tornado.options.options.port)
|
||||
|
||||
|
||||
url = "http://%s:%d/*" % (
|
||||
tornado.options.options.host, tornado.options.options.port)
|
||||
|
||||
try:
|
||||
from wsreload.client import sporadic_reload, watch
|
||||
except ImportError:
|
||||
log.debug('wsreload not found')
|
||||
else:
|
||||
sporadic_reload({'url': url})
|
||||
|
||||
files = ['app/static/javascripts/',
|
||||
'app/static/stylesheets/',
|
||||
'app/templates/']
|
||||
watch({'url': url}, files, unwatch_at_exit=True)
|
||||
|
||||
log.debug('Starting loop')
|
||||
ioloop.start()
|
||||
47
setup.py
Normal file
47
setup.py
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
wdb
|
||||
"""
|
||||
import os
|
||||
import re
|
||||
from setuptools import setup
|
||||
|
||||
ROOT = os.path.dirname(__file__)
|
||||
with open(os.path.join(ROOT, 'app', '__init__.py')) as fd:
|
||||
__version__ = re.search("__version__ = '([^']+)'", fd.read()).group(1)
|
||||
|
||||
options = dict(
|
||||
name="butterfly",
|
||||
version=__version__,
|
||||
description="A sleek web based terminal emulator",
|
||||
long_description="See http://github.com/paradoxxxzero/butterfly",
|
||||
author="Florian Mounier",
|
||||
author_email="paradoxxx.zero@gmail.com",
|
||||
url="http://github.com/paradoxxxzero/butterfly",
|
||||
license="GPLv3",
|
||||
platforms="Any",
|
||||
scripts=['butterfly.py'],
|
||||
packages=['app'],
|
||||
install_requires=["tornado"],
|
||||
package_dir={'butterfly': 'app'},
|
||||
package_data={
|
||||
'app': [
|
||||
'static/fonts/*',
|
||||
'static/stylesheets/main.css',
|
||||
'static/javascripts/term.js/src/term.js',
|
||||
'static/javascripts/main.js',
|
||||
'templates/index.html'
|
||||
]
|
||||
},
|
||||
classifiers=[
|
||||
"Development Status :: 4 - Beta",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
||||
"Operating System :: Linux",
|
||||
"Programming Language :: Python :: 2",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Topic :: Terminals"])
|
||||
|
||||
setup(**options)
|
||||
161
test/conftest.py
161
test/conftest.py
@@ -1,161 +0,0 @@
|
||||
from selenium import webdriver
|
||||
from pytest import fixture
|
||||
from multiprocessing import Process, Lock, active_children
|
||||
from cutter import attr_cut
|
||||
from signal import SIGKILL
|
||||
import atexit
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
|
||||
try:
|
||||
from wdb.ext import add_w_builtin
|
||||
add_w_builtin()
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
display = None
|
||||
fs_path = {}
|
||||
browsers = ['firefox', 'chrome']
|
||||
|
||||
|
||||
def pytest_report_teststatus(report):
|
||||
try:
|
||||
browser = re.search('(\[.*\])', report.nodeid).groups()[0]
|
||||
except:
|
||||
return
|
||||
|
||||
if browser not in fs_path:
|
||||
fs_path[browser] = [report.fspath]
|
||||
sys.stdout.write('\t' + browser + '\t')
|
||||
|
||||
elif report.fspath not in fs_path[browser]:
|
||||
fs_path[browser].append(report.fspath)
|
||||
sys.stdout.write('\t' + browser + '\t')
|
||||
|
||||
|
||||
def pytest_addoption(parser):
|
||||
parser.addoption("--display", action="store_true")
|
||||
parser.addoption("--browser", action="append")
|
||||
|
||||
|
||||
def pytest_configure(config):
|
||||
if not config.getoption("--display"):
|
||||
from pyvirtualdisplay import Display
|
||||
display = Display(visible=0, size=(1440, 900))
|
||||
display.start()
|
||||
if config.getoption("--browser"):
|
||||
browsers[:] = config.getoption("--browser")
|
||||
|
||||
|
||||
class App(Process):
|
||||
def __init__(self):
|
||||
# self.parent_pid = os.getpid()
|
||||
super(App, self).__init__()
|
||||
self.lock = Lock()
|
||||
self.start()
|
||||
|
||||
def run(self):
|
||||
from http.server import HTTPServer
|
||||
old_serve_forever = HTTPServer.serve_forever
|
||||
print('Acquire lock')
|
||||
l = self.lock
|
||||
l.acquire()
|
||||
|
||||
# Inform parent that we are ready
|
||||
def new_serve_forever(self):
|
||||
print('Release lock')
|
||||
l.release()
|
||||
old_serve_forever(self)
|
||||
|
||||
HTTPServer.serve_forever = new_serve_forever
|
||||
os.environ['APP_TESTING'] = 'YES'
|
||||
from app import app
|
||||
|
||||
app.run(
|
||||
debug=True,
|
||||
threaded=True,
|
||||
use_reloader=False,
|
||||
port=29013)
|
||||
|
||||
def wait_for_lock(self):
|
||||
ok = self.lock.acquire(20)
|
||||
if not ok:
|
||||
raise RuntimeError(
|
||||
'Impossible to get app lock.'
|
||||
' App may not have been started successfuly')
|
||||
self.lock.release()
|
||||
|
||||
|
||||
@fixture(scope='session')
|
||||
def app(request):
|
||||
app = App()
|
||||
|
||||
def end_app():
|
||||
app.terminate()
|
||||
|
||||
request.addfinalizer(end_app)
|
||||
return app
|
||||
|
||||
|
||||
class ElementWrapper(object):
|
||||
def __init__(self, element):
|
||||
self.element = element
|
||||
|
||||
def __getattr__(self, attr):
|
||||
if attr in self.__dict__:
|
||||
return getattr(self, attr)
|
||||
return getattr(self.element, attr)
|
||||
|
||||
def find(self, selector):
|
||||
return attr_cut(
|
||||
map(ElementWrapper,
|
||||
self.element.find_elements_by_css_selector(selector)))
|
||||
__call__ = find
|
||||
|
||||
def type(self, keys):
|
||||
self.clear()
|
||||
self.send_keys(keys)
|
||||
|
||||
|
||||
class BrowserWrapper(object):
|
||||
|
||||
def __init__(self, browser):
|
||||
self.browser = browser
|
||||
|
||||
def __getattr__(self, attr):
|
||||
if attr in self.__dict__:
|
||||
return getattr(self, attr)
|
||||
return getattr(self.browser, attr)
|
||||
|
||||
def go(self, url):
|
||||
if url.startswith('/'):
|
||||
url = url[1:]
|
||||
self.browser.get('http://localhost:29013/' + url)
|
||||
|
||||
def __call__(self, selector):
|
||||
return attr_cut(
|
||||
map(ElementWrapper,
|
||||
self.browser.find_elements_by_css_selector(selector)))
|
||||
|
||||
|
||||
@fixture(scope='session', params=browsers)
|
||||
def s(request, app): # s = Selenium Browser
|
||||
browser = getattr(webdriver, request.param.capitalize())()
|
||||
|
||||
def close_browser():
|
||||
browser.close()
|
||||
|
||||
request.addfinalizer(close_browser)
|
||||
app.wait_for_lock()
|
||||
return BrowserWrapper(browser)
|
||||
|
||||
|
||||
@atexit.register
|
||||
def killall():
|
||||
if display:
|
||||
display.stop()
|
||||
for child in active_children():
|
||||
os.kill(child.pid, SIGKILL)
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
def test_not_found(s):
|
||||
s.get('http://localhost:29013/some_random_page')
|
||||
h1 = s.find_element_by_css_selector('h1')
|
||||
assert h1.text == 'Not Found'
|
||||
@@ -1,11 +0,0 @@
|
||||
|
||||
def test_index(s):
|
||||
s.go('/')
|
||||
assert 'Apparatus' in s.title
|
||||
assert s('h1')
|
||||
|
||||
|
||||
def test_index_2(s):
|
||||
s.go('/')
|
||||
assert 'Apparatus' in s.title
|
||||
assert s('ol')
|
||||
@@ -1,3 +0,0 @@
|
||||
|
||||
def test_not_selenium():
|
||||
assert True
|
||||
Reference in New Issue
Block a user