summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadomir Dopieralski <openstack@sheep.art.pl>2014-05-27 09:48:35 +0200
committerRadomir Dopieralski <openstack@sheep.art.pl>2014-05-27 09:48:35 +0200
commitd65969800716f9652340eb7e39e74a6c770dcc04 (patch)
tree3fdc2d7e8a0510b2278776ff5c5c34408224f223
downloadxstatic-bootstrap-scss-d65969800716f9652340eb7e39e74a6c770dcc04.tar.gz
Bootstrap SCSS version 2.0.12.0.1.1
-rw-r--r--.gitignore9
-rw-r--r--MANIFEST.in8
-rw-r--r--README.txt13
-rw-r--r--setup.py27
-rw-r--r--xstatic/__init__.py1
-rw-r--r--xstatic/pkg/__init__.py1
-rw-r--r--xstatic/pkg/bootstrap_scss/__init__.py49
-rw-r--r--xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings-white.pngbin0 -> 4352 bytes
-rw-r--r--xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings.pngbin0 -> 4352 bytes
-rw-r--r--xstatic/pkg/bootstrap_scss/data/js/bootstrap.js1720
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/_bootstrap-responsive.scss318
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/_bootstrap.scss63
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_accordion.scss28
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_alerts.scss62
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_breadcrumbs.scss22
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_button-groups.scss136
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_buttons.scss163
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_carousel.scss116
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_close.scss18
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_code.scss56
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_component-animations.scss18
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_dropdowns.scss126
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_forms.scss463
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_grid.scss8
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_hero-unit.scss20
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_labels.scss32
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_layouts.scss17
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_mixins.scss530
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_modals.scss83
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navbar.scss288
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navs.scss329
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pager.scss30
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pagination.scss53
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_popovers.scss49
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_progress-bars.scss95
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_reset.scss105
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_scaffolding.scss29
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_sprites.scss157
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tables.scss126
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_thumbnails.scss35
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tooltip.scss35
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_type.scss209
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_utilities.scss23
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_variables.scss103
-rw-r--r--xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_wells.scss17
45 files changed, 5790 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b3085b8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+*.pyc
+*.sw?
+*.sqlite3
+.DS_STORE
+*.egg-info
+.venv
+.tox
+build
+dist
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..f94fdab
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,8 @@
+include README.txt
+recursive-include xstatic/pkg/bootstrap_scss *
+
+global-exclude *.pyc
+global-exclude *.pyo
+global-exclude *.orig
+global-exclude *.rej
+
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..e7cff96
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,13 @@
+XStatic-Bootstrap-SCSS
+--------------
+
+Bootstrap style library packaged for setuptools (easy_install) / pip.
+
+This package is intended to be used by **any** project that needs these files.
+
+It intentionally does **not** provide any extra code except some metadata
+**nor** has any extra requirements. You MAY use some minimal support code from
+the XStatic base package, if you like.
+
+You can find more info about the xstatic packaging way in the package `XStatic`.
+
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..00183e1
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,27 @@
+from xstatic.pkg import bootstrap_scss as xs
+
+# The README.txt file should be written in reST so that PyPI can use
+# it to generate your project's PyPI page.
+long_description = open('README.txt').read()
+
+from setuptools import setup, find_packages
+
+setup(
+ name=xs.PACKAGE_NAME,
+ version=xs.PACKAGE_VERSION,
+ description=xs.DESCRIPTION,
+ long_description=long_description,
+ classifiers=xs.CLASSIFIERS,
+ keywords=xs.KEYWORDS,
+ maintainer=xs.MAINTAINER,
+ maintainer_email=xs.MAINTAINER_EMAIL,
+ license=xs.LICENSE,
+ url=xs.HOMEPAGE,
+ platforms=xs.PLATFORMS,
+ packages=find_packages(),
+ namespace_packages=['xstatic', 'xstatic.pkg', ],
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=[], # nothing! :)
+ # if you like, you MAY use the 'XStatic' package.
+)
diff --git a/xstatic/__init__.py b/xstatic/__init__.py
new file mode 100644
index 0000000..de40ea7
--- /dev/null
+++ b/xstatic/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/xstatic/pkg/__init__.py b/xstatic/pkg/__init__.py
new file mode 100644
index 0000000..de40ea7
--- /dev/null
+++ b/xstatic/pkg/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/xstatic/pkg/bootstrap_scss/__init__.py b/xstatic/pkg/bootstrap_scss/__init__.py
new file mode 100644
index 0000000..52fe830
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/__init__.py
@@ -0,0 +1,49 @@
+"""
+XStatic resource package
+
+See package 'XStatic' for documentation and basic tools.
+"""
+
+DISPLAY_NAME = 'Bootstrap-SCSS' # official name, upper/lowercase allowed, no spaces
+PACKAGE_NAME = 'XStatic-%s' % DISPLAY_NAME # name used for PyPi
+
+NAME = __name__.split('.')[-1] # package name (e.g. 'foo' or 'foo_bar')
+ # please use a all-lowercase valid python
+ # package name
+
+VERSION = '2.0.1' # version of the packaged files, please use the upstream
+ # version number
+BUILD = '1' # our package build number, so we can release new builds
+ # with fixes for xstatic stuff.
+PACKAGE_VERSION = VERSION + '.' + BUILD # version used for PyPi
+
+DESCRIPTION = "%s %s (XStatic packaging standard)" % (DISPLAY_NAME, VERSION)
+
+PLATFORMS = 'any'
+CLASSIFIERS = []
+KEYWORDS = '%s xstatic' % NAME
+
+# XStatic-* package maintainer:
+MAINTAINER = 'Radomir Dopieralski'
+MAINTAINER_EMAIL = 'openstack@sheep.art.pl'
+
+# this refers to the project homepage of the stuff we packaged:
+HOMEPAGE = 'http://getbootstrap.org/'
+
+# this refers to all files:
+LICENSE = '(same as %s)' % DISPLAY_NAME
+
+from os.path import join, dirname
+BASE_DIR = join(dirname(__file__), 'data')
+# linux package maintainers just can point to their file locations like this:
+#BASE_DIR = '/usr/share/javascript/bootstrap_scss'
+
+LOCATIONS = {
+ # CDN locations (if no public CDN exists, use an empty dict)
+ # if value is a string, it is a base location, just append relative
+ # path/filename. if value is a dict, do another lookup using the
+ # relative path/filename you want.
+ # your relative path/filenames should usually be without version
+ # information, because either the base dir/url is exactly for this
+ # version or the mapping will care for accessing this version.
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings-white.png b/xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings-white.png
new file mode 100644
index 0000000..a20760b
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings-white.png
Binary files differ
diff --git a/xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings.png b/xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings.png
new file mode 100644
index 0000000..92d4445
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/img/glyphicons-halflings.png
Binary files differ
diff --git a/xstatic/pkg/bootstrap_scss/data/js/bootstrap.js b/xstatic/pkg/bootstrap_scss/data/js/bootstrap.js
new file mode 100644
index 0000000..4412304
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/js/bootstrap.js
@@ -0,0 +1,1720 @@
+/* ===================================================
+ * bootstrap-transition.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#transitions
+ * ===================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function( $ ) {
+
+ $(function () {
+
+ "use strict"
+
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
+ * ======================================================= */
+
+ $.support.transition = (function () {
+ var thisBody = document.body || document.documentElement
+ , thisStyle = thisBody.style
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
+
+ return support && {
+ end: (function () {
+ var transitionEnd = "TransitionEnd"
+ if ( $.browser.webkit ) {
+ transitionEnd = "webkitTransitionEnd"
+ } else if ( $.browser.mozilla ) {
+ transitionEnd = "transitionend"
+ } else if ( $.browser.opera ) {
+ transitionEnd = "oTransitionEnd"
+ }
+ return transitionEnd
+ }())
+ }
+ })()
+
+ })
+
+}( window.jQuery );/* ==========================================================
+ * bootstrap-alert.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* ALERT CLASS DEFINITION
+ * ====================== */
+
+ var dismiss = '[data-dismiss="alert"]'
+ , Alert = function ( el ) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.prototype = {
+
+ constructor: Alert
+
+ , close: function ( e ) {
+ var $this = $(this)
+ , selector = $this.attr('data-target')
+ , $parent
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ $parent = $(selector)
+ $parent.trigger('close')
+
+ e && e.preventDefault()
+
+ $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
+
+ $parent
+ .trigger('close')
+ .removeClass('in')
+
+ function removeElement() {
+ $parent
+ .trigger('closed')
+ .remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent.on($.support.transition.end, removeElement) :
+ removeElement()
+ }
+
+ }
+
+
+ /* ALERT PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.alert = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('alert')
+ if (!data) $this.data('alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.alert.Constructor = Alert
+
+
+ /* ALERT DATA-API
+ * ============== */
+
+ $(function () {
+ $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
+ })
+
+}( window.jQuery );/* ============================================================
+ * bootstrap-button.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+ "use strict"
+
+ /* BUTTON PUBLIC CLASS DEFINITION
+ * ============================== */
+
+ var Button = function ( element, options ) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.button.defaults, options)
+ }
+
+ Button.prototype = {
+
+ constructor: Button
+
+ , setState: function ( state ) {
+ var d = 'disabled'
+ , $el = this.$element
+ , data = $el.data()
+ , val = $el.is('input') ? 'val' : 'html'
+
+ state = state + 'Text'
+ data.resetText || $el.data('resetText', $el[val]())
+
+ $el[val](data[state] || this.options[state])
+
+ // push to event loop to allow forms to submit
+ setTimeout(function () {
+ state == 'loadingText' ?
+ $el.addClass(d).attr(d, d) :
+ $el.removeClass(d).removeAttr(d)
+ }, 0)
+ }
+
+ , toggle: function () {
+ var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
+
+ $parent && $parent
+ .find('.active')
+ .removeClass('active')
+
+ this.$element.toggleClass('active')
+ }
+
+ }
+
+
+ /* BUTTON PLUGIN DEFINITION
+ * ======================== */
+
+ $.fn.button = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('button')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('button', (data = new Button(this, options)))
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ $.fn.button.defaults = {
+ loadingText: 'loading...'
+ }
+
+ $.fn.button.Constructor = Button
+
+
+ /* BUTTON DATA-API
+ * =============== */
+
+ $(function () {
+ $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ $btn.button('toggle')
+ })
+ })
+
+}( window.jQuery );/* ==========================================================
+ * bootstrap-carousel.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* CAROUSEL CLASS DEFINITION
+ * ========================= */
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.carousel.defaults, options)
+ this.options.slide && this.slide(this.options.slide)
+ }
+
+ Carousel.prototype = {
+
+ cycle: function () {
+ this.interval = setInterval($.proxy(this.next, this), this.options.interval)
+ return this
+ }
+
+ , to: function (pos) {
+ var $active = this.$element.find('.active')
+ , children = $active.parent().children()
+ , activePos = children.index($active)
+ , that = this
+
+ if (pos > (children.length - 1) || pos < 0) return
+
+ if (this.sliding) {
+ return this.$element.one('slid', function () {
+ that.to(pos)
+ })
+ }
+
+ if (activePos == pos) {
+ return this.pause().cycle()
+ }
+
+ return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
+ }
+
+ , pause: function () {
+ clearInterval(this.interval)
+ this.interval = null
+ return this
+ }
+
+ , next: function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ , prev: function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ , slide: function (type, next) {
+ var $active = this.$element.find('.active')
+ , $next = next || $active[type]()
+ , isCycling = this.interval
+ , direction = type == 'next' ? 'left' : 'right'
+ , fallback = type == 'next' ? 'first' : 'last'
+ , that = this
+
+ if (!$next.length) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ $next = $next.length ? $next : this.$element.find('.item')[fallback]()
+
+ if (!$.support.transition && this.$element.hasClass('slide')) {
+ this.$element.trigger('slide')
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger('slid')
+ } else {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ this.$element.trigger('slide')
+ this.$element.one($.support.transition.end, function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () { that.$element.trigger('slid') }, 0)
+ })
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+ }
+
+
+ /* CAROUSEL PLUGIN DEFINITION
+ * ========================== */
+
+ $.fn.carousel = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('carousel')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (typeof option == 'string' || (option = options.slide)) data[option]()
+ else data.cycle()
+ })
+ }
+
+ $.fn.carousel.defaults = {
+ interval: 5000
+ }
+
+ $.fn.carousel.Constructor = Carousel
+
+
+ /* CAROUSEL DATA-API
+ * ================= */
+
+ $(function () {
+ $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
+ var $this = $(this), href
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
+ $target.carousel(options)
+ e.preventDefault()
+ })
+ })
+
+}( window.jQuery );/* =============================================================
+ * bootstrap-collapse.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+ "use strict"
+
+ var Collapse = function ( element, options ) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.collapse.defaults, options)
+
+ if (this.options["parent"]) {
+ this.$parent = $(this.options["parent"])
+ }
+
+ this.options.toggle && this.toggle()
+ }
+
+ Collapse.prototype = {
+
+ constructor: Collapse
+
+ , dimension: function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ , show: function () {
+ var dimension = this.dimension()
+ , scroll = $.camelCase(['scroll', dimension].join('-'))
+ , actives = this.$parent && this.$parent.find('.in')
+ , hasData
+
+ if (actives && actives.length) {
+ hasData = actives.data('collapse')
+ actives.collapse('hide')
+ hasData || actives.data('collapse', null)
+ }
+
+ this.$element[dimension](0)
+ this.transition('addClass', 'show', 'shown')
+ this.$element[dimension](this.$element[0][scroll])
+
+ }
+
+ , hide: function () {
+ var dimension = this.dimension()
+ this.reset(this.$element[dimension]())
+ this.transition('removeClass', 'hide', 'hidden')
+ this.$element[dimension](0)
+ }
+
+ , reset: function ( size ) {
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ [dimension](size || 'auto')
+ [0].offsetWidth
+
+ this.$element.addClass('collapse')
+ }
+
+ , transition: function ( method, startEvent, completeEvent ) {
+ var that = this
+ , complete = function () {
+ if (startEvent == 'show') that.reset()
+ that.$element.trigger(completeEvent)
+ }
+
+ this.$element
+ .trigger(startEvent)
+ [method]('in')
+
+ $.support.transition && this.$element.hasClass('collapse') ?
+ this.$element.one($.support.transition.end, complete) :
+ complete()
+ }
+
+ , toggle: function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ }
+
+ /* COLLAPSIBLE PLUGIN DEFINITION
+ * ============================== */
+
+ $.fn.collapse = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('collapse')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.collapse.defaults = {
+ toggle: true
+ }
+
+ $.fn.collapse.Constructor = Collapse
+
+
+ /* COLLAPSIBLE DATA-API
+ * ==================== */
+
+ $(function () {
+ $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
+ var $this = $(this), href
+ , target = $this.attr('data-target')
+ || e.preventDefault()
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+ , option = $(target).data('collapse') ? 'toggle' : $this.data()
+ $(target).collapse(option)
+ })
+ })
+
+}( window.jQuery );/* ============================================================
+ * bootstrap-dropdown.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* DROPDOWN CLASS DEFINITION
+ * ========================= */
+
+ var toggle = '[data-toggle="dropdown"]'
+ , Dropdown = function ( element ) {
+ var $el = $(element).on('click.dropdown.data-api', this.toggle)
+ $('html').on('click.dropdown.data-api', function () {
+ $el.parent().removeClass('open')
+ })
+ }
+
+ Dropdown.prototype = {
+
+ constructor: Dropdown
+
+ , toggle: function ( e ) {
+ var $this = $(this)
+ , selector = $this.attr('data-target')
+ , $parent
+ , isActive
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ $parent = $(selector)
+ $parent.length || ($parent = $this.parent())
+
+ isActive = $parent.hasClass('open')
+
+ clearMenus()
+ !isActive && $parent.toggleClass('open')
+
+ return false
+ }
+
+ }
+
+ function clearMenus() {
+ $(toggle).parent().removeClass('open')
+ }
+
+
+ /* DROPDOWN PLUGIN DEFINITION
+ * ========================== */
+
+ $.fn.dropdown = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('dropdown')
+ if (!data) $this.data('dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ /* APPLY TO STANDARD DROPDOWN ELEMENTS
+ * =================================== */
+
+ $(function () {
+ $('html').on('click.dropdown.data-api', clearMenus)
+ $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ })
+
+}( window.jQuery );/* =========================================================
+ * bootstrap-modal.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#modals
+ * =========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================= */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* MODAL CLASS DEFINITION
+ * ====================== */
+
+ var Modal = function ( content, options ) {
+ this.options = options
+ this.$element = $(content)
+ .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
+ }
+
+ Modal.prototype = {
+
+ constructor: Modal
+
+ , toggle: function () {
+ return this[!this.isShown ? 'show' : 'hide']()
+ }
+
+ , show: function () {
+ var that = this
+
+ if (this.isShown) return
+
+ $('body').addClass('modal-open')
+
+ this.isShown = true
+ this.$element.trigger('show')
+
+ escape.call(this)
+ backdrop.call(this, function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
+
+ that.$element
+ .show()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ transition ?
+ that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
+ that.$element.trigger('shown')
+
+ })
+ }
+
+ , hide: function ( e ) {
+ e && e.preventDefault()
+
+ if (!this.isShown) return
+
+ var that = this
+ this.isShown = false
+
+ $('body').removeClass('modal-open')
+
+ escape.call(this)
+
+ this.$element
+ .trigger('hide')
+ .removeClass('in')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ hideWithTransition.call(this) :
+ hideModal.call(this)
+ }
+
+ }
+
+
+ /* MODAL PRIVATE METHODS
+ * ===================== */
+
+ function hideWithTransition() {
+ var that = this
+ , timeout = setTimeout(function () {
+ that.$element.off($.support.transition.end)
+ hideModal.call(that)
+ }, 500)
+
+ this.$element.one($.support.transition.end, function () {
+ clearTimeout(timeout)
+ hideModal.call(that)
+ })
+ }
+
+ function hideModal( that ) {
+ this.$element
+ .hide()
+ .trigger('hidden')
+
+ backdrop.call(this)
+ }
+
+ function backdrop( callback ) {
+ var that = this
+ , animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+ .appendTo(document.body)
+
+ if (this.options.backdrop != 'static') {
+ this.$backdrop.click($.proxy(this.hide, this))
+ }
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ doAnimate ?
+ this.$backdrop.one($.support.transition.end, callback) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ $.support.transition && this.$element.hasClass('fade')?
+ this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
+ removeBackdrop.call(this)
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ function removeBackdrop() {
+ this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ function escape() {
+ var that = this
+ if (this.isShown && this.options.keyboard) {
+ $(document).on('keyup.dismiss.modal', function ( e ) {
+ e.which == 27 && that.hide()
+ })
+ } else if (!this.isShown) {
+ $(document).off('keyup.dismiss.modal')
+ }
+ }
+
+
+ /* MODAL PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.modal = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('modal')
+ , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
+ if (!data) $this.data('modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option]()
+ else if (options.show) data.show()
+ })
+ }
+
+ $.fn.modal.defaults = {
+ backdrop: true
+ , keyboard: true
+ , show: true
+ }
+
+ $.fn.modal.Constructor = Modal
+
+
+ /* MODAL DATA-API
+ * ============== */
+
+ $(function () {
+ $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
+ var $this = $(this), href
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
+
+ e.preventDefault()
+ $target.modal(option)
+ })
+ })
+
+}( window.jQuery );/* ===========================================================
+ * bootstrap-tooltip.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function( $ ) {
+
+ "use strict"
+
+ /* TOOLTIP PUBLIC CLASS DEFINITION
+ * =============================== */
+
+ var Tooltip = function ( element, options ) {
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.prototype = {
+
+ constructor: Tooltip
+
+ , init: function ( type, element, options ) {
+ var eventIn
+ , eventOut
+
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.enabled = true
+
+ if (this.options.trigger != 'manual') {
+ eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
+ eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
+ this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ , getOptions: function ( options ) {
+ options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay
+ , hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ , enter: function ( e ) {
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+ if (!self.options.delay || !self.options.delay.show) {
+ self.show()
+ } else {
+ self.hoverState = 'in'
+ setTimeout(function() {
+ if (self.hoverState == 'in') {
+ self.show()
+ }
+ }, self.options.delay.show)
+ }
+ }
+
+ , leave: function ( e ) {
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+ if (!self.options.delay || !self.options.delay.hide) {
+ self.hide()
+ } else {
+ self.hoverState = 'out'
+ setTimeout(function() {
+ if (self.hoverState == 'out') {
+ self.hide()
+ }
+ }, self.options.delay.hide)
+ }
+ }
+
+ , show: function () {
+ var $tip
+ , inside
+ , pos
+ , actualWidth
+ , actualHeight
+ , placement
+ , tp
+
+ if (this.hasContent() && this.enabled) {
+ $tip = this.tip()
+ this.setContent()
+
+ if (this.options.animation) {
+ $tip.addClass('fade')
+ }
+
+ placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ inside = /in/.test(placement)
+
+ $tip
+ .remove()
+ .css({ top: 0, left: 0, display: 'block' })
+ .appendTo(inside ? this.$element : document.body)
+
+ pos = this.getPosition(inside)
+
+ actualWidth = $tip[0].offsetWidth
+ actualHeight = $tip[0].offsetHeight
+
+ switch (inside ? placement.split(' ')[1] : placement) {
+ case 'bottom':
+ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
+ break
+ case 'top':
+ tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
+ break
+ case 'left':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
+ break
+ case 'right':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
+ break
+ }
+
+ $tip
+ .css(tp)
+ .addClass(placement)
+ .addClass('in')
+ }
+ }
+
+ , setContent: function () {
+ var $tip = this.tip()
+ $tip.find('.tooltip-inner').html(this.getTitle())
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ , hide: function () {
+ var that = this
+ , $tip = this.tip()
+
+ $tip.removeClass('in')
+
+ function removeWithAnimation() {
+ var timeout = setTimeout(function () {
+ $tip.off($.support.transition.end).remove()
+ }, 500)
+
+ $tip.one($.support.transition.end, function () {
+ clearTimeout(timeout)
+ $tip.remove()
+ })
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ removeWithAnimation() :
+ $tip.remove()
+ }
+
+ , fixTitle: function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
+ }
+ }
+
+ , hasContent: function () {
+ return this.getTitle()
+ }
+
+ , getPosition: function (inside) {
+ return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
+ width: this.$element[0].offsetWidth
+ , height: this.$element[0].offsetHeight
+ })
+ }
+
+ , getTitle: function () {
+ var title
+ , $e = this.$element
+ , o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ title = title.toString().replace(/(^\s*|\s*$)/, "")
+
+ return title
+ }
+
+ , tip: function () {
+ return this.$tip = this.$tip || $(this.options.template)
+ }
+
+ , validate: function () {
+ if (!this.$element[0].parentNode) {
+ this.hide()
+ this.$element = null
+ this.options = null
+ }
+ }
+
+ , enable: function () {
+ this.enabled = true
+ }
+
+ , disable: function () {
+ this.enabled = false
+ }
+
+ , toggleEnabled: function () {
+ this.enabled = !this.enabled
+ }
+
+ , toggle: function () {
+ this[this.tip().hasClass('in') ? 'hide' : 'show']()
+ }
+
+ }
+
+
+ /* TOOLTIP PLUGIN DEFINITION
+ * ========================= */
+
+ $.fn.tooltip = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('tooltip')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tooltip.Constructor = Tooltip
+
+ $.fn.tooltip.defaults = {
+ animation: true
+ , delay: 0
+ , selector: false
+ , placement: 'top'
+ , trigger: 'hover'
+ , title: ''
+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
+ }
+
+}( window.jQuery );/* ===========================================================
+ * bootstrap-popover.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#popovers
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =========================================================== */
+
+
+!function( $ ) {
+
+ "use strict"
+
+ var Popover = function ( element, options ) {
+ this.init('popover', element, options)
+ }
+
+ /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
+ ========================================== */
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
+
+ constructor: Popover
+
+ , setContent: function () {
+ var $tip = this.tip()
+ , title = this.getTitle()
+ , content = this.getContent()
+
+ $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
+ $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+ }
+
+ , hasContent: function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ , getContent: function () {
+ var content
+ , $e = this.$element
+ , o = this.options
+
+ content = $e.attr('data-content')
+ || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
+
+ content = content.toString().replace(/(^\s*|\s*$)/, "")
+
+ return content
+ }
+
+ , tip: function() {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ }
+ return this.$tip
+ }
+
+ })
+
+
+ /* POPOVER PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.popover = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('popover')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.popover.Constructor = Popover
+
+ $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
+ placement: 'right'
+ , content: ''
+ , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
+ })
+
+}( window.jQuery );/* =============================================================
+ * bootstrap-scrollspy.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================== */
+
+!function ( $ ) {
+
+ "use strict"
+
+ /* SCROLLSPY CLASS DEFINITION
+ * ========================== */
+
+ function ScrollSpy( element, options) {
+ var process = $.proxy(this.process, this)
+ , $element = $(element).is('body') ? $(window) : $(element)
+ , href
+ this.options = $.extend({}, $.fn.scrollspy.defaults, options)
+ this.$scrollElement = $element.on('scroll.scroll.data-api', process)
+ this.selector = (this.options.target
+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ || '') + ' .nav li > a'
+ this.$body = $('body').on('click.scroll.data-api', this.selector, process)
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.prototype = {
+
+ constructor: ScrollSpy
+
+ , refresh: function () {
+ this.targets = this.$body
+ .find(this.selector)
+ .map(function () {
+ var href = $(this).attr('href')
+ return /^#\w/.test(href) && $(href).length ? href : null
+ })
+
+ this.offsets = $.map(this.targets, function (id) {
+ return $(id).position().top
+ })
+ }
+
+ , process: function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ , offsets = this.offsets
+ , targets = this.targets
+ , activeTarget = this.activeTarget
+ , i
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate( targets[i] )
+ }
+ }
+
+ , activate: function (target) {
+ var active
+
+ this.activeTarget = target
+
+ this.$body
+ .find(this.selector).parent('.active')
+ .removeClass('active')
+
+ active = this.$body
+ .find(this.selector + '[href="' + target + '"]')
+ .parent('li')
+ .addClass('active')
+
+ if ( active.parent('.dropdown-menu') ) {
+ active.closest('li.dropdown').addClass('active')
+ }
+ }
+
+ }
+
+
+ /* SCROLLSPY PLUGIN DEFINITION
+ * =========================== */
+
+ $.fn.scrollspy = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('scrollspy')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+ $.fn.scrollspy.defaults = {
+ offset: 10
+ }
+
+
+ /* SCROLLSPY DATA-API
+ * ================== */
+
+ $(function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ $spy.scrollspy($spy.data())
+ })
+ })
+
+}( window.jQuery );/* ========================================================
+ * bootstrap-tab.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
+ * ========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================== */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* TAB CLASS DEFINITION
+ * ==================== */
+
+ var Tab = function ( element ) {
+ this.element = $(element)
+ }
+
+ Tab.prototype = {
+
+ constructor: Tab
+
+ , show: function () {
+ var $this = this.element
+ , $ul = $this.closest('ul:not(.dropdown-menu)')
+ , selector = $this.attr('data-target')
+ , previous
+ , $target
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ if ( $this.parent('li').hasClass('active') ) return
+
+ previous = $ul.find('.active a').last()[0]
+
+ $this.trigger({
+ type: 'show'
+ , relatedTarget: previous
+ })
+
+ $target = $(selector)
+
+ this.activate($this.parent('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $this.trigger({
+ type: 'shown'
+ , relatedTarget: previous
+ })
+ })
+ }
+
+ , activate: function ( element, container, callback) {
+ var $active = container.find('> .active')
+ , transition = callback
+ && $.support.transition
+ && $active.hasClass('fade')
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+
+ element.addClass('active')
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if ( element.parent('.dropdown-menu') ) {
+ element.closest('li.dropdown').addClass('active')
+ }
+
+ callback && callback()
+ }
+
+ transition ?
+ $active.one($.support.transition.end, next) :
+ next()
+
+ $active.removeClass('in')
+ }
+ }
+
+
+ /* TAB PLUGIN DEFINITION
+ * ===================== */
+
+ $.fn.tab = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('tab')
+ if (!data) $this.data('tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tab.Constructor = Tab
+
+
+ /* TAB DATA-API
+ * ============ */
+
+ $(function () {
+ $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+ })
+
+}( window.jQuery );/* =============================================================
+ * bootstrap-typeahead.js v2.0.1
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+ "use strict"
+
+ var Typeahead = function ( element, options ) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.typeahead.defaults, options)
+ this.matcher = this.options.matcher || this.matcher
+ this.sorter = this.options.sorter || this.sorter
+ this.highlighter = this.options.highlighter || this.highlighter
+ this.$menu = $(this.options.menu).appendTo('body')
+ this.source = this.options.source
+ this.shown = false
+ this.listen()
+ }
+
+ Typeahead.prototype = {
+
+ constructor: Typeahead
+
+ , select: function () {
+ var val = this.$menu.find('.active').attr('data-value')
+ this.$element.val(val)
+ return this.hide()
+ }
+
+ , show: function () {
+ var pos = $.extend({}, this.$element.offset(), {
+ height: this.$element[0].offsetHeight
+ })
+
+ this.$menu.css({
+ top: pos.top + pos.height
+ , left: pos.left
+ })
+
+ this.$menu.show()
+ this.shown = true
+ return this
+ }
+
+ , hide: function () {
+ this.$menu.hide()
+ this.shown = false
+ return this
+ }
+
+ , lookup: function (event) {
+ var that = this
+ , items
+ , q
+
+ this.query = this.$element.val()
+
+ if (!this.query) {
+ return this.shown ? this.hide() : this
+ }
+
+ items = $.grep(this.source, function (item) {
+ if (that.matcher(item)) return item
+ })
+
+ items = this.sorter(items)
+
+ if (!items.length) {
+ return this.shown ? this.hide() : this
+ }
+
+ return this.render(items.slice(0, this.options.items)).show()
+ }
+
+ , matcher: function (item) {
+ return ~item.toLowerCase().indexOf(this.query.toLowerCase())
+ }
+
+ , sorter: function (items) {
+ var beginswith = []
+ , caseSensitive = []
+ , caseInsensitive = []
+ , item
+
+ while (item = items.shift()) {
+ if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
+ else if (~item.indexOf(this.query)) caseSensitive.push(item)
+ else caseInsensitive.push(item)
+ }
+
+ return beginswith.concat(caseSensitive, caseInsensitive)
+ }
+
+ , highlighter: function (item) {
+ return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
+ return '<strong>' + match + '</strong>'
+ })
+ }
+
+ , render: function (items) {
+ var that = this
+
+ items = $(items).map(function (i, item) {
+ i = $(that.options.item).attr('data-value', item)
+ i.find('a').html(that.highlighter(item))
+ return i[0]
+ })
+
+ items.first().addClass('active')
+ this.$menu.html(items)
+ return this
+ }
+
+ , next: function (event) {
+ var active = this.$menu.find('.active').removeClass('active')
+ , next = active.next()
+
+ if (!next.length) {
+ next = $(this.$menu.find('li')[0])
+ }
+
+ next.addClass('active')
+ }
+
+ , prev: function (event) {
+ var active = this.$menu.find('.active').removeClass('active')
+ , prev = active.prev()
+
+ if (!prev.length) {
+ prev = this.$menu.find('li').last()
+ }
+
+ prev.addClass('active')
+ }
+
+ , listen: function () {
+ this.$element
+ .on('blur', $.proxy(this.blur, this))
+ .on('keypress', $.proxy(this.keypress, this))
+ .on('keyup', $.proxy(this.keyup, this))
+
+ if ($.browser.webkit || $.browser.msie) {
+ this.$element.on('keydown', $.proxy(this.keypress, this))
+ }
+
+ this.$menu
+ .on('click', $.proxy(this.click, this))
+ .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
+ }
+
+ , keyup: function (e) {
+ e.stopPropagation()
+ e.preventDefault()
+
+ switch(e.keyCode) {
+ case 40: // down arrow
+ case 38: // up arrow
+ break
+
+ case 9: // tab
+ case 13: // enter
+ if (!this.shown) return
+ this.select()
+ break
+
+ case 27: // escape
+ this.hide()
+ break
+
+ default:
+ this.lookup()
+ }
+
+ }
+
+ , keypress: function (e) {
+ e.stopPropagation()
+ if (!this.shown) return
+
+ switch(e.keyCode) {
+ case 9: // tab
+ case 13: // enter
+ case 27: // escape
+ e.preventDefault()
+ break
+
+ case 38: // up arrow
+ e.preventDefault()
+ this.prev()
+ break
+
+ case 40: // down arrow
+ e.preventDefault()
+ this.next()
+ break
+ }
+ }
+
+ , blur: function (e) {
+ var that = this
+ e.stopPropagation()
+ e.preventDefault()
+ setTimeout(function () { that.hide() }, 150)
+ }
+
+ , click: function (e) {
+ e.stopPropagation()
+ e.preventDefault()
+ this.select()
+ }
+
+ , mouseenter: function (e) {
+ this.$menu.find('.active').removeClass('active')
+ $(e.currentTarget).addClass('active')
+ }
+
+ }
+
+
+ /* TYPEAHEAD PLUGIN DEFINITION
+ * =========================== */
+
+ $.fn.typeahead = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('typeahead')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.typeahead.defaults = {
+ source: []
+ , items: 8
+ , menu: '<ul class="typeahead dropdown-menu"></ul>'
+ , item: '<li><a href="#"></a></li>'
+ }
+
+ $.fn.typeahead.Constructor = Typeahead
+
+
+ /* TYPEAHEAD DATA-API
+ * ================== */
+
+ $(function () {
+ $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
+ var $this = $(this)
+ if ($this.data('typeahead')) return
+ e.preventDefault()
+ $this.typeahead($this.data())
+ })
+ })
+
+}( window.jQuery ); \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/_bootstrap-responsive.scss b/xstatic/pkg/bootstrap_scss/data/scss/_bootstrap-responsive.scss
new file mode 100644
index 0000000..10f622a
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/_bootstrap-responsive.scss
@@ -0,0 +1,318 @@
+/*!
+ * Bootstrap Responsive v2.0.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ * Converted to SASS by Thomas McDonald
+ */
+
+// Responsive.css.scss
+// For phone and tablet devices
+// -------------------------------------------------------------
+
+
+// REPEAT VARIABLES & MIXINS
+// -------------------------
+// Required since we compile the responsive stuff separately
+
+@import "bootstrap/variables"; // Modify this for custom colors, font-sizes, etc
+@import "bootstrap/mixins";
+
+
+// RESPONSIVE CLASSES
+// ------------------
+
+// Hide from screenreaders and browsers
+// Credit: HTML5 Boilerplate
+.hidden {
+ display: none;
+ visibility: hidden;
+}
+
+
+
+// UP TO LANDSCAPE PHONE
+// ---------------------
+
+@media (max-width: 480px) {
+
+ // Smooth out the collapsing/expanding nav
+ .nav-collapse {
+ -webkit-transform: translate3d(0, 0, 0); // activate the GPU
+ }
+
+ // Block level the page header small tag for readability
+ .page-header h1 small {
+ display: block;
+ line-height: $baseLineHeight;
+ }
+
+ // Make span* classes full width
+ input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input {
+ display: block;
+ width: 100%;
+ min-height: 28px; /* Make inputs at least the height of their button counterpart */
+ /* Makes inputs behave like true block-level elements */
+ -webkit-box-sizing: border-box; /* Older Webkit */
+ -moz-box-sizing: border-box; /* Older FF */
+ -ms-box-sizing: border-box; /* IE8 */
+ box-sizing: border-box; /* CSS3 spec*/
+ }
+ // But don't let it screw up prepend/append inputs
+ .input-prepend input[class*="span"], .input-append input[class*="span"] {
+ width: auto;
+ }
+
+ // Update checkboxes for iOS
+ input[type="checkbox"], input[type="radio"] {
+ border: 1px solid #ccc;
+ }
+
+ // Remove the horizontal form styles
+ .form-horizontal .control-group > label {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ text-align: left;
+ }
+ // Move over all input controls and content
+ .form-horizontal .controls {
+ margin-left: 0;
+ }
+ // Move the options list down to align with labels
+ .form-horizontal .control-list {
+ padding-top: 0; // has to be padding because margin collaspes
+ }
+ // Move over buttons in .form-actions to align with .controls
+ .form-horizontal .form-actions {
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+
+ // Modals
+ .modal {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ right: 10px;
+ width: auto;
+ margin: 0;
+ &.fade.in { top: auto; }
+ }
+ .modal-header .close {
+ padding: 10px;
+ margin: -10px;
+ }
+
+ // Carousel
+ .carousel-caption {
+ position: static;
+ }
+
+}
+
+
+
+// LANDSCAPE PHONE TO SMALL DESKTOP & PORTRAIT TABLET
+// --------------------------------------------------
+
+@media (max-width: 767px) {
+ // GRID & CONTAINERS
+ // -----------------
+ // Remove width from containers
+ .container {
+ width: auto;
+ padding: 0 20px;
+ }
+ // Fluid rows
+ .row-fluid {
+ width: 100%;
+ }
+ // Undo negative margin on rows
+ .row {
+ margin-left: 0;
+ }
+ // Make all columns even
+ .row > [class*="span"], .row-fluid > [class*="span"] {
+ float: none;
+ display: block;
+ width: auto;
+ margin: 0;
+ }
+}
+
+
+
+// PORTRAIT TABLET TO DEFAULT DESKTOP
+// ----------------------------------
+
+@media (min-width: 768px) and (max-width: 979px) {
+
+ // Fixed grid
+ @include gridSystemGenerate(12, 42px, 20px);
+
+ // Fluid grid
+ @include fluidGridSystemGenerate(12, 5.801104972%, 2.762430939%);
+
+ // Input grid
+ @include inputGridSystemGenerate(12, 42px, 20px);
+
+}
+
+
+
+// TABLETS AND BELOW
+// -----------------
+@media (max-width: 979px) {
+
+ // UNFIX THE TOPBAR
+ // ----------------
+ // Remove any padding from the body
+ body {
+ padding-top: 0;
+ }
+ // Unfix the navbar
+ .navbar-fixed-top {
+ position: static;
+ margin-bottom: $baseLineHeight;
+ }
+ .navbar-fixed-top .navbar-inner {
+ padding: 5px;
+ }
+ .navbar .container {
+ width: auto;
+ padding: 0;
+ }
+ // Account for brand name
+ .navbar .brand {
+ padding-left: 10px;
+ padding-right: 10px;
+ margin: 0 0 0 -5px;
+ }
+ // Nav collapse clears brand
+ .navbar .nav-collapse {
+ clear: left;
+ }
+ // Block-level the nav
+ .navbar .nav {
+ float: none;
+ margin: 0 0 ($baseLineHeight / 2);
+ }
+ .navbar .nav > li {
+ float: none;
+ }
+ .navbar .nav > li > a {
+ margin-bottom: 2px;
+ }
+ .navbar .nav > .divider-vertical {
+ display: none;
+ }
+ .navbar .nav .nav-header {
+ color: $navbarText;
+ text-shadow: none;
+ }
+ // Nav and dropdown links in navbar
+ .navbar .nav > li > a, .navbar .dropdown-menu a {
+ padding: 6px 15px;
+ font-weight: bold;
+ color: $navbarLinkColor;
+ @include border-radius(3px);
+ }
+ .navbar .dropdown-menu li + li a {
+ margin-bottom: 2px;
+ }
+ .navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover {
+ background-color: $navbarBackground;
+ }
+ // Dropdowns in the navbar
+ .navbar .dropdown-menu {
+ position: static;
+ top: auto;
+ left: auto;
+ float: none;
+ display: block;
+ max-width: none;
+ margin: 0 15px;
+ padding: 0;
+ background-color: transparent;
+ border: none;
+ @include border-radius(0);
+ @include box-shadow(none);
+ }
+ .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
+ display: none;
+ }
+ .navbar .dropdown-menu .divider {
+ display: none;
+ }
+ // Forms in navbar
+ .navbar-form, .navbar-search {
+ float: none;
+ padding: ($baseLineHeight / 2) 15px;
+ margin: ($baseLineHeight / 2) 0;
+ border-top: 1px solid $navbarBackground;
+ border-bottom: 1px solid $navbarBackground;
+ $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
+ @include box-shadow($shadow);
+ }
+ // Pull right (secondary) nav content
+ .navbar .nav.pull-right {
+ float: none;
+ margin-left: 0;
+ }
+ // Static navbar
+ .navbar-static .navbar-inner {
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+ // Navbar button
+ .btn-navbar {
+ display: block;
+ }
+
+ // Hide everything in the navbar save .brand and toggle button */
+ .nav-collapse {
+ overflow: hidden;
+ height: 0;
+ }
+}
+
+
+
+// DEFAULT DESKTOP
+// ---------------
+
+@media (min-width: 980px) {
+ .nav-collapse.collapse {
+ height: auto !important;
+ }
+}
+
+
+
+// LARGE DESKTOP & UP
+// ------------------
+
+@media (min-width: 1200px) {
+
+ // Fixed grid
+ @include gridSystemGenerate(12, 70px, 30px);
+
+ // Fluid grid
+ @include fluidGridSystemGenerate(12, 5.982905983%, 2.564102564%);
+
+ // Input grid
+ @include inputGridSystemGenerate(12, 70px, 30px);
+
+ // Thumbnails
+ .thumbnails {
+ margin-left: -30px;
+ }
+ .thumbnails > li {
+ margin-left: 30px;
+ }
+
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/_bootstrap.scss b/xstatic/pkg/bootstrap_scss/data/scss/_bootstrap.scss
new file mode 100644
index 0000000..e3b60c6
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/_bootstrap.scss
@@ -0,0 +1,63 @@
+/*!
+ * Bootstrap 2.0.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ * Converted to SASS by Thomas McDonald
+ */
+
+// Core variables and mixins
+@import "bootstrap/variables"; // Modify this for custom colors, font-sizes, etc
+@import "bootstrap/mixins";
+
+// CSS Reset
+@import "bootstrap/reset";
+
+// Grid system and page structure
+@import "bootstrap/scaffolding";
+@import "bootstrap/grid";
+@import "bootstrap/layouts";
+
+// Base CSS
+@import "bootstrap/type";
+@import "bootstrap/code";
+@import "bootstrap/forms";
+@import "bootstrap/tables";
+
+// Components: common
+@import "bootstrap/sprites";
+@import "bootstrap/dropdowns";
+@import "bootstrap/wells";
+@import "bootstrap/component-animations";
+@import "bootstrap/close";
+
+// Components: Buttons & Alerts
+@import "bootstrap/buttons";
+@import "bootstrap/button-groups";
+@import "bootstrap/alerts"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
+
+// Components: Nav
+@import "bootstrap/navs";
+@import "bootstrap/navbar";
+@import "bootstrap/breadcrumbs";
+@import "bootstrap/pagination";
+@import "bootstrap/pager";
+
+// Components: Popovers
+@import "bootstrap/modals";
+@import "bootstrap/tooltip";
+@import "bootstrap/popovers";
+
+// Components: Misc
+@import "bootstrap/thumbnails";
+@import "bootstrap/labels";
+@import "bootstrap/progress-bars";
+@import "bootstrap/accordion";
+@import "bootstrap/carousel";
+@import "bootstrap/hero-unit";
+
+// Utility classes
+@import "bootstrap/utilities"; // Has to be last to override when necessary \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_accordion.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_accordion.scss
new file mode 100644
index 0000000..bb19943
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_accordion.scss
@@ -0,0 +1,28 @@
+// ACCORDION
+// ---------
+
+
+// Parent container
+.accordion {
+ margin-bottom: $baseLineHeight;
+}
+
+// Group == heading + body
+.accordion-group {
+ margin-bottom: 2px;
+ border: 1px solid #e5e5e5;
+ @include border-radius(4px);
+}
+.accordion-heading {
+ border-bottom: 0;
+}
+.accordion-heading .accordion-toggle {
+ display: block;
+ padding: 8px 15px;
+}
+
+// Inner needs the styles because you can't animate properly with any styles on the element
+.accordion-inner {
+ padding: 9px 15px;
+ border-top: 1px solid #e5e5e5;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_alerts.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_alerts.scss
new file mode 100644
index 0000000..a219ab9
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_alerts.scss
@@ -0,0 +1,62 @@
+// ALERT STYLES
+// ------------
+
+// Base alert styles
+.alert {
+ padding: 8px 35px 8px 14px;
+ margin-bottom: $baseLineHeight;
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
+ background-color: $warningBackground;
+ border: 1px solid $warningBorder;
+ @include border-radius(4px);
+}
+.alert, .alert-heading {
+ color: $warningText;
+}
+
+// Adjust close link position
+.alert .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ line-height: 18px;
+}
+
+// Alternate styles
+// ----------------
+
+.alert-success {
+ background-color: $successBackground;
+ border-color: $successBorder;
+}
+.alert-success, .alert-success .alert-heading {
+ color: $successText;
+}
+.alert-danger, .alert-error {
+ background-color: $errorBackground;
+ border-color: $errorBorder;
+}
+.alert-danger, .alert-error, .alert-danger .alert-heading, .alert-error .alert-heading {
+ color: $errorText;
+}
+.alert-info {
+ background-color: $infoBackground;
+ border-color: $infoBorder;
+}
+.alert-info, .alert-info .alert-heading {
+ color: $infoText;
+}
+
+
+// Block alerts
+// ------------------------
+.alert-block {
+ padding-top: 14px;
+ padding-bottom: 14px;
+}
+.alert-block > p, .alert-block > ul {
+ margin-bottom: 0;
+}
+.alert-block p + p {
+ margin-top: 5px;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_breadcrumbs.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_breadcrumbs.scss
new file mode 100644
index 0000000..2effdeb
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_breadcrumbs.scss
@@ -0,0 +1,22 @@
+// BREADCRUMBS
+// -----------
+
+.breadcrumb {
+ padding: 7px 14px;
+ margin: 0 0 $baseLineHeight;
+ @include gradient-vertical($white, #f5f5f5);
+ border: 1px solid #ddd;
+ @include border-radius(3px);
+ @include box-shadow(inset 0 1px 0 $white);
+ li {
+ display: inline-block;
+ text-shadow: 0 1px 0 $white;
+ }
+ .divider {
+ padding: 0 5px;
+ color: $grayLight;
+ }
+ .active a {
+ color: $grayDark;
+ }
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_button-groups.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_button-groups.scss
new file mode 100644
index 0000000..771d54d
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_button-groups.scss
@@ -0,0 +1,136 @@
+// BUTTON GROUPS
+// -------------
+
+
+// Make the div behave like a button
+.btn-group {
+ position: relative;
+ @include clearfix(); // clears the floated buttons
+ @include ie7-restore-left-whitespace();
+}
+
+// Space out series of button groups
+.btn-group + .btn-group {
+ margin-left: 5px;
+}
+
+// Optional: Group multiple button groups together for a toolbar
+.btn-toolbar {
+ margin-top: $baseLineHeight / 2;
+ margin-bottom: $baseLineHeight / 2;
+ .btn-group {
+ display: inline-block;
+ @include ie7-inline-block();
+ }
+}
+
+// Float them, remove border radius, then re-add to first and last elements
+.btn-group .btn {
+ position: relative;
+ float: left;
+ margin-left: -1px;
+ @include 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;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ border-top-left-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ border-bottom-left-radius: 4px;
+}
+.btn-group .btn:last-child, .btn-group .dropdown-toggle {
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ border-bottom-right-radius: 4px;
+}
+// Reset corners for large buttons
+.btn-group .btn.large:first-child {
+ margin-left: 0;
+ -webkit-border-top-left-radius: 6px;
+ -moz-border-radius-topleft: 6px;
+ border-top-left-radius: 6px;
+ -webkit-border-bottom-left-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ border-bottom-left-radius: 6px;
+}
+.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
+ -webkit-border-top-right-radius: 6px;
+ -moz-border-radius-topright: 6px;
+ border-top-right-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ -moz-border-radius-bottomright: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+// On hover/focus/active, bring the proper btn to front
+.btn-group .btn:hover, .btn-group .btn:focus, .btn-group .btn:active, .btn-group .btn.active {
+ z-index: 2;
+}
+
+// On active and open, don't show outline
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+
+
+// Split button dropdowns
+// ----------------------
+
+// Give the line between buttons some depth
+.btn-group .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+ $shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+ @include box-shadow($shadow);
+ *padding-top: 5px;
+ *padding-bottom: 5px;
+}
+
+.btn-group.open {
+ // IE7's z-index only goes to the nearest positioned ancestor, which would
+ // make the menu appear below buttons that appeared later on the page
+ *z-index: $zindexDropdown;
+
+ // Reposition menu on open and round all corners
+ .dropdown-menu {
+ display: block;
+ margin-top: 1px;
+ @include border-radius(5px);
+ }
+
+ .dropdown-toggle {
+ background-image: none;
+ $shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+ @include box-shadow($shadow);
+ }
+}
+
+// Reposition the caret
+.btn .caret {
+ margin-top: 7px;
+ margin-left: 0;
+}
+.btn:hover .caret, .open.btn-group .caret {
+ @include opacity(1);
+}
+
+
+// Account for other colors
+.btn-primary, .btn-danger, .btn-info, .btn-success, .btn-inverse {
+ .caret {
+ border-top-color: $white;
+ @include opacity(0.75);
+ }
+}
+
+// Small button dropdowns
+.btn-small .caret {
+ margin-top: 4px;
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_buttons.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_buttons.scss
new file mode 100644
index 0000000..da51df9
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_buttons.scss
@@ -0,0 +1,163 @@
+// BUTTON STYLES
+// -------------
+
+
+// Base styles
+// --------------------------------------------------
+
+// Core
+.btn {
+ display: inline-block;
+ padding: 4px 10px 4px;
+ margin-bottom: 0; // For input.btn
+ font-size: $baseFontSize;
+ line-height: $baseLineHeight;
+ color: $grayDark;
+ text-align: center;
+ text-shadow: 0 1px 1px rgba(255,255,255,.75);
+ vertical-align: middle;
+ @include buttonBackground($white, darken($white, 10%));
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ @include border-radius(4px);
+ $shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+ @include box-shadow($shadow);
+ cursor: pointer;
+
+ // Give IE7 some love
+ @include reset-filter();
+ @include ie7-restore-left-whitespace();
+}
+
+// Hover state
+.btn:hover {
+ color: $grayDark;
+ text-decoration: none;
+ background-color: darken($white, 10%);
+ background-position: 0 -15px;
+
+ // transition is only when going to hover, otherwise the background
+ // behind the gradient (there for IE<=9 fallback) gets mismatched
+ @include transition(background-position .1s linear);
+}
+
+// Focus state for keyboard and accessibility
+.btn:focus {
+ @include tab-focus();
+}
+
+// Active state
+.btn.active, .btn:active {
+ background-image: none;
+ $shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+ @include box-shadow($shadow);
+ background-color: darken($white, 10%);
+ background-color: darken($white, 15%) \9;
+ outline: 0;
+}
+
+// Disabled state
+.btn.disabled, .btn[disabled] {
+ cursor: default;
+ background-image: none;
+ background-color: darken($white, 10%);
+ @include opacity(0.65);
+ @include box-shadow(none);
+}
+
+
+// Button Sizes
+// --------------------------------------------------
+
+// Large
+.btn-large {
+ padding: 9px 14px;
+ font-size: $baseFontSize + 2px;
+ line-height: normal;
+ @include border-radius(5px);
+}
+.btn-large [class^="icon-"] {
+ margin-top: 1px;
+}
+
+// Small
+.btn-small {
+ padding: 5px 9px;
+ font-size: $baseFontSize - 2px;
+ line-height: $baseLineHeight - 2px;
+}
+.btn-small [class^="icon-"] {
+ margin-top: -1px;
+}
+
+// Mini
+.btn-mini {
+ padding: 2px 6px;
+ font-size: $baseFontSize - 2px;
+ line-height: $baseLineHeight - 4px;
+}
+
+
+// Alternate buttons
+// --------------------------------------------------
+
+// Set text color
+// -------------------------
+.btn-primary, .btn-primary:hover, .btn-warning, .btn-warning:hover, .btn-danger, .btn-danger:hover, .btn-success, .btn-success:hover, .btn-info, .btn-info:hover, .btn-inverse, .btn-inverse:hover {
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ color: $white;
+}
+// Provide *some* extra contrast for those who can get it
+.btn-primary.active, .btn-warning.active, .btn-danger.active, .btn-success.active, .btn-info.active, .btn-inverse.active {
+ color: rgba(255,255,255,.75);
+}
+
+// Set the backgrounds
+// -------------------------
+.btn-primary {
+ @include buttonBackground($primaryButtonBackground, adjust-hue($primaryButtonBackground, 20));
+}
+// Warning appears are orange
+.btn-warning {
+ @include buttonBackground(lighten($orange, 15%), $orange);
+}
+// Danger and error appear as red
+.btn-danger {
+ @include buttonBackground(#ee5f5b, #bd362f);
+}
+// Success appears as green
+.btn-success {
+ @include buttonBackground(#62c462, #51a351);
+}
+// Info appears as a neutral blue
+.btn-info {
+ @include buttonBackground(#5bc0de, #2f96b4);
+}
+.btn-inverse {
+ @include buttonBackground(#454545, #262626);
+}
+
+
+// Cross-browser Jank
+// --------------------------------------------------
+
+button.btn, input[type="submit"].btn {
+
+ // Firefox 3.6 only I believe
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+ }
+
+ // IE7 has some default padding on button controls
+ *padding-top: 2px;
+ *padding-bottom: 2px;
+ &.large {
+ *padding-top: 7px;
+ *padding-bottom: 7px;
+ }
+ &.small {
+ *padding-top: 3px;
+ *padding-bottom: 3px;
+ }
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_carousel.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_carousel.scss
new file mode 100644
index 0000000..4c2d53c
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_carousel.scss
@@ -0,0 +1,116 @@
+// CAROUSEL
+// --------
+
+.carousel {
+ position: relative;
+ margin-bottom: $baseLineHeight;
+ line-height: 1;
+}
+
+.carousel-inner {
+ overflow: hidden;
+ width: 100%;
+ position: relative;
+}
+
+.carousel {
+
+ .item {
+ display: none;
+ position: relative;
+ @include transition(.6s ease-in-out left);
+ }
+
+ // Account for jankitude on images
+ .item > img {
+ display: block;
+ 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: 40%;
+ left: 15px;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ font-size: 60px;
+ font-weight: 100;
+ line-height: 30px;
+ color: $white;
+ text-align: center;
+ background: $grayDarker;
+ border: 3px solid $white;
+ @include border-radius(23px);
+ @include opacity(0.5);
+
+ // we can't have this transition here
+ // because webkit cancels the carousel
+ // animation if you trip this while
+ // in the middle of another animation
+ // ;_;
+ // @include transition(opacity .2s linear);
+
+ // Reposition the right one
+ &.right {
+ left: auto;
+ right: 15px;
+ }
+
+ // Hover state
+ &:hover {
+ color: $white;
+ text-decoration: none;
+ @include opacity(0.9);
+ }
+}
+
+// Caption for text below images
+// -----------------------------
+
+.carousel-caption {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ padding: 10px 15px 5px;
+ background: $grayDark;
+ background: rgba(0,0,0,.75);
+}
+.carousel-caption h4, .carousel-caption p {
+ color: $white;
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_close.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_close.scss
new file mode 100644
index 0000000..c57f01d
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_close.scss
@@ -0,0 +1,18 @@
+// CLOSE ICONS
+// -----------
+
+.close {
+ float: right;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: $baseLineHeight;
+ color: $black;
+ text-shadow: 0 1px 0 rgba(255,255,255,1);
+ @include opacity(0.2);
+ &:hover {
+ color: $black;
+ text-decoration: none;
+ @include opacity(0.4);
+ cursor: pointer;
+ }
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_code.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_code.scss
new file mode 100644
index 0000000..482040e
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_code.scss
@@ -0,0 +1,56 @@
+// Code.css.scss
+// Code typography styles for the <code> and <pre> elements
+// --------------------------------------------------------
+
+// Inline and block code styles
+code, pre {
+ padding: 0 3px 2px;
+ @include font-family-monospace();
+ font-size: $baseFontSize - 1;
+ color: $grayDark;
+ @include border-radius(3px);
+}
+
+// Inline code
+code {
+ padding: 3px 4px;
+ color: #d14;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8;
+}
+
+// Blocks of code
+pre {
+ display: block;
+ padding: ($baseLineHeight - 1) / 2;
+ margin: 0 0 $baseLineHeight / 2;
+ font-size: 12px;
+ line-height: $baseLineHeight;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc; // fallback for IE7-8
+ border: 1px solid rgba(0,0,0,.15);
+ @include border-radius(4px);
+ white-space: pre;
+ white-space: pre-wrap;
+ word-break: break-all;
+ word-wrap: break-word;
+
+ // Make prettyprint styles more spaced out for readability
+ &.prettyprint {
+ margin-bottom: $baseLineHeight;
+ }
+
+ // Account for some code outputs that place code tags in pre tags
+ code {
+ padding: 0;
+ color: inherit;
+ background-color: transparent;
+ border: 0;
+ }
+}
+
+// Enable scrollable blocks of code
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_component-animations.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_component-animations.scss
new file mode 100644
index 0000000..186f121
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_component-animations.scss
@@ -0,0 +1,18 @@
+// COMPONENT ANIMATIONS
+// --------------------
+
+.fade {
+ @include transition(opacity .15s linear);
+ opacity: 0;
+ &.in {
+ opacity: 1;
+ }
+}
+
+.collapse {
+ @include transition(height .35s ease);
+ position:relative;
+ overflow:hidden;
+ height: 0;
+ &.in { height: auto; }
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_dropdowns.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_dropdowns.scss
new file mode 100644
index 0000000..085b5c3
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_dropdowns.scss
@@ -0,0 +1,126 @@
+// DROPDOWN MENUS
+// --------------
+
+// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle {
+ // The caret makes the toggle a bit too tall in IE7
+ *margin-bottom: -3px;
+}
+.dropdown-toggle:active, .open .dropdown-toggle {
+ outline: 0;
+}
+// Dropdown arrow/caret
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ text-indent: -99999px;
+ // IE7 won't do the border trick if there's a text indent, but it doesn't
+ // do the content that text-indent is hiding, either, so we're ok.
+ *text-indent: 0;
+ vertical-align: top;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid $black;
+ @include opacity(0.3);
+ content: "\2193";
+}
+.dropdown .caret {
+ margin-top: 8px;
+ margin-left: 2px;
+}
+.dropdown:hover .caret, .open.dropdown .caret {
+ @include opacity(1);
+}
+// The dropdown menu (ul)
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: $zindexDropdown;
+ float: left;
+ display: none; // none by default, but block on "open" of the menu
+ min-width: 160px;
+ _width: 160px;
+ padding: 4px 0;
+ margin: 0; // override default ul
+ list-style: none;
+ background-color: $white;
+ border-color: #ccc;
+ border-color: rgba(0,0,0,.2);
+ border-style: solid;
+ border-width: 1px;
+ @include border-radius(0 0 5px 5px);
+ @include box-shadow(0 5px 10px rgba(0,0,0,.2));
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+ *border-right-width: 2px;
+ *border-bottom-width: 2px;
+
+ // Allow for dropdowns to go bottom up (aka, dropup-menu)
+ &.bottom-up {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+ }
+
+ // Dividers (basically an hr) within the dropdown
+ .divider {
+ height: 1px;
+ margin: 5px 1px;
+ overflow: hidden;
+ background-color: #e5e5e5;
+ border-bottom: 1px solid $white;
+
+ // IE7 needs a set width since we gave a height. Restricting just
+ // to IE7 to keep the 1px left/right space in other browsers.
+ // It is unclear where IE is getting the extra space that we need
+ // to negative-margin away, but so it goes.
+ *width: 100%;
+ *margin: -5px 0 5px;
+ }
+
+ // Links within the dropdown menu
+ a {
+ display: block;
+ padding: 3px 15px;
+ clear: both;
+ font-weight: normal;
+ line-height: $baseLineHeight;
+ color: $gray;
+ white-space: nowrap;
+ }
+}
+
+// Hover state
+.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover {
+ color: $white;
+ text-decoration: none;
+ background-color: $linkColor;
+}
+
+// Open state for the dropdown
+.dropdown.open {
+ // IE7's z-index only goes to the nearest positioned ancestor, which would
+ // make the menu appear below buttons that appeared later on the page
+ *z-index: $zindexDropdown;
+
+ .dropdown-toggle {
+ color: $white;
+ background: #ccc;
+ background: rgba(0,0,0,.3);
+ }
+ .dropdown-menu {
+ display: block;
+ }
+}
+
+// Typeahead
+.typeahead {
+ margin-top: 2px; // give it some space to breathe
+ @include border-radius(4px);
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_forms.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_forms.scss
new file mode 100644
index 0000000..8c7aa42
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_forms.scss
@@ -0,0 +1,463 @@
+// Forms.less
+// Base styles for various input types, form layouts, and states
+// -------------------------------------------------------------
+
+
+// GENERAL STYLES
+// --------------
+
+// Make all forms have space below them
+form {
+ margin: 0 0 $baseLineHeight;
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+// Groups of fields with labels on top (legends)
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: $baseLineHeight * 1.5;
+ font-size: $baseFontSize * 1.5;
+ line-height: $baseLineHeight * 2;
+ color: $grayDark;
+ border: 0;
+ border-bottom: 1px solid #eee;
+
+ // Small
+ small {
+ font-size: $baseLineHeight * .75;
+ color: $grayLight;
+ }
+}
+
+// Set font for forms
+label, input, button, select, textarea {
+ @include font-shorthand($baseFontSize, normal, $baseLineHeight); // Set size, weight, line-height here
+}
+
+input, button, select, textarea {
+ @include font-family-sans-serif(); // And only set font-family here for those that need it (note the missing label element)
+}
+
+// Identify controls by their labels
+label {
+ display: block;
+ margin-bottom: 5px;
+ color: $grayDark;
+}
+
+// Inputs, Textareas, Selects
+input, textarea, select, .uneditable-input {
+ display: inline-block;
+ width: 210px;
+ height: $baseLineHeight;
+ padding: 4px;
+ margin-bottom: 9px;
+ font-size: $baseFontSize;
+ line-height: $baseLineHeight;
+ color: $gray;
+ border: 1px solid #ccc;
+ @include border-radius(3px);
+}
+.uneditable-textarea {
+ width: auto;
+ height: auto;
+}
+
+// Inputs within a label
+label input, label textarea, label select {
+ display: block;
+}
+
+// Mini reset for unique input types
+input[type="image"], input[type="checkbox"], input[type="radio"] {
+ width: auto;
+ height: auto;
+ padding: 0;
+ margin: 3px 0;
+ *margin-top: 0; /* IE7 */
+ line-height: normal;
+ cursor: pointer;
+ @include border-radius(0);
+ border: 0 \9; /* IE9 and down */
+}
+input[type="image"] {
+ border: 0;
+}
+
+// Reset the file input to browser defaults
+input[type="file"] {
+ width: auto;
+ padding: initial;
+ line-height: initial;
+ border: initial;
+ background-color: $white;
+ background-color: initial;
+ @include box-shadow(none);
+}
+
+// Help out input buttons
+input[type="button"], input[type="reset"], input[type="submit"] {
+ width: auto;
+ height: auto;
+}
+
+// Set the height of select and file controls to match text inputs
+select, input[type="file"] {
+ height: 28px; /* In IE7, the height of the select element cannot be changed by height, only font-size */
+ *margin-top: 4px; /* For IE7, add top margin to align select with labels */
+ line-height: 28px;
+}
+
+// Reset line-height for IE
+input[type="file"] {
+ line-height: 18px \9;
+}
+
+// Chrome on Linux and Mobile Safari need background-color
+select {
+ width: 220px; // default input width + 10px of padding that doesn't get applied
+ background-color: $white;
+}
+
+// Make multiple select elements height not fixed
+select[multiple], select[size] {
+ height: auto;
+}
+
+// Remove shadow from image inputs
+input[type="image"] {
+ @include box-shadow(none);
+}
+
+// Make textarea height behave
+textarea {
+ height: auto;
+}
+
+// Hidden inputs
+input[type="hidden"] {
+ display: none;
+}
+
+
+
+// CHECKBOXES & RADIOS
+// -------------------
+
+// Indent the labels to position radios/checkboxes as hanging
+.radio, .checkbox {
+ padding-left: 18px;
+}
+.radio input[type="radio"], .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -18px;
+}
+
+// Move the options list down to align with labels
+.controls > .radio:first-child, .controls > .checkbox:first-child {
+ padding-top: 5px; // has to be padding because margin collaspes
+}
+
+// Radios and checkboxes on same line
+// TODO v3: Convert .inline to .control-inline
+.radio.inline, .checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline {
+ margin-left: 10px; // space out consecutive inline controls
+}
+
+
+
+// FOCUS STATE
+// -----------
+
+input, textarea {
+ @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
+ $transition: border linear .2s, box-shadow linear .2s;
+ @include transition($transition);
+}
+input:focus, textarea:focus {
+ border-color: rgba(82,168,236,.8);
+ $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+ @include box-shadow($shadow);
+ outline: 0;
+ outline: thin dotted \9; /* IE6-9 */
+}
+input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus, select:focus {
+ @include box-shadow(none); // override for file inputs
+ @include tab-focus();
+}
+
+
+
+// INPUT SIZES
+// -----------
+
+// General classes for quick sizes
+.input-mini { width: 60px; }
+.input-small { width: 90px; }
+.input-medium { width: 150px; }
+.input-large { width: 210px; }
+.input-xlarge { width: 270px; }
+.input-xxlarge { width: 530px; }
+
+// Grid style input sizes
+input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input {
+ float: none;
+ margin-left: 0;
+}
+
+
+
+// GRID SIZING FOR INPUTS
+// ----------------------
+
+@include inputGridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth);
+
+
+
+
+// DISABLED STATE
+// --------------
+
+// Disabled and read-only inputs
+input[disabled], select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] {
+ background-color: #f5f5f5;
+ border-color: #ddd;
+ cursor: not-allowed;
+}
+
+
+
+
+// FORM FIELD FEEDBACK STATES
+// --------------------------
+
+// Warning
+.control-group.warning {
+ @include formFieldState($warningText, $warningText, $warningBackground);
+}
+// Error
+.control-group.error {
+ @include formFieldState($errorText, $errorText, $errorBackground);
+}
+// Success
+.control-group.success {
+ @include formFieldState($successText, $successText, $successBackground);
+}
+
+// HTML5 invalid states
+// Shares styles with the .control-group.error above
+input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid {
+ color: #b94a48;
+ border-color: #ee5f5b;
+ &:focus {
+ border-color: darken(#ee5f5b, 10%);
+ @include box-shadow(0 0 6px lighten(#ee5f5b, 20%));
+ }
+}
+
+
+
+// FORM ACTIONS
+// ------------
+
+.form-actions {
+ padding: ($baseLineHeight - 1) 20px $baseLineHeight;
+ margin-top: $baseLineHeight;
+ margin-bottom: $baseLineHeight;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+}
+
+// For text that needs to appear as an input but should not be an input
+.uneditable-input {
+ display: block;
+ background-color: $white;
+ border-color: #eee;
+ @include box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
+ cursor: not-allowed;
+}
+
+// Placeholder text gets special styles; can't be bundled together though for some reason
+@include placeholder($grayLight);
+
+
+
+// HELP TEXT
+// ---------
+
+.help-block {
+ display: block; // account for any element using help-block
+ margin-top: 5px;
+ margin-bottom: 0;
+ color: $grayLight;
+}
+
+.help-inline {
+ display: inline-block;
+ @include ie7-inline-block();
+ margin-bottom: 9px;
+ vertical-align: middle;
+ padding-left: 5px;
+}
+
+
+
+// INPUT GROUPS
+// ------------
+
+// Allow us to put symbols and text within the input field for a cleaner look
+.input-prepend, .input-append {
+ margin-bottom: 5px;
+ @include clearfix(); // Clear the float to prevent wrapping
+ input, .uneditable-input {
+ @include border-radius(0 3px 3px 0);
+ &:focus {
+ position: relative;
+ z-index: 2;
+ }
+ }
+ .uneditable-input {
+ border-left-color: #eee;
+ border-right-color: #ccc;
+ }
+ .add-on {
+ float: left;
+ display: block;
+ width: auto;
+ min-width: 16px;
+ height: $baseLineHeight;
+ margin-right: -1px;
+ padding: 4px 5px;
+ font-weight: normal;
+ line-height: $baseLineHeight;
+ color: $grayLight;
+ text-align: center;
+ text-shadow: 0 1px 0 $white;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ @include border-radius(3px 0 0 3px);
+ }
+ .active {
+ background-color: lighten($green, 30);
+ border-color: $green;
+ }
+}
+.input-prepend {
+ .add-on {
+ *margin-top: 1px; /* IE6-7 */
+ }
+}
+.input-append {
+ input, .uneditable-input {
+ float: left;
+ @include border-radius(3px 0 0 3px);
+ }
+ .uneditable-input {
+ border-right-color: #ccc;
+ }
+ .add-on {
+ margin-right: 0;
+ margin-left: -1px;
+ @include border-radius(0 3px 3px 0);
+ }
+ input:first-child {
+ // In IE7, having a hasLayout container (from clearfix's zoom:1) can make the first input
+ // inherit the sum of its ancestors' margins.
+ *margin-left: -160px;
+
+ &+.add-on {
+ *margin-left: -21px;
+ }
+ }
+}
+
+
+
+// SEARCH FORM
+// -----------
+
+.search-query {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0; // remove the default margin on all inputs
+ @include border-radius(14px);
+}
+
+
+
+// HORIZONTAL & VERTICAL FORMS
+// ---------------------------
+
+// Common properties
+// -----------------
+
+.form-search, .form-inline, .form-horizontal {
+ input, textarea, select, .help-inline, .uneditable-input {
+ display: inline-block;
+ margin-bottom: 0;
+ }
+ // Re-hide elemnts due to specifity
+ .hide { display: none; }
+}
+.form-search label, .form-inline label, .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend {
+ display: inline-block;
+}
+// Make the prepend and append add-on vertical-align: middle;
+.form-search .input-append .add-on, .form-inline .input-prepend .add-on, .form-search .input-append .add-on, .form-inline .input-prepend .add-on {
+ vertical-align: middle;
+}
+// Inline checkbox/radio labels
+.form-search .radio, .form-inline .radio, .form-search .checkbox, .form-inline .checkbox {
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+// Margin to space out fieldsets
+.control-group {
+ margin-bottom: $baseLineHeight / 2;
+}
+
+// Legend collapses margin, so next elements is responsible for spacing
+legend + .control-group {
+ margin-top: $baseLineHeight;
+ -webkit-margin-top-collapse: separate;
+}
+
+// Horizontal-specific styles
+// --------------------------
+
+.form-horizontal {
+ // Increase spacing between groups
+ .control-group {
+ margin-bottom: $baseLineHeight;
+ @include clearfix();
+ }
+ // Float the labels left
+ .control-label {
+ float: left;
+ width: 140px;
+ padding-top: 5px;
+ text-align: right;
+ }
+ // Move over all input controls and content
+ .controls {
+ margin-left: 160px;
+ }
+ // Move over buttons in .form-actions to align with .controls
+ .form-actions {
+ padding-left: 160px;
+ }
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_grid.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_grid.scss
new file mode 100644
index 0000000..d29b7aa
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_grid.scss
@@ -0,0 +1,8 @@
+// GRID SYSTEM
+// -----------
+
+// Fixed (940px)
+@include gridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth);
+
+// Fluid (940px)
+@include fluidGridSystemGenerate($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth); \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_hero-unit.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_hero-unit.scss
new file mode 100644
index 0000000..7184ffb
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_hero-unit.scss
@@ -0,0 +1,20 @@
+// HERO UNIT
+// ---------
+
+.hero-unit {
+ padding: 60px;
+ margin-bottom: 30px;
+ background-color: #f5f5f5;
+ @include border-radius(6px);
+ h1 {
+ margin-bottom: 0;
+ font-size: 60px;
+ line-height: 1;
+ letter-spacing: -1px;
+ }
+ p {
+ font-size: 18px;
+ font-weight: 200;
+ line-height: $baseLineHeight * 1.5;
+ }
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_labels.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_labels.scss
new file mode 100644
index 0000000..6e4c22d
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_labels.scss
@@ -0,0 +1,32 @@
+// LABELS
+// ------
+
+// Base
+.label {
+ padding: 2px 4px 3px;
+ font-size: $baseFontSize * .85;
+ font-weight: bold;
+ color: $white;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ background-color: $grayLight;
+ @include border-radius(3px);
+}
+
+// Hover state
+.label:hover {
+ color: $white;
+ text-decoration: none;
+}
+
+// Colors
+.label-important { background-color: $errorText; }
+.label-important:hover { background-color: darken($errorText, 10%); }
+
+.label-warning { background-color: $orange; }
+.label-warning:hover { background-color: darken($orange, 10%); }
+
+.label-success { background-color: $successText; }
+.label-success:hover { background-color: darken($successText, 10%); }
+
+.label-info { background-color: $infoText; }
+.label-info:hover { background-color: darken($infoText, 10%); } \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_layouts.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_layouts.scss
new file mode 100644
index 0000000..c600522
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_layouts.scss
@@ -0,0 +1,17 @@
+//
+// Layouts
+// Fixed-width and fluid (with sidebar) layouts
+// --------------------------------------------
+
+
+// Container (centered, fixed-width layouts)
+.container {
+ @include container-fixed();
+}
+
+// Fluid layouts (left aligned, with sidebar, min- & max-width content)
+.container-fluid {
+ padding-left: $gridGutterWidth;
+ padding-right: $gridGutterWidth;
+ @include clearfix();
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_mixins.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_mixins.scss
new file mode 100644
index 0000000..1731051
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_mixins.scss
@@ -0,0 +1,530 @@
+// Mixins.less
+// Snippets of reusable CSS to develop faster and keep code readable
+// -----------------------------------------------------------------
+
+
+// UTILITY MIXINS
+// --------------------------------------------------
+
+// Clearfix
+// --------
+// For clearing floats like a boss h5bp.com/q
+@mixin clearfix() {
+ *zoom: 1;
+ &:before,
+ &:after {
+ display: table;
+ content: "";
+ }
+ &:after {
+ clear: both;
+ }
+}
+.clearfix { @include clearfix(); }
+
+// Webkit-style focus
+// ------------------
+@mixin tab-focus() {
+ // Default
+ outline: thin dotted #333;
+ // Webkit
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+// Center-align a block level element
+// ----------------------------------
+@mixin center-block() {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+// IE7 inline-block
+// ----------------
+@mixin ie7-inline-block() {
+ *display: inline; /* IE7 inline-block hack */
+ *zoom: 1;
+}
+
+// IE7 likes to collapse whitespace on either side of the inline-block elements.
+// Ems because we're attempting to match the width of a space character. Left
+// version is for form buttons, which typically come after other elements, and
+// right version is for icons, which come before. Applying both is ok, but it will
+// mean that space between those elements will be .6em (~2 space characters) in IE7,
+// instead of the 1 space in other browsers.
+@mixin ie7-restore-left-whitespace() {
+ *margin-left: .3em;
+
+ &:first-child {
+ *margin-left: 0;
+ }
+}
+
+@mixin ie7-restore-right-whitespace() {
+ *margin-right: .3em;
+
+ &:last-child {
+ *margin-left: 0;
+ }
+}
+
+// Sizing shortcuts
+// -------------------------
+@mixin size($height: 5px, $width: 5px) {
+ width: $width;
+ height: $height;
+}
+@mixin square($size: 5px) {
+ @include size($size, $size);
+}
+
+// Placeholder text
+// -------------------------
+@mixin placeholder($color: $placeholderText) {
+ :-moz-placeholder {
+ color: $color;
+ }
+ ::-webkit-input-placeholder {
+ color: $color;
+ }
+}
+
+// Text overflow
+// ------------------------
+@mixin text-overflow() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+
+// FONTS
+// --------------------------------------------------
+@mixin font-family-serif() {
+ font-family: Georgia, "Times New Roman", Times, serif;
+}
+@mixin font-family-sans-serif() {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+@mixin font-family-monospace() {
+ font-family: Menlo, Monaco, "Courier New", monospace;
+}
+@mixin font-shorthand($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) {
+ font-size: $size;
+ font-weight: $weight;
+ line-height: $lineHeight;
+}
+@mixin font-serif($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) {
+ @include font-family-serif();
+ @include font-shorthand($size, $weight, $lineHeight);
+}
+@mixin font-sans-serif($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) {
+ @include font-family-sans-serif();
+ @include font-shorthand($size, $weight, $lineHeight);
+}
+@mixin font-monospace($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) {
+ @include font-family-monospace();
+ @include font-shorthand($size, $weight, $lineHeight);
+}
+
+
+
+// GRID SYSTEM
+// --------------------------------------------------
+
+// Site container
+// -------------------------
+@mixin container-fixed() {
+ width: $gridRowWidth;
+ margin-left: auto;
+ margin-right: auto;
+ @include clearfix();
+}
+
+// Le grid system
+// -------------------------
+
+// Setup the mixins to be used
+@mixin gridSystemColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $columns) {
+ width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1));
+}
+@mixin gridSystemOffset($gridColumnWidth, $gridGutterWidth, $columns) {
+ margin-left: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1)) + ($gridGutterWidth * 2);
+}
+@mixin gridSystemGridColumn($gridGutterWidth) {
+ float: left;
+ margin-left: $gridGutterWidth;
+}
+// Take these values and mixins, and make 'em do their thang
+@mixin gridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth) {
+ // Row surrounds the columns
+ .row {
+ margin-left: $gridGutterWidth * -1;
+ @include clearfix();
+ }
+ // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks @dhg)
+ [class*="span"] {
+ @include gridSystemGridColumn($gridGutterWidth);
+ }
+ // Default columns
+ @for $i from 1 through $gridColumns {
+ .span#{$i} { @include gridSystemColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $i) }
+ }
+ .container { @include gridSystemColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $gridColumns) }
+
+ // Offset column options
+ @for $i from 1 through $gridColumns - 1 {
+ .offset#{$i} { @include gridSystemOffset($gridColumnWidth, $gridGutterWidth, $i) }
+ }
+}
+
+// Fluid grid system
+// -------------------------
+@mixin fluidGridSystemColumns($fluidGridGutterWidth, $fluidGridColumnWidth, $columns) {
+ width: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1));
+}
+@mixin fluidGridSystemGridColumn($fluidGridGutterWidth) {
+ float: left;
+ margin-left: $fluidGridGutterWidth;
+}
+// Take these values and mixins, and make 'em do their thang
+@mixin fluidGridSystemGenerate($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth) {
+ // Row surrounds the columns
+ .row-fluid {
+ width: 100%;
+ @include clearfix();
+
+ // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks @dhg)
+ > [class*="span"] {
+ @include fluidGridSystemGridColumn($fluidGridGutterWidth);
+ }
+ > [class*="span"]:first-child {
+ margin-left: 0;
+ }
+ // Default columns
+ @for $i from 1 through $gridColumns {
+ > .span#{$i} { @include fluidGridSystemColumns($fluidGridGutterWidth, $fluidGridColumnWidth, $i); }
+ }
+ }
+}
+
+// Input grid system
+// -------------------------
+@mixin inputGridSystemInputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $columns) {
+ width: (($gridColumnWidth) * $columns) + ($gridGutterWidth * ($columns - 1)) - 10;
+}
+@mixin inputGridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth) {
+ input, textarea, .uneditable-input {
+ @for $i from 1 through $gridColumns {
+ &.span#{$i} { @include inputGridSystemInputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $i); }
+ }
+ }
+}
+
+// Make a grid
+// -------------------------
+// Use makeRow() and makeColumn() to assign semantic layouts grid system behaviour
+@mixin makeRow() {
+ margin-left: $gridGutterWidth * -1;
+ @include clearfix();
+}
+@mixin makeColumn($columns: 1) {
+ float: left;
+ margin-left: $gridGutterWidth;
+ width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1));
+}
+
+
+// Form field states (used in forms.less)
+// --------------------------------------------------
+
+// Mixin for form field states
+@mixin formFieldState($textColor: #555, $borderColor: #ccc, $backgroundColor: #f5f5f5) {
+ // Set the text color
+ > label, .help-block, .help-inline {
+ color: $textColor;
+ }
+ // Style inputs accordingly
+ input, select, textarea {
+ color: $textColor;
+ border-color: $borderColor;
+ &:focus {
+ border-color: darken($borderColor, 10%);
+ @include box-shadow(0 0 6px lighten($borderColor, 20%));
+ }
+ }
+ // Give a small background color for input-prepend/-append
+ .input-prepend .add-on, .input-append .add-on {
+ color: $textColor;
+ background-color: $backgroundColor;
+ border-color: $textColor;
+ }
+}
+
+
+// CSS3 PROPERTIES
+// --------------------------------------------------
+
+// Border Radius
+@mixin border-radius($radius: 5px) {
+ -webkit-border-radius: $radius;
+ -moz-border-radius: $radius;
+ border-radius: $radius;
+}
+
+// Drop shadows
+@mixin box-shadow($shadow: 0 1px 3px rgba(0,0,0,.25)) {
+ -webkit-box-shadow: $shadow;
+ -moz-box-shadow: $shadow;
+ box-shadow: $shadow;
+}
+
+// Transitions
+@mixin transition($transition) {
+ -webkit-transition: $transition;
+ -moz-transition: $transition;
+ -ms-transition: $transition;
+ -o-transition: $transition;
+ transition: $transition;
+}
+
+// Transformations
+@mixin rotate($degrees) {
+ -webkit-transform: rotate($degrees);
+ -moz-transform: rotate($degrees);
+ -ms-transform: rotate($degrees);
+ -o-transform: rotate($degrees);
+ transform: rotate($degrees);
+}
+@mixin scale($ratio) {
+ -webkit-transform: scale($ratio);
+ -moz-transform: scale($ratio);
+ -ms-transform: scale($ratio);
+ -o-transform: scale($ratio);
+ transform: scale($ratio);
+}
+@mixin translate($x: 0, $y: 0) {
+ -webkit-transform: translate($x, $y);
+ -moz-transform: translate($x, $y);
+ -ms-transform: translate($x, $y);
+ -o-transform: translate($x, $y);
+ transform: translate($x, $y);
+}
+
+@mixin skew($x: 0, $y: 0) {
+ -webkit-transform: skew($x, $y);
+ -moz-transform: skew($x, $y);
+ -ms-transform: skew($x, $y);
+ -o-transform: skew($x, $y);
+ transform: skew($x, $y);
+}
+
+@mixin translate3d($x: 0, $y: 0, $z: 0) {
+ -webkit-transform: translate($x, $y, $z);
+ -moz-transform: translate($x, $y, $z);
+ -ms-transform: translate($x, $y, $z);
+ -o-transform: translate($x, $y, $z);
+ transform: translate($x, $y, $z);
+}
+
+// Background clipping
+// Heads up: FF 3.6 and under need "padding" instead of "padding-box"
+@mixin background-clip($clip) {
+ -webkit-background-clip: $clip;
+ -moz-background-clip: $clip;
+ background-clip: $clip;
+}
+
+// Background sizing
+@mixin background-size($size){
+ -webkit-background-size: $size;
+ -moz-background-size: $size;
+ -o-background-size: $size;
+ background-size: $size;
+}
+
+
+// Box sizing
+@mixin box-sizing($boxmodel) {
+ -webkit-box-sizing: $boxmodel;
+ -moz-box-sizing: $boxmodel;
+ box-sizing: $boxmodel;
+}
+
+// User select
+// For selecting text on the page
+@mixin user-select($select) {
+ -webkit-user-select: $select;
+ -moz-user-select: $select;
+ -o-user-select: $select;
+ user-select: $select;
+}
+
+// Resize anything
+@mixin resizable($direction: both) {
+ resize: $direction; // Options: horizontal, vertical, both
+ overflow: auto; // Safari fix
+}
+
+// CSS3 Content Columns
+@mixin content-columns($columnCount, $columnGap: $gridColumnGutter) {
+ -webkit-column-count: $columnCount;
+ -moz-column-count: $columnCount;
+ column-count: $columnCount;
+ -webkit-column-gap: $columnGap;
+ -moz-column-gap: $columnGap;
+ column-gap: $columnGap;
+}
+
+// Opacity
+@mixin opacity($opacity: 1) {
+ opacity: $opacity;
+ filter: alpha(opacity=$opacity * 100);
+}
+
+
+
+// BACKGROUNDS
+// --------------------------------------------------
+
+// Add an alphatransparency value to any background or border color (via Elyse Holladay)
+@mixin translucent-background($color: $white, $alpha: 1) {
+ background-color: hsla(hue($color), saturation($color), lightness($color), $alpha);
+}
+@mixin translucent-border($color: $white, $alpha: 1) {
+ border-color: hsla(hue($color), saturation($color), lightness($color), $alpha);
+ @include background-clip(padding-box);
+}
+
+// Gradient Bar Colors for buttons and alerts
+@mixin gradientBar($primaryColor, $secondaryColor) {
+ @include gradient-vertical($primaryColor, $secondaryColor);
+ border-color: $secondaryColor $secondaryColor darken($secondaryColor, 15%);
+ border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
+}
+
+// Gradients
+@mixin gradient-horizontal($startColor: #555, $endColor: #333) {
+ background-color: $endColor;
+ background-image: -moz-linear-gradient(left, $startColor, $endColor); // FF 3.6+
+ background-image: -ms-linear-gradient(left, $startColor, $endColor); // IE10
+ background-image: -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(left, $startColor, $endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(left, $startColor, $endColor); // Opera 11.10
+ background-image: linear-gradient(left, $startColor, $endColor); // Le standard
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=1); // IE9 and down
+}
+@mixin gradient-vertical($startColor: #555, $endColor: #333) {
+ background-color: mix($startColor, $endColor, 60%);
+ background-image: -moz-linear-gradient(top, $startColor, $endColor); // FF 3.6+
+ background-image: -ms-linear-gradient(top, $startColor, $endColor); // IE10
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(top, $startColor, $endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(top, $startColor, $endColor); // Opera 11.10
+ background-image: linear-gradient(top, $startColor, $endColor); // The standard
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=0); // IE9 and down
+}
+@mixin gradient-directional($startColor: #555, $endColor: #333, $deg: 45deg) {
+ background-color: $endColor;
+ background-repeat: repeat-x;
+ background-image: -moz-linear-gradient($deg, $startColor, $endColor); // FF 3.6+
+ background-image: -ms-linear-gradient($deg, $startColor, $endColor); // IE10
+ background-image: -webkit-linear-gradient($deg, $startColor, $endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient($deg, $startColor, $endColor); // Opera 11.10
+ background-image: linear-gradient($deg, $startColor, $endColor); // The standard
+}
+@mixin gradient-vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) {
+ background-color: mix($midColor, $endColor, 80%);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), color-stop($colorStop, $midColor), to($endColor));
+ background-image: -webkit-linear-gradient($startColor, $midColor $colorStop, $endColor);
+ background-image: -moz-linear-gradient(top, $startColor, $midColor $colorStop, $endColor);
+ background-image: -ms-linear-gradient($startColor, $midColor $colorStop, $endColor);
+ background-image: -o-linear-gradient($startColor, $midColor $colorStop, $endColor);
+ background-image: linear-gradient($startColor, $midColor $colorStop, $endColor);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
+}
+@mixin gradient-radial($innerColor: #555, $outerColor: #333) {
+ background-color: $outerColor;
+ background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($innerColor), to($outerColor));
+ background-image: -webkit-radial-gradient(circle, $innerColor, $outerColor);
+ background-image: -moz-radial-gradient(circle, $innerColor, $outerColor);
+ background-image: -ms-radial-gradient(circle, $innerColor, $outerColor);
+ background-repeat: no-repeat;
+ // Opera cannot do radial gradients yet
+}
+@mixin gradient-striped($color, $angle: -45deg) {
+ background-color: $color;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ background-image: -ms-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient($angle, rgba(255,255,255,.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0));
+}
+// Reset filters for IE
+@mixin reset-filter() {
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+
+
+// Mixin for generating button backgrounds
+// ---------------------------------------
+@mixin buttonBackground($startColor, $endColor) {
+ // gradientBar will set the background to a pleasing blend of these, to support IE<=9
+ @include gradientBar($startColor, $endColor);
+ @include reset-filter();
+
+ // in these cases the gradient won't cover the background, so we override
+ &:hover, &:active, &.active, &.disabled, &[disabled] {
+ background-color: $endColor;
+ }
+
+ // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
+ &:active, &.active {
+ background-color: darken($endColor, 10%) \9;
+ }
+}
+
+
+// COMPONENT MIXINS
+// --------------------------------------------------
+
+// POPOVER ARROWS
+// -------------------------
+// For tipsies and popovers
+@mixin popoverArrowTop($arrowWidth: 5px) {
+ bottom: 0;
+ left: 50%;
+ margin-left: -$arrowWidth;
+ border-left: $arrowWidth solid transparent;
+ border-right: $arrowWidth solid transparent;
+ border-top: $arrowWidth solid $black;
+}
+@mixin popoverArrowLeft($arrowWidth: 5px) {
+ top: 50%;
+ right: 0;
+ margin-top: -$arrowWidth;
+ border-top: $arrowWidth solid transparent;
+ border-bottom: $arrowWidth solid transparent;
+ border-left: $arrowWidth solid $black;
+}
+@mixin popoverArrowBottom($arrowWidth: 5px) {
+ top: 0;
+ left: 50%;
+ margin-left: -$arrowWidth;
+ border-left: $arrowWidth solid transparent;
+ border-right: $arrowWidth solid transparent;
+ border-bottom: $arrowWidth solid $black;
+}
+@mixin popoverArrowRight($arrowWidth: 5px) {
+ top: 50%;
+ left: 0;
+ margin-top: -$arrowWidth;
+ border-top: $arrowWidth solid transparent;
+ border-bottom: $arrowWidth solid transparent;
+ border-right: $arrowWidth solid $black;
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_modals.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_modals.scss
new file mode 100644
index 0000000..0e80951
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_modals.scss
@@ -0,0 +1,83 @@
+// MODALS
+// ------
+
+// Recalculate z-index where appropriate
+.modal-open {
+ .dropdown-menu { z-index: $zindexDropdown + $zindexModal; }
+ .dropdown.open { *z-index: $zindexDropdown + $zindexModal; }
+ .popover { z-index: $zindexPopover + $zindexModal; }
+ .tooltip { z-index: $zindexTooltip + $zindexModal; }
+}
+
+// Background
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: $zindexModalBackdrop;
+ background-color: $black;
+ // Fade for backdrop
+ &.fade { opacity: 0; }
+}
+
+.modal-backdrop, .modal-backdrop.fade.in {
+ @include opacity(0.8);
+}
+
+// Base modal
+.modal {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ z-index: $zindexModal;
+ max-height: 500px;
+ overflow: auto;
+ width: 560px;
+ margin: -250px 0 0 -280px;
+ background-color: $white;
+ border: 1px solid #999;
+ border: 1px solid rgba(0,0,0,.3);
+ *border: 1px solid #999; /* IE6-7 */
+ @include border-radius(6px);
+ @include box-shadow(0 3px 7px rgba(0,0,0,0.3));
+ @include background-clip(padding-box);
+ &.fade {
+ $transition: opacity .3s linear, top .3s ease-out;
+ @include transition($transition);
+ top: -25%;
+ }
+ &.fade.in { top: 50%; }
+}
+.modal-header {
+ padding: 9px 15px;
+ border-bottom: 1px solid #eee;
+ // Close icon
+ .close { margin-top: 2px; }
+}
+
+// Body (where all modal content resides)
+.modal-body {
+ padding: 15px;
+}
+// Remove bottom margin if need be
+.modal-body .modal-form {
+ margin-bottom: 0;
+}
+
+// Footer (for actions)
+.modal-footer {
+ padding: 14px 15px 15px;
+ margin-bottom: 0;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ @include border-radius(0 0 6px 6px);
+ @include box-shadow(inset 0 1px 0 $white);
+ @include clearfix();
+ .btn {
+ float: right;
+ margin-left: 5px;
+ margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
+ }
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navbar.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navbar.scss
new file mode 100644
index 0000000..305dbd9
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navbar.scss
@@ -0,0 +1,288 @@
+// NAVBAR (FIXED AND STATIC)
+// -------------------------
+
+
+// COMMON STYLES
+// -------------
+
+.navbar {
+ overflow: visible;
+ margin-bottom: $baseLineHeight;
+}
+
+// Gradient is applied to it's own element because overflow visible is not honored by IE when filter is present
+.navbar-inner {
+ padding-left: 20px;
+ padding-right: 20px;
+ @include gradient-vertical($navbarBackgroundHighlight, $navbarBackground);
+ @include border-radius(4px);
+ $shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
+ @include box-shadow($shadow);
+}
+
+// Navbar button for toggling navbar items in responsive layouts
+.btn-navbar {
+ display: none;
+ float: right;
+ padding: 7px 10px;
+ margin-left: 5px;
+ margin-right: 5px;
+ @include buttonBackground($navbarBackgroundHighlight, $navbarBackground);
+ $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
+ @include box-shadow($shadow);
+}
+.btn-navbar .icon-bar {
+ display: block;
+ width: 18px;
+ height: 2px;
+ background-color: #f5f5f5;
+ @include border-radius(1px);
+ @include box-shadow(0 1px 0 rgba(0,0,0,.25));
+}
+.btn-navbar .icon-bar + .icon-bar {
+ margin-top: 3px;
+}
+// Override the default collapsed state
+.nav-collapse.collapse {
+ height: auto;
+}
+
+
+// Brand, links, text, and buttons
+.navbar {
+ // Hover and active states
+ .brand:hover {
+ text-decoration: none;
+ }
+ // Website or project name
+ .brand {
+ float: left;
+ display: block;
+ padding: 8px 20px 12px;
+ margin-left: -20px; // negative indent to left-align the text down the page
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 1;
+ color: $white;
+ }
+ // Plain text in topbar
+ .navbar-text {
+ margin-bottom: 0;
+ line-height: 40px;
+ color: $navbarText;
+ a:hover {
+ color: $white;
+ background-color: transparent;
+ }
+ }
+ // Buttons in navbar
+ .btn, .btn-group {
+ margin-top: 5px; // make buttons vertically centered in navbar
+ }
+ .btn-group .btn {
+ margin-top: 0; // then undo the margin here so we don't accidentally double it
+ }
+}
+
+// Navbar forms
+.navbar-form {
+ margin-bottom: 0; // remove default bottom margin
+ @include clearfix();
+ input, select {
+ display: inline-block;
+ margin-top: 5px;
+ margin-bottom: 0;
+ }
+ .radio, .checkbox {
+ margin-top: 5px;
+ }
+ input[type="image"], input[type="checkbox"], input[type="radio"] {
+ margin-top: 3px;
+ }
+ .input-append, .input-prepend {
+ margin-top: 6px;
+ white-space: nowrap; // prevents two items from separating within a .navbar-form that has .pull-left
+ input {
+ margin-top: 0; //remove the margin on top since it's on parent
+ }
+ }
+}
+
+// Navbar search
+.navbar-search {
+ position: relative;
+ float: left;
+ margin-top: 6px;
+ margin-bottom: 0;
+ .search-query {
+ padding: 4px 9px;
+ @include font-sans-serif(13px, normal, 1);
+ color: $white;
+ color: rgba(255,255,255,.75);
+ background: #666;
+ background: rgba(255,255,255,.3);
+ border: 1px solid #111;
+ $shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0px rgba(255,255,255,.15);
+ @include box-shadow($shadow);
+ @include transition(none);
+
+ // Placeholder text gets special styles; can't be bundled together though for some reason
+ @include placeholder($grayLighter);
+
+ // Hover states
+ &:hover {
+ color: $white;
+ background-color: $grayLight;
+ background-color: rgba(255,255,255,.5);
+ }
+ // Focus states (we use .focused since IE7-8 and down doesn't support :focus)
+ &:focus, &.focused {
+ padding: 5px 10px;
+ color: $grayDark;
+ text-shadow: 0 1px 0 $white;
+ background-color: $white;
+ border: 0;
+ @include box-shadow(0 0 3px rgba(0,0,0,.15));
+ outline: 0;
+ }
+ }
+}
+
+
+// FIXED NAVBAR
+// ------------
+
+.navbar-fixed-top {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: $zindexFixedNavbar;
+}
+.navbar-fixed-top .navbar-inner {
+ padding-left: 0;
+ padding-right: 0;
+ @include border-radius(0);
+}
+
+
+// NAVIGATION
+// ----------
+
+.navbar .nav {
+ position: relative;
+ left: 0;
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+}
+.navbar .nav.pull-right {
+ float: right; // redeclare due to specificity
+}
+.navbar .nav > li {
+ display: block;
+ float: left;
+}
+
+// Links
+.navbar .nav > li > a {
+ float: none;
+ padding: 10px 10px 11px;
+ line-height: 19px;
+ color: $navbarLinkColor;
+ text-decoration: none;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+}
+// Hover
+.navbar .nav > li > a:hover {
+ background-color: $navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover from :active
+ color: $navbarLinkColorHover;
+ text-decoration: none;
+}
+
+// Active nav items
+.navbar .nav .active > a, .navbar .nav .active > a:hover {
+ color: $navbarLinkColorHover;
+ text-decoration: none;
+ background-color: $navbarBackground;
+}
+
+// Dividers (basically a vertical hr)
+.navbar .divider-vertical {
+ height: $navbarHeight;
+ width: 1px;
+ margin: 0 9px;
+ overflow: hidden;
+ background-color: $navbarBackground;
+ border-right: 1px solid $navbarBackgroundHighlight;
+}
+
+// Secondary (floated right) nav in topbar
+.navbar .nav.pull-right {
+ margin-left: 10px;
+ margin-right: 0;
+}
+
+
+
+// Dropdown menus
+// --------------
+
+// Menu position and menu carets
+.navbar .dropdown-menu {
+ margin-top: 1px;
+ @include border-radius(4px);
+ &:before {
+ content: '';
+ display: inline-block;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-bottom-color: rgba(0,0,0,.2);
+ position: absolute;
+ top: -7px;
+ left: 9px;
+ }
+ &:after {
+ content: '';
+ display: inline-block;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid $white;
+ position: absolute;
+ top: -6px;
+ left: 10px;
+ }
+}
+
+// Dropdown toggle caret
+.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret {
+ border-top-color: $white;
+}
+.navbar .nav .active .caret {
+ @include opacity(1);
+}
+
+// Remove background color from open dropdown
+.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle {
+ background-color: transparent;
+}
+
+// Dropdown link on hover
+.navbar .nav .active > .dropdown-toggle:hover {
+ color: $white;
+}
+
+// Right aligned menus need alt position
+.navbar .nav.pull-right .dropdown-menu {
+ left: auto;
+ right: 0;
+ &:before {
+ left: auto;
+ right: 12px;
+ }
+ &:after {
+ left: auto;
+ right: 13px;
+ }
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navs.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navs.scss
new file mode 100644
index 0000000..27623aa
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_navs.scss
@@ -0,0 +1,329 @@
+// NAVIGATIONS
+// -----------
+
+
+
+// BASE CLASS
+// ----------
+
+.nav {
+ margin-left: 0;
+ margin-bottom: $baseLineHeight;
+ list-style: none;
+}
+
+// Make links block level
+.nav > li > a {
+ display: block;
+}
+.nav > li > a:hover {
+ text-decoration: none;
+ background-color: $grayLighter;
+}
+
+// Nav headers (for dropdowns and lists)
+.nav .nav-header {
+ display: block;
+ padding: 3px 15px;
+ font-size: 11px;
+ font-weight: bold;
+ line-height: $baseLineHeight;
+ color: $grayLight;
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
+ text-transform: uppercase;
+}
+// Space them out when they follow another list item (link)
+.nav li + .nav-header {
+ margin-top: 9px;
+}
+
+
+// NAV LIST
+// --------
+
+.nav-list {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0;
+}
+.nav-list > li > a, .nav-list .nav-header {
+ margin-left: -15px;
+ margin-right: -15px;
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
+}
+.nav-list > li > a {
+ padding: 3px 15px;
+}
+.nav-list .active > a, .nav-list .active > a:hover {
+ color: $white;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.2);
+ background-color: $linkColor;
+}
+.nav-list [class^="icon-"] {
+ margin-right: 2px;
+}
+
+
+
+// TABS AND PILLS
+// -------------
+
+// Common styles
+.nav-tabs, .nav-pills {
+ @include clearfix();
+}
+.nav-tabs > li, .nav-pills > li {
+ float: left;
+}
+.nav-tabs > li > a, .nav-pills > li > a {
+ padding-right: 12px;
+ padding-left: 12px;
+ margin-right: 2px;
+ line-height: 14px; // keeps the overall height an even number
+}
+
+// TABS
+// ----
+
+// Give the tabs something to sit on
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+// Make the list-items overlay the bottom border
+.nav-tabs > li {
+ margin-bottom: -1px;
+}
+
+// Actual tabs (as links)
+.nav-tabs > li > a {
+ padding-top: 9px;
+ padding-bottom: 9px;
+ border: 1px solid transparent;
+ @include border-radius(4px 4px 0 0);
+ &:hover {
+ border-color: $grayLighter $grayLighter #ddd;
+ }
+}
+// Active state, and it's :hover to override normal :hover
+.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
+ color: $gray;
+ background-color: $white;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default;
+}
+
+// PILLS
+// -----
+
+// Links rendered as pills
+.nav-pills > li > a {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ @include border-radius(5px);
+}
+
+// Active state
+.nav-pills .active > a, .nav-pills .active > a:hover {
+ color: $white;
+ background-color: $linkColor;
+}
+
+
+
+// STACKED NAV
+// -----------
+
+// Stacked tabs and pills
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li > a {
+ margin-right: 0; // no need for the gap between nav items
+}
+
+// Tabs
+.nav-tabs.nav-stacked {
+ border-bottom: 0;
+}
+.nav-tabs.nav-stacked > li > a {
+ border: 1px solid #ddd;
+ @include border-radius(0);
+}
+.nav-tabs.nav-stacked > li:first-child > a {
+ @include border-radius(4px 4px 0 0);
+}
+.nav-tabs.nav-stacked > li:last-child > a {
+ @include border-radius(0 0 4px 4px);
+}
+.nav-tabs.nav-stacked > li > a:hover {
+ border-color: #ddd;
+ z-index: 2;
+}
+
+// Pills
+.nav-pills.nav-stacked > li > a {
+ margin-bottom: 3px;
+}
+.nav-pills.nav-stacked > li:last-child > a {
+ margin-bottom: 1px; // decrease margin to match sizing of stacked tabs
+}
+
+
+
+// DROPDOWNS
+// ---------
+
+// Position the menu
+.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
+ margin-top: 1px;
+ border-width: 1px;
+}
+.nav-pills .dropdown-menu {
+ @include border-radius(4px);
+}
+
+// Default dropdown links
+// -------------------------
+// Make carets use linkColor to start
+.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
+ border-top-color: $linkColor;
+ margin-top: 6px;
+}
+.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret {
+ border-top-color: $linkColorHover;
+}
+
+// Active dropdown links
+// -------------------------
+.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret {
+ border-top-color: $grayDark;
+}
+
+// Active:hover dropdown links
+// -------------------------
+.nav > .dropdown.active > a:hover {
+ color: $black;
+ cursor: pointer;
+}
+
+// Open dropdowns
+// -------------------------
+.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover {
+ color: $white;
+ background-color: $grayLight;
+ border-color: $grayLight;
+}
+.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
+ border-top-color: $white;
+ @include opacity(1);
+}
+
+// Dropdowns in stacked tabs
+.tabs-stacked .open > a:hover {
+ border-color: $grayLight;
+}
+
+
+
+// TABBABLE
+// --------
+
+
+// COMMON STYLES
+// -------------
+
+// Clear any floats
+.tabbable {
+ @include clearfix();
+}
+.tab-content {
+ overflow: hidden; // prevent content from running below tabs
+}
+
+// Remove border on bottom, left, right
+.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
+ border-bottom: 0;
+}
+
+// Show/hide tabbable areas
+.tab-content > .tab-pane, .pill-content > .pill-pane {
+ display: none;
+}
+.tab-content > .active, .pill-content > .active {
+ display: block;
+}
+
+
+// BOTTOM
+// ------
+
+.tabs-below .nav-tabs {
+ border-top: 1px solid #ddd;
+}
+.tabs-below .nav-tabs > li {
+ margin-top: -1px;
+ margin-bottom: 0;
+}
+.tabs-below .nav-tabs > li > a {
+ @include border-radius(0 0 4px 4px);
+ &:hover {
+ border-bottom-color: transparent;
+ border-top-color: #ddd;
+ }
+}
+.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover {
+ border-color: transparent #ddd #ddd #ddd;
+}
+
+// LEFT & RIGHT
+// ------------
+
+// Common styles
+.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li {
+ float: none;
+}
+.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a {
+ min-width: 74px;
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+
+// Tabs on the left
+.tabs-left .nav-tabs {
+ float: left;
+ margin-right: 19px;
+ border-right: 1px solid #ddd;
+}
+.tabs-left .nav-tabs > li > a {
+ margin-right: -1px;
+ @include border-radius(4px 0 0 4px);
+}
+.tabs-left .nav-tabs > li > a:hover {
+ border-color: $grayLighter #ddd $grayLighter $grayLighter;
+}
+.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover {
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: $white;
+}
+
+// Tabs on the right
+.tabs-right .nav-tabs {
+ float: right;
+ margin-left: 19px;
+ border-left: 1px solid #ddd;
+}
+.tabs-right .nav-tabs > li > a {
+ margin-left: -1px;
+ @include border-radius(0 4px 4px 0);
+}
+.tabs-right .nav-tabs > li > a:hover {
+ border-color: $grayLighter $grayLighter $grayLighter #ddd;
+}
+.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover {
+ border-color: #ddd #ddd #ddd transparent;
+ *border-left-color: $white;
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pager.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pager.scss
new file mode 100644
index 0000000..ee6afef
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pager.scss
@@ -0,0 +1,30 @@
+// PAGER
+// -----
+
+.pager {
+ margin-left: 0;
+ margin-bottom: $baseLineHeight;
+ list-style: none;
+ text-align: center;
+ @include clearfix();
+}
+.pager li {
+ display: inline;
+}
+.pager a {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ @include border-radius(15px);
+}
+.pager a:hover {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.pager .next a {
+ float: right;
+}
+.pager .previous a {
+ float: left;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pagination.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pagination.scss
new file mode 100644
index 0000000..105c710
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_pagination.scss
@@ -0,0 +1,53 @@
+// PAGINATION
+// ----------
+
+.pagination {
+ height: $baseLineHeight * 2;
+ margin: $baseLineHeight 0;
+ }
+.pagination ul {
+ display: inline-block;
+ @include ie7-inline-block();
+ margin-left: 0;
+ margin-bottom: 0;
+ @include border-radius(3px);
+ @include box-shadow(0 1px 2px rgba(0,0,0,.05));
+}
+.pagination li {
+ display: inline;
+}
+.pagination a {
+ float: left;
+ padding: 0 14px;
+ line-height: ($baseLineHeight * 2) - 2;
+ text-decoration: none;
+ border: 1px solid #ddd;
+ border-left-width: 0;
+}
+.pagination a:hover, .pagination .active a {
+ background-color: #f5f5f5;
+}
+.pagination .active a {
+ color: $grayLight;
+ cursor: default;
+}
+.pagination .disabled a, .pagination .disabled a:hover {
+ color: $grayLight;
+ background-color: transparent;
+ cursor: default;
+}
+.pagination li:first-child a {
+ border-left-width: 1px;
+ @include border-radius(3px 0 0 3px);
+}
+.pagination li:last-child a {
+ @include border-radius(0 3px 3px 0);
+}
+
+// Centered
+.pagination-centered {
+ text-align: center;
+}
+.pagination-right {
+ text-align: right;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_popovers.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_popovers.scss
new file mode 100644
index 0000000..a0b200e
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_popovers.scss
@@ -0,0 +1,49 @@
+// POPOVERS
+// --------
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: $zindexPopover;
+ display: none;
+ padding: 5px;
+ &.top { margin-top: -5px; }
+ &.right { margin-left: 5px; }
+ &.bottom { margin-top: 5px; }
+ &.left { margin-left: -5px; }
+ &.top .arrow { @include popoverArrowTop(); }
+ &.right .arrow { @include popoverArrowRight(); }
+ &.bottom .arrow { @include popoverArrowBottom(); }
+ &.left .arrow { @include popoverArrowLeft(); }
+ .arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ }
+}
+.popover-inner {
+ padding: 3px;
+ width: 280px;
+ overflow: hidden;
+ background: $black; // has to be full background declaration for IE fallback
+ background: rgba(0,0,0,.8);
+ @include border-radius(6px);
+ @include box-shadow(0 3px 7px rgba(0,0,0,0.3));
+}
+.popover-title {
+ padding: 9px 15px;
+ line-height: 1;
+ background-color: #f5f5f5;
+ border-bottom:1px solid #eee;
+ @include border-radius(3px 3px 0 0);
+}
+.popover-content {
+ padding: 14px;
+ background-color: $white;
+ @include border-radius(0 0 3px 3px);
+ @include background-clip(padding-box);
+ p, ul, ol {
+ margin-bottom: 0;
+ }
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_progress-bars.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_progress-bars.scss
new file mode 100644
index 0000000..567a1a5
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_progress-bars.scss
@@ -0,0 +1,95 @@
+// PROGRESS BARS
+// -------------
+
+
+// ANIMATIONS
+// ----------
+
+// Webkit
+@-webkit-keyframes progress-bar-stripes {
+ from { background-position: 0 0; }
+ to { background-position: 40px 0; }
+}
+
+// Firefox
+@-moz-keyframes progress-bar-stripes {
+ from { background-position: 0 0; }
+ to { background-position: 40px 0; }
+}
+
+// Spec
+@keyframes progress-bar-stripes {
+ from { background-position: 0 0; }
+ to { background-position: 40px 0; }
+}
+
+
+
+// THE BARS
+// --------
+
+// Outer container
+.progress {
+ overflow: hidden;
+ height: 18px;
+ margin-bottom: 18px;
+ @include gradient-vertical(#f5f5f5, #f9f9f9);
+ @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
+ @include border-radius(4px);
+}
+
+// Bar of progress
+.progress .bar {
+ width: 0%;
+ height: 18px;
+ color: $white;
+ font-size: 12px;
+ text-align: center;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ @include gradient-vertical(#149bdf, #0480be);
+ @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
+ @include box-sizing(border-box);
+ @include transition(width .6s ease);
+}
+
+// Striped bars
+.progress-striped .bar {
+ @include gradient-striped(#62c462);
+ @include background-size(40px 40px);
+}
+
+// Call animation for the active one
+.progress.active .bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -moz-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+
+
+// COLORS
+// ------
+
+// Danger (red)
+.progress-danger .bar {
+ @include gradient-vertical(#ee5f5b, #c43c35);
+}
+.progress-danger.progress-striped .bar {
+ @include gradient-striped(#ee5f5b);
+}
+
+// Success (green)
+.progress-success .bar {
+ @include gradient-vertical(#62c462, #57a957);
+}
+.progress-success.progress-striped .bar {
+ @include gradient-striped(#62c462);
+}
+
+// Info (teal)
+.progress-info .bar {
+ @include gradient-vertical(#5bc0de, #339bb9);
+}
+.progress-info.progress-striped .bar {
+ @include gradient-striped(#5bc0de);
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_reset.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_reset.scss
new file mode 100644
index 0000000..baefdeb
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_reset.scss
@@ -0,0 +1,105 @@
+// Reset.css.scss
+// Adapted from Normalize.css http://github.com/necolas/normalize.css
+// ------------------------------------------------------------------------
+
+// Display in IE6-9 and FF3
+// -------------------------
+
+article, aside, details, figcaption, figure, footer, header, hgroup, nav, section {
+ display: block;
+}
+
+// Display block in IE6-9 and FF3
+// -------------------------
+
+audio, canvas, video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+// Prevents modern browsers from displaying 'audio' without controls
+// -------------------------
+
+audio:not([controls]) {
+ display: none;
+}
+
+// Base settings
+// -------------------------
+
+html {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+// Focus states
+a:focus {
+ @include tab-focus();
+}
+// Hover & Active
+a:hover, a:active {
+ outline: 0;
+}
+
+// Prevents sub and sup affecting line-height in all browsers
+// -------------------------
+
+sub, sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+
+// Img border in a's and image quality
+// -------------------------
+
+img {
+ max-width: 100%;
+ height: auto;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+// Forms
+// -------------------------
+
+// Font size in all browsers, margin changes, misc consistency
+button, input, select, textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+button, input {
+ *overflow: visible; // Inner spacing ie IE6/7
+ line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
+}
+button::-moz-focus-inner, input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
+ padding: 0;
+ border: 0;
+}
+button, input[type="button"], input[type="reset"], input[type="submit"] {
+ cursor: pointer; // Cursors on all buttons applied consistently
+ -webkit-appearance: button; // Style clickable inputs in iOS
+}
+input[type="search"] { // Appearance in Safari/Chrome
+ -webkit-appearance: textfield;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
+}
+textarea {
+ overflow: auto; // Remove vertical scrollbar in IE6-9
+ vertical-align: top; // Readability and alignment cross-browser
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_scaffolding.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_scaffolding.scss
new file mode 100644
index 0000000..a4ce99e
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_scaffolding.scss
@@ -0,0 +1,29 @@
+// Scaffolding
+// Basic and global styles for generating a grid system, structural layout, and page templates
+// -------------------------------------------------------------------------------------------
+
+
+// STRUCTURAL LAYOUT
+// -----------------
+
+body {
+ margin: 0;
+ font-family: $baseFontFamily;
+ font-size: $baseFontSize;
+ line-height: $baseLineHeight;
+ color: $textColor;
+ background-color: $white;
+}
+
+
+// LINKS
+// -----
+
+a {
+ color: $linkColor;
+ text-decoration: none;
+}
+a:hover {
+ color: $linkColorHover;
+ text-decoration: underline;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_sprites.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_sprites.scss
new file mode 100644
index 0000000..04a28d2
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_sprites.scss
@@ -0,0 +1,157 @@
+// SPRITES
+// Glyphs and icons for buttons, nav, and more
+// -------------------------------------------
+
+
+// ICONS
+// -----
+
+// All icons receive the styles of the <i> tag with a base class
+// of .i and are then given a unique class to add width, height,
+// and background-position. Your resulting HTML will look like
+// <i class="icon-inbox"></i>.
+
+// For the white version of the icons, just add the .icon-white class:
+// <i class="icon-inbox icon-white"></i>
+
+[class^="icon-"], [class*=" icon-"] {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ line-height: 14px;
+ vertical-align: text-top;
+ background-image: asset-url("glyphicons-halflings.png", image);
+ background-position: 14px 14px;
+ background-repeat: no-repeat;
+
+ @include ie7-restore-right-whitespace();
+}
+.icon-white {
+ background-image: asset-url("glyphicons-halflings-white.png", image);
+}
+
+.icon-glass { background-position: 0 0; }
+.icon-music { background-position: -24px 0; }
+.icon-search { background-position: -48px 0; }
+.icon-envelope { background-position: -72px 0; }
+.icon-heart { background-position: -96px 0; }
+.icon-star { background-position: -120px 0; }
+.icon-star-empty { background-position: -144px 0; }
+.icon-user { background-position: -168px 0; }
+.icon-film { background-position: -192px 0; }
+.icon-th-large { background-position: -216px 0; }
+.icon-th { background-position: -240px 0; }
+.icon-th-list { background-position: -264px 0; }
+.icon-ok { background-position: -288px 0; }
+.icon-remove { background-position: -312px 0; }
+.icon-zoom-in { background-position: -336px 0; }
+.icon-zoom-out { background-position: -360px 0; }
+.icon-off { background-position: -384px 0; }
+.icon-signal { background-position: -408px 0; }
+.icon-cog { background-position: -432px 0; }
+.icon-trash { background-position: -456px 0; }
+
+.icon-home { background-position: 0 -24px; }
+.icon-file { background-position: -24px -24px; }
+.icon-time { background-position: -48px -24px; }
+.icon-road { background-position: -72px -24px; }
+.icon-download-alt { background-position: -96px -24px; }
+.icon-download { background-position: -120px -24px; }
+.icon-upload { background-position: -144px -24px; }
+.icon-inbox { background-position: -168px -24px; }
+.icon-play-circle { background-position: -192px -24px; }
+.icon-repeat { background-position: -216px -24px; }
+.icon-refresh { background-position: -240px -24px; }
+.icon-list-alt { background-position: -264px -24px; }
+.icon-lock { background-position: -287px -24px; } // 1px off
+.icon-flag { background-position: -312px -24px; }
+.icon-headphones { background-position: -336px -24px; }
+.icon-volume-off { background-position: -360px -24px; }
+.icon-volume-down { background-position: -384px -24px; }
+.icon-volume-up { background-position: -408px -24px; }
+.icon-qrcode { background-position: -432px -24px; }
+.icon-barcode { background-position: -456px -24px; }
+
+.icon-tag { background-position: 0 -48px; }
+.icon-tags { background-position: -25px -48px; } // 1px off
+.icon-book { background-position: -48px -48px; }
+.icon-bookmark { background-position: -72px -48px; }
+.icon-print { background-position: -96px -48px; }
+.icon-camera { background-position: -120px -48px; }
+.icon-font { background-position: -144px -48px; }
+.icon-bold { background-position: -167px -48px; } // 1px off
+.icon-italic { background-position: -192px -48px; }
+.icon-text-height { background-position: -216px -48px; }
+.icon-text-width { background-position: -240px -48px; }
+.icon-align-left { background-position: -264px -48px; }
+.icon-align-center { background-position: -288px -48px; }
+.icon-align-right { background-position: -312px -48px; }
+.icon-align-justify { background-position: -336px -48px; }
+.icon-list { background-position: -360px -48px; }
+.icon-indent-left { background-position: -384px -48px; }
+.icon-indent-right { background-position: -408px -48px; }
+.icon-facetime-video { background-position: -432px -48px; }
+.icon-picture { background-position: -456px -48px; }
+
+.icon-pencil { background-position: 0 -72px; }
+.icon-map-marker { background-position: -24px -72px; }
+.icon-adjust { background-position: -48px -72px; }
+.icon-tint { background-position: -72px -72px; }
+.icon-edit { background-position: -96px -72px; }
+.icon-share { background-position: -120px -72px; }
+.icon-check { background-position: -144px -72px; }
+.icon-move { background-position: -168px -72px; }
+.icon-step-backward { background-position: -192px -72px; }
+.icon-fast-backward { background-position: -216px -72px; }
+.icon-backward { background-position: -240px -72px; }
+.icon-play { background-position: -264px -72px; }
+.icon-pause { background-position: -288px -72px; }
+.icon-stop { background-position: -312px -72px; }
+.icon-forward { background-position: -336px -72px; }
+.icon-fast-forward { background-position: -360px -72px; }
+.icon-step-forward { background-position: -384px -72px; }
+.icon-eject { background-position: -408px -72px; }
+.icon-chevron-left { background-position: -432px -72px; }
+.icon-chevron-right { background-position: -456px -72px; }
+
+.icon-plus-sign { background-position: 0 -96px; }
+.icon-minus-sign { background-position: -24px -96px; }
+.icon-remove-sign { background-position: -48px -96px; }
+.icon-ok-sign { background-position: -72px -96px; }
+.icon-question-sign { background-position: -96px -96px; }
+.icon-info-sign { background-position: -120px -96px; }
+.icon-screenshot { background-position: -144px -96px; }
+.icon-remove-circle { background-position: -168px -96px; }
+.icon-ok-circle { background-position: -192px -96px; }
+.icon-ban-circle { background-position: -216px -96px; }
+.icon-arrow-left { background-position: -240px -96px; }
+.icon-arrow-right { background-position: -264px -96px; }
+.icon-arrow-up { background-position: -289px -96px; } // 1px off
+.icon-arrow-down { background-position: -312px -96px; }
+.icon-share-alt { background-position: -336px -96px; }
+.icon-resize-full { background-position: -360px -96px; }
+.icon-resize-small { background-position: -384px -96px; }
+.icon-plus { background-position: -408px -96px; }
+.icon-minus { background-position: -433px -96px; }
+.icon-asterisk { background-position: -456px -96px; }
+
+.icon-exclamation-sign { background-position: 0 -120px; }
+.icon-gift { background-position: -24px -120px; }
+.icon-leaf { background-position: -48px -120px; }
+.icon-fire { background-position: -72px -120px; }
+.icon-eye-open { background-position: -96px -120px; }
+.icon-eye-close { background-position: -120px -120px; }
+.icon-warning-sign { background-position: -144px -120px; }
+.icon-plane { background-position: -168px -120px; }
+.icon-calendar { background-position: -192px -120px; }
+.icon-random { background-position: -216px -120px; }
+.icon-comment { background-position: -240px -120px; }
+.icon-magnet { background-position: -264px -120px; }
+.icon-chevron-up { background-position: -288px -120px; }
+.icon-chevron-down { background-position: -313px -119px; } // 1px off
+.icon-retweet { background-position: -336px -120px; }
+.icon-shopping-cart { background-position: -360px -120px; }
+.icon-folder-close { background-position: -384px -120px; }
+.icon-folder-open { background-position: -408px -120px; }
+.icon-resize-vertical { background-position: -432px -119px; }
+.icon-resize-horizontal { background-position: -456px -118px; }
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tables.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tables.scss
new file mode 100644
index 0000000..4e74b53
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tables.scss
@@ -0,0 +1,126 @@
+//
+// Tables.less
+// Tables for, you guessed it, tabular data
+// ----------------------------------------
+
+
+// BASE TABLES
+// -----------------
+
+table {
+ max-width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+// BASELINE STYLES
+// ---------------
+
+.table {
+ width: 100%;
+ margin-bottom: $baseLineHeight;
+ // Cells
+ th, td {
+ padding: 8px;
+ line-height: $baseLineHeight;
+ text-align: left;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+ }
+ th {
+ font-weight: bold;
+ }
+ // Bottom align for column headings
+ thead th {
+ vertical-align: bottom;
+ }
+ // Remove top border from thead by default
+ thead:first-child tr th, thead:first-child tr td {
+ border-top: 0;
+ }
+ // Account for multiple tbody instances
+ tbody + tbody {
+ border-top: 2px solid #ddd;
+ }
+}
+
+
+
+// CONDENSED TABLE W/ HALF PADDING
+// -------------------------------
+
+.table-condensed {
+ th, td {
+ padding: 4px 5px;
+ }
+}
+
+
+// BORDERED VERSION
+// ----------------
+
+.table-bordered {
+ border: 1px solid #ddd;
+ border-collapse: separate; // Done so we can round those corners!
+ *border-collapse: collapsed; // IE7 can't round corners anyway
+ @include border-radius(4px);
+ th + th, td + td, th + td, td + th {
+ border-left: 1px solid #ddd;
+ }
+ // Prevent a double border
+ thead:first-child tr:first-child th, tbody:first-child tr:first-child th, tbody:first-child tr:first-child td {
+ border-top: 0;
+ }
+ // For first th or td in the first row in the first thead or tbody
+ thead:first-child tr:first-child th:first-child, tbody:first-child tr:first-child td:first-child {
+ @include border-radius(4px 0 0 0);
+ }
+ thead:first-child tr:first-child th:last-child, tbody:first-child tr:first-child td:last-child {
+ @include border-radius(0 4px 0 0);
+ }
+ // For first th or td in the first row in the first thead or tbody
+ thead:last-child tr:last-child th:first-child, tbody:last-child tr:last-child td:first-child {
+ @include border-radius(0 0 0 4px);
+ }
+ thead:last-child tr:last-child th:last-child, tbody:last-child tr:last-child td:last-child {
+ @include border-radius(0 0 4px 0);
+ }
+}
+
+
+// ZEBRA-STRIPING
+// --------------
+
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+.table-striped {
+ tbody {
+ tr:nth-child(odd) td, tr:nth-child(odd) th {
+ background-color: #f9f9f9;
+ }
+ }
+}
+
+
+// HOVER EFFECT
+// ------------
+// Placed here since it has to come after the potential zebra striping
+.table {
+ tbody tr:hover td, tbody tr:hover th {
+ background-color: #f5f5f5;
+ }
+}
+
+// TABLE CELL SIZING
+// -----------------
+
+// Change the columns
+@mixin tableColumns($columnSpan: 1) {
+ float: none;
+ width: (($gridColumnWidth) * $columnSpan) + ($gridGutterWidth * ($columnSpan - 1)) - 16;
+ margin-left: 0;
+}
+table {
+ @for $i from 1 through $gridColumns {
+ .span#{$i} { @include tableColumns($i); }
+ }
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_thumbnails.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_thumbnails.scss
new file mode 100644
index 0000000..4a434b1
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_thumbnails.scss
@@ -0,0 +1,35 @@
+// THUMBNAILS
+// ----------
+
+.thumbnails {
+ margin-left: -$gridGutterWidth;
+ list-style: none;
+ @include clearfix();
+}
+.thumbnails > li {
+ float: left;
+ margin: 0 0 $baseLineHeight $gridGutterWidth;
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ line-height: 1;
+ border: 1px solid #ddd;
+ @include border-radius(4px);
+ @include box-shadow(0 1px 1px rgba(0,0,0,.075));
+}
+// Add a hover state for linked versions only
+a.thumbnail:hover {
+ border-color: $linkColor;
+ @include box-shadow(0 1px 4px rgba(0,105,214,.25));
+}
+// Images and captions
+.thumbnail > img {
+ display: block;
+ max-width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+}
+.thumbnail .caption {
+ padding: 9px;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tooltip.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tooltip.scss
new file mode 100644
index 0000000..488dc63
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_tooltip.scss
@@ -0,0 +1,35 @@
+// TOOLTIP
+// ------=
+
+.tooltip {
+ position: absolute;
+ z-index: $zindexTooltip;
+ display: block;
+ visibility: visible;
+ padding: 5px;
+ font-size: 11px;
+ @include opacity(0);
+ &.in { @include opacity(0.8); }
+ &.top { margin-top: -2px; }
+ &.right { margin-left: 2px; }
+ &.bottom { margin-top: 2px; }
+ &.left { margin-left: -2px; }
+ &.top .tooltip-arrow { @include popoverArrowTop(); }
+ &.left .tooltip-arrow { @include popoverArrowLeft(); }
+ &.bottom .tooltip-arrow { @include popoverArrowBottom(); }
+ &.right .tooltip-arrow { @include popoverArrowRight(); }
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: $white;
+ text-align: center;
+ text-decoration: none;
+ background-color: $black;
+ @include border-radius(4px);
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+}
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_type.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_type.scss
new file mode 100644
index 0000000..5670b49
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_type.scss
@@ -0,0 +1,209 @@
+// Typography.less
+// Headings, body text, lists, code, and more for a versatile and durable typography system
+// ----------------------------------------------------------------------------------------
+
+
+// BODY TEXT
+// ---------
+
+p {
+ margin: 0 0 $baseLineHeight / 2;
+ font-family: $baseFontFamily;
+ font-size: $baseFontSize;
+ line-height: $baseLineHeight;
+ small {
+ font-size: $baseFontSize - 2;
+ color: $grayLight;
+ }
+}
+.lead {
+ margin-bottom: $baseLineHeight;
+ font-size: 20px;
+ font-weight: 200;
+ line-height: $baseLineHeight * 1.5;
+}
+
+// HEADINGS
+// --------
+
+h1, h2, h3, h4, h5, h6 {
+ margin: 0;
+ font-weight: bold;
+ color: $grayDark;
+ text-rendering: optimizelegibility; // Fix the character spacing for headings
+ small {
+ font-weight: normal;
+ color: $grayLight;
+ }
+}
+h1 {
+ font-size: 30px;
+ line-height: $baseLineHeight * 2;
+ small {
+ font-size: 18px;
+ }
+}
+h2 {
+ font-size: 24px;
+ line-height: $baseLineHeight * 2;
+ small {
+ font-size: 18px;
+ }
+}
+h3 {
+ line-height: $baseLineHeight * 1.5;
+ font-size: 18px;
+ small {
+ font-size: 14px;
+ }
+}
+h4, h5, h6 {
+ line-height: $baseLineHeight;
+}
+h4 {
+ font-size: 14px;
+ small {
+ font-size: 12px;
+ }
+}
+h5 {
+ font-size: 12px;
+}
+h6 {
+ font-size: 11px;
+ color: $grayLight;
+ text-transform: uppercase;
+}
+
+// Page header
+.page-header {
+ padding-bottom: $baseLineHeight - 1;
+ margin: $baseLineHeight 0;
+ border-bottom: 1px solid $grayLighter;
+}
+.page-header h1 {
+ line-height: 1;
+}
+
+
+
+// LISTS
+// -----
+
+// Unordered and Ordered lists
+ul, ol {
+ padding: 0;
+ margin: 0 0 $baseLineHeight / 2 25px;
+}
+ul ul, ul ol, ol ol, ol ul {
+ margin-bottom: 0;
+}
+ul {
+ list-style: disc;
+}
+ol {
+ list-style: decimal;
+}
+li {
+ line-height: $baseLineHeight;
+}
+ul.unstyled, ol.unstyled {
+ margin-left: 0;
+ list-style: none;
+}
+
+// Description Lists
+dl {
+ margin-bottom: $baseLineHeight;
+}
+dt, dd {
+ line-height: $baseLineHeight;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: $baseLineHeight / 2;
+}
+
+// MISC
+// ----
+
+// Horizontal rules
+hr {
+ margin: $baseLineHeight 0;
+ border: 0;
+ border-top: 1px solid $hrBorder;
+ border-bottom: 1px solid $white;
+}
+
+// Emphasis
+strong {
+ font-weight: bold;
+}
+em {
+ font-style: italic;
+}
+.muted {
+ color: $grayLight;
+}
+
+// Abbreviations and acronyms
+abbr {
+ font-size: 90%;
+ text-transform: uppercase;
+ border-bottom: 1px dotted #ddd;
+ cursor: help;
+}
+
+// Blockquotes
+blockquote {
+ padding: 0 0 0 15px;
+ margin: 0 0 $baseLineHeight;
+ border-left: 5px solid $grayLighter;
+ p {
+ margin-bottom: 0;
+ @include font-shorthand(16px,300,$baseLineHeight * 1.25);
+ }
+ small {
+ display: block;
+ line-height: $baseLineHeight;
+ color: $grayLight;
+ &:before {
+ content: '\2014 \00A0';
+ }
+ }
+
+ // Float right with text-align: right
+ &.pull-right {
+ float: right;
+ padding-left: 0;
+ padding-right: 15px;
+ border-left: 0;
+ border-right: 5px solid $grayLighter;
+ p, small {
+ text-align: right;
+ }
+ }
+}
+
+// Quotes
+q:before, q:after, blockquote:before, blockquote:after {
+ content: "";
+}
+
+// Addresses
+address {
+ display: block;
+ margin-bottom: $baseLineHeight;
+ line-height: $baseLineHeight;
+ font-style: normal;
+}
+
+// Misc
+small {
+ font-size: 100%;
+}
+cite {
+ font-style: normal;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_utilities.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_utilities.scss
new file mode 100644
index 0000000..2171f61
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_utilities.scss
@@ -0,0 +1,23 @@
+// UTILITY CLASSES
+// ---------------
+
+// Quick floats
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+
+// Toggling content
+.hide {
+ display: none;
+}
+.show {
+ display: block;
+}
+
+// Visibility
+.invisible {
+ visibility: hidden;
+} \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_variables.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_variables.scss
new file mode 100644
index 0000000..3e4faf5
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_variables.scss
@@ -0,0 +1,103 @@
+// Variables.less
+// Variables to customize the look and feel of Bootstrap
+// -----------------------------------------------------
+
+
+
+// GLOBAL VALUES
+// --------------------------------------------------
+
+// Links
+$linkColor: #08c !default;
+$linkColorHover: darken($linkColor, 15%) !default;
+
+// Grays
+$black: #000 !default;
+$grayDarker: #222 !default;
+$grayDark: #333 !default;
+$gray: #555 !default;
+$grayLight: #999 !default;
+$grayLighter: #eee !default;
+$white: #fff !default;
+
+// Accent colors
+$blue: #049cdb !default;
+$blueDark: #0064cd !default;
+$green: #46a546 !default;
+$red: #9d261d !default;
+$yellow: #ffc40d !default;
+$orange: #f89406 !default;
+$pink: #c3325f !default;
+$purple: #7a43b6 !default;
+
+// Typography
+$baseFontSize: 13px !default;
+$baseFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif !default;
+$baseLineHeight: 18px !default;
+$textColor: $grayDark !default;
+
+// Buttons
+$primaryButtonBackground: $linkColor !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 :)
+$zindexDropdown: 1000;
+$zindexPopover: 1010;
+$zindexTooltip: 1020;
+$zindexFixedNavbar: 1030;
+$zindexModalBackdrop: 1040;
+$zindexModal: 1050;
+
+// Input placeholder text color
+$placeholderText: $grayLight !default;
+
+// HR border color
+$hrBorder: $grayLighter !default;
+
+// Navbar
+$navbarHeight: 40px !default;
+$navbarBackground: $grayDarker !default;
+$navbarBackgroundHighlight: $grayDark !default;
+$navbarLinkBackgroundHover: transparent !default;
+
+$navbarText: $grayLight !default;
+$navbarLinkColor: $grayLight !default;
+$navbarLinkColorHover: $white !default;
+
+// Form states and alerts
+$warningText: #c09853 !default;
+$warningBackground: #fcf8e3 !default;
+$warningBorder: darken(adjust-hue($warningBackground, -10), 3%) !default;
+
+$errorText: #b94a48 !default;
+$errorBackground: #f2dede !default;
+$errorBorder: darken(adjust-hue($errorBackground, -10), 3%) !default;
+
+$successText: #468847 !default;
+$successBackground: #dff0d8 !default;
+$successBorder: darken(adjust-hue($successBackground, -10), 5%) !default;
+
+$infoText: #3a87ad !default;
+$infoBackground: #d9edf7 !default;
+$infoBorder: darken(adjust-hue($infoBackground, -10), 7%) !default;
+
+
+
+// GRID
+// --------------------------------------------------
+
+// Default 940px grid
+$gridColumns: 12 !default;
+$gridColumnWidth: 60px !default;
+$gridGutterWidth: 20px !default;
+$gridRowWidth: ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1)) !default;
+
+// Fluid grid
+$fluidGridColumnWidth: 6.382978723% !default;
+$fluidGridGutterWidth: 2.127659574% !default; \ No newline at end of file
diff --git a/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_wells.scss b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_wells.scss
new file mode 100644
index 0000000..4347b89
--- /dev/null
+++ b/xstatic/pkg/bootstrap_scss/data/scss/bootstrap/_wells.scss
@@ -0,0 +1,17 @@
+// WELLS
+// -----
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #eee;
+ border: 1px solid rgba(0,0,0,.05);
+ @include border-radius(4px);
+ @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
+ blockquote {
+ border-color: #ddd;
+ border-color: rgba(0,0,0,.15);
+ }
+} \ No newline at end of file