diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..4040c6c1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*.gem
+.bundle
+Gemfile.lock
+pkg/*
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 00000000..53c6a4ce
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,5 @@
+source "http://rubygems.org"
+
+# Specify your gem's dependencies in twitter-bootstrap-rails.gemspec
+gemspec
+gem 'less-rails', :path => ENV['LESS_RAILS_PATH'] if ENV['LESS_RAILS_PATH']
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..311f4db8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,133 @@
+# Twitter Bootstrap for Rails 3.1 Asset Pipeline
+Bootstrap is a toolkit from Twitter designed to kickstart development of webapps and sites.
+It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more.
+
+
+twitter-bootstrap-rails project integrates Bootstrap CSS toolkit for Rails 3.1 Asset Pipeline
+
+
+## Installing Gem
+
+Include Bootstrap in Gemfile;
+
+ gem 'twitter-bootstrap-rails'
+
+or you can install from latest build;
+
+ gem 'twitter-bootstrap-rails', :git => 'http://github.com/seyhunak/twitter-bootstrap-rails.git'
+
+You can run bundle from command line
+
+ bundle install
+
+
+## Using with Less
+
+Bootstrap was built with Preboot, an open-source pack of mixins and variables to be used in conjunction with Less,
+a CSS preprocessor for faster and easier web development.
+
+## Using stylesheets with Less
+
+You have to require Bootstrap LESS (bootstrap.less) in your application.css
+
+ /*
+ *= require bootstrap
+ */
+
+ /* Your stylesheets goes here... */
+
+
+Now, you can override LESS files provided by Twitter Bootstrap
+
+ @import "bootstrap";
+
+ // Baseline grid
+ @basefont: 13px;
+ @baseline: 18px;
+
+
+## Using javascripts
+
+You have to require Bootstrap JS (bootstrap.js) in your application.js
+
+ //= require bootstrap
+
+ $(document).ready(function(){
+ /* Your javascripts goes here... */
+ });
+
+
+## Using with coffeescript
+
+Using Twitter Bootstrap with the CoffeeScript is easy.
+Just create a application.js.coffee file to /app/assets/javascripts/ folder and put lines below.
+
+ $ ->
+ $("body > .topbar").scrollSpy()
+ $ ->
+ $(".tabs").tabs()
+ $ ->
+ $("a[rel=twipsy]").twipsy live: true
+ $ ->
+ $("a[rel=popover]").popover offset: 10
+ $ ->
+ $(".topbar-wrapper").dropdown()
+ $ ->
+ $(".alert-message").alert()
+ $ ->
+ domModal = $(".modal").modal(
+ backdrop: true
+ closeOnEscape: true
+ )
+ $(".open-modal").click ->
+ domModal.toggle()
+
+
+## Using Static CSS, JS (w/o Less)
+
+twitter-bootstrap-rails has seperate branch (w/o Less) that just serves latest static CSS, JS files.
+
+ You can install from latest build (from branch);
+
+ gem 'twitter-bootstrap-rails', :git => "git://github.com/seyhunak/twitter-bootstrap-rails.git", :branch => "static"
+
+
+## Changelog
+
+ - Version 0.0.5 deprecated
+ - Asset files updated to latest and removed version numbers
+ - Implemented Less::Rails Railtie to use with LESS
+ - Fixed railtie to only initialize Less when installed
+ - Created new branch for the static version of Bootstrap (w/o Less) - check static branch
+ - Added path to support heroku deploy
+
+
+## Credits
+Seyhun Akyürek - seyhunak [at] gmail com
+
+[Follow me on Twitter](http://twitter.com/seyhunak "Twitter")
+
+
+## Contributors & Patches
+
+ - Daniel Morris
+ - Bradly Feeley
+ - Guilherme Moreira
+ - Alex Behar
+ - Brandon Keene
+ - Anthony Corcutt
+
+
+
+## Thanks
+Twitter Bootstrap
+http://twitter.github.com/bootstrap
+
+
+## License
+Copyright (c) 2011 Seyhun Akyürek
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 00000000..f844006f
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,3 @@
+require 'bundler'
+Bundler::GemHelper.install_tasks
+
diff --git a/lib/twitter-bootstrap-rails.rb b/lib/twitter-bootstrap-rails.rb
new file mode 100644
index 00000000..adb21579
--- /dev/null
+++ b/lib/twitter-bootstrap-rails.rb
@@ -0,0 +1,10 @@
+require 'less-rails'
+require "twitter/bootstrap/rails/version"
+require "twitter/bootstrap/rails/engine"
+
+module Twitter
+ module Bootstrap
+ module Rails
+ end
+ end
+end
diff --git a/lib/twitter-bootstrap-rails.rb~ b/lib/twitter-bootstrap-rails.rb~
new file mode 100644
index 00000000..aa3a2b40
--- /dev/null
+++ b/lib/twitter-bootstrap-rails.rb~
@@ -0,0 +1,9 @@
+module Twitter
+ module Bootstrap
+ module Rails
+ end
+ end
+end
+require 'less-rails'
+require "twitter/bootstrap/rails/version"
+require "twitter/bootstrap/rails/engine"
diff --git a/lib/twitter/bootstrap/bootstrap.rb~ b/lib/twitter/bootstrap/bootstrap.rb~
new file mode 100644
index 00000000..499af701
--- /dev/null
+++ b/lib/twitter/bootstrap/bootstrap.rb~
@@ -0,0 +1,2 @@
+require "twitter/bootstrap/rails/version"
+require "twitter/bootstrap/rails/engine"
diff --git a/lib/twitter/bootstrap/rails/engine.rb b/lib/twitter/bootstrap/rails/engine.rb
new file mode 100644
index 00000000..0b452d8c
--- /dev/null
+++ b/lib/twitter/bootstrap/rails/engine.rb
@@ -0,0 +1,15 @@
+module Twitter
+ module Bootstrap
+ module Rails
+ class Engine < ::Rails::Engine
+
+ initializer 'twitter-bootstrap-rails.setup',
+ :after => 'less-rails.after.load_config_initializers',
+ :group => :all do |app|
+ app.config.less.paths << File.join(config.root, 'vendor', 'toolkit')
+ end
+
+ end
+ end
+ end
+end
diff --git a/lib/twitter/bootstrap/rails/engine.rb~ b/lib/twitter/bootstrap/rails/engine.rb~
new file mode 100644
index 00000000..7cad0b16
--- /dev/null
+++ b/lib/twitter/bootstrap/rails/engine.rb~
@@ -0,0 +1,15 @@
+module Twitter
+ module Bootstrap
+ module Rails
+ class Engine < ::Rails::Engine
+ config.after_initialize do |app|
+ # Only run when less is installed
+ if app.config.try(:less)
+ app.config.less.paths << "#{config.root}vendor/stylesheets/bootstrap"
+ app.config.less.paths << "#{config.root}vendor/assets/stylesheets/bootstrap"
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/twitter/bootstrap/rails/version.rb b/lib/twitter/bootstrap/rails/version.rb
new file mode 100644
index 00000000..ac461448
--- /dev/null
+++ b/lib/twitter/bootstrap/rails/version.rb
@@ -0,0 +1,8 @@
+module Twitter
+ module Bootstrap
+ module Rails
+ VERSION = "1.3.0"
+ end
+ end
+end
+
diff --git a/twitter-bootstrap-rails.gemspec b/twitter-bootstrap-rails.gemspec
new file mode 100644
index 00000000..fdea9c3d
--- /dev/null
+++ b/twitter-bootstrap-rails.gemspec
@@ -0,0 +1,29 @@
+# -*- encoding: utf-8 -*-
+$:.push File.expand_path("../lib", __FILE__)
+require "twitter/bootstrap/rails/version"
+
+Gem::Specification.new do |s|
+ s.name = "twitter-bootstrap-rails"
+ s.version = Twitter::Bootstrap::Rails::VERSION
+ s.platform = Gem::Platform::RUBY
+ s.authors = ["Seyhun Akyurek"]
+ s.email = ["seyhunak@gmail.com"]
+ s.homepage = "https://github.com/seyhunak/twitter-bootstrap-rails"
+ s.summary = %q{Bootstrap CSS toolkit for Rails 3.1 Asset Pipeline}
+ s.description = %q{twitter-bootstrap-rails project integrates Bootstrap CSS toolkit for Rails 3.1 Asset Pipeline}
+
+ s.rubyforge_project = "twitter-bootstrap-rails"
+
+ s.files = `git ls-files`.split("\n")
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
+ s.require_paths = ["lib","vendor"]
+
+ s.add_runtime_dependency 'less'
+ s.add_runtime_dependency "less-rails", "~> 2.0.1"
+ s.add_runtime_dependency 'railties'
+ s.add_runtime_dependency 'actionpack'
+ s.add_development_dependency "bundler"
+ s.add_development_dependency 'rails', '~> 3.1.1'
+end
+
diff --git a/vendor/assets/javascripts/bootstrap.js b/vendor/assets/javascripts/bootstrap.js
new file mode 100644
index 00000000..e82fcc26
--- /dev/null
+++ b/vendor/assets/javascripts/bootstrap.js
@@ -0,0 +1,7 @@
+//= require twitter/bootstrap/bootstrap-alerts
+//= require twitter/bootstrap/bootstrap-dropdown
+//= require twitter/bootstrap/bootstrap-modal
+//= require twitter/bootstrap/bootstrap-twipsy
+//= require twitter/bootstrap/bootstrap-popover
+//= require twitter/bootstrap/bootstrap-scrollspy
+//= require twitter/bootstrap/bootstrap-tabs
diff --git a/vendor/assets/javascripts/bootstrap.js~ b/vendor/assets/javascripts/bootstrap.js~
new file mode 100644
index 00000000..d4d587b2
--- /dev/null
+++ b/vendor/assets/javascripts/bootstrap.js~
@@ -0,0 +1,15 @@
+//= require bootstrap-alerts
+//= require bootstrap-dropdown
+//= require bootstrap-modal
+//= require bootstrap-twipsy
+//= require bootstrap-popover
+//= require bootstrap-scrollspy
+//= require bootstrap-tabs
+
+//= require twitter/bootstrap/bootstrap-alerts
+//= require twitter/bootstrap/bootstrap-dropdown
+//= require twitter/bootstrap/bootstrap-modal
+//= require twitter/bootstrap/twipsy
+//= require twitter/bootstrap/popover
+//= require twitter/bootstrap/scrollspy
+//= require twitter/bootstrap/tabs
diff --git a/vendor/assets/javascripts/twitter/bootstrap/bootstrap-alerts.js b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-alerts.js
new file mode 100644
index 00000000..d3c40be1
--- /dev/null
+++ b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-alerts.js
@@ -0,0 +1,104 @@
+/* ==========================================================
+ * bootstrap-alerts.js v1.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2011 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( $ ){
+
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
+ * ======================================================= */
+
+ var transitionEnd
+
+ $(document).ready(function () {
+
+ $.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
+ })()
+
+ // set CSS transition event type
+ if ( $.support.transition ) {
+ transitionEnd = "TransitionEnd"
+ if ( $.browser.webkit ) {
+ transitionEnd = "webkitTransitionEnd"
+ } else if ( $.browser.mozilla ) {
+ transitionEnd = "transitionend"
+ } else if ( $.browser.opera ) {
+ transitionEnd = "oTransitionEnd"
+ }
+ }
+
+ })
+
+ /* ALERT CLASS DEFINITION
+ * ====================== */
+
+ var Alert = function ( content, selector ) {
+ this.$element = $(content)
+ .delegate(selector || '.close', 'click', this.close)
+ }
+
+ Alert.prototype = {
+
+ close: function (e) {
+ var $element = $(this).parent('.alert-message')
+
+ e && e.preventDefault()
+ $element.removeClass('in')
+
+ function removeElement () {
+ $element.remove()
+ }
+
+ $.support.transition && $element.hasClass('fade') ?
+ $element.bind(transitionEnd, removeElement) :
+ removeElement()
+ }
+
+ }
+
+
+ /* ALERT PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.alert = function ( options ) {
+
+ if ( options === true ) {
+ return this.data('alert')
+ }
+
+ return this.each(function () {
+ var $this = $(this)
+
+ if ( typeof options == 'string' ) {
+ return $this.data('alert')[options]()
+ }
+
+ $(this).data('alert', new Alert( this ))
+
+ })
+ }
+
+ $(document).ready(function () {
+ new Alert($('body'), '.alert-message[data-alert] .close')
+ })
+
+}( window.jQuery || window.ender );
\ No newline at end of file
diff --git a/vendor/assets/javascripts/twitter/bootstrap/bootstrap-dropdown.js b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-dropdown.js
new file mode 100644
index 00000000..ab761860
--- /dev/null
+++ b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-dropdown.js
@@ -0,0 +1,50 @@
+/* ============================================================
+ * bootstrap-dropdown.js v1.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#dropdown
+ * ============================================================
+ * Copyright 2011 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( $ ){
+
+ var d = 'a.menu, .dropdown-toggle'
+
+ function clearMenus() {
+ $(d).parent('li').removeClass('open')
+ }
+
+ $(function () {
+ $('html').bind("click", clearMenus)
+ $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' )
+ })
+
+ /* DROPDOWN PLUGIN DEFINITION
+ * ========================== */
+
+ $.fn.dropdown = function ( selector ) {
+ return this.each(function () {
+ $(this).delegate(selector || d, 'click', function (e) {
+ var li = $(this).parent('li')
+ , isActive = li.hasClass('open')
+
+ clearMenus()
+ !isActive && li.toggleClass('open')
+ return false
+ })
+ })
+ }
+
+}( window.jQuery || window.ender );
\ No newline at end of file
diff --git a/vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js
new file mode 100644
index 00000000..75fecafb
--- /dev/null
+++ b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js
@@ -0,0 +1,238 @@
+/* =========================================================
+ * bootstrap-modal.js v1.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#modal
+ * =========================================================
+ * Copyright 2011 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( $ ){
+
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
+ * ======================================================= */
+
+ var transitionEnd
+
+ $(document).ready(function () {
+
+ $.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
+ })()
+
+ // set CSS transition event type
+ if ( $.support.transition ) {
+ transitionEnd = "TransitionEnd"
+ if ( $.browser.webkit ) {
+ transitionEnd = "webkitTransitionEnd"
+ } else if ( $.browser.mozilla ) {
+ transitionEnd = "transitionend"
+ } else if ( $.browser.opera ) {
+ transitionEnd = "oTransitionEnd"
+ }
+ }
+
+ })
+
+
+ /* MODAL PUBLIC CLASS DEFINITION
+ * ============================= */
+
+ var Modal = function ( content, options ) {
+ this.settings = $.extend({}, $.fn.modal.defaults)
+ this.$element = $(content)
+ .delegate('.close', 'click.modal', $.proxy(this.hide, this))
+
+ if ( options ) {
+ $.extend( this.settings, options )
+
+ if ( options.show ) {
+ this.show()
+ }
+ }
+
+ return this
+ }
+
+ Modal.prototype = {
+
+ toggle: function () {
+ return this[!this.isShown ? 'show' : 'hide']()
+ }
+
+ , show: function () {
+ var that = this
+ this.isShown = true
+ this.$element.trigger('show')
+
+ escape.call(this)
+ backdrop.call(this, function () {
+ that.$element
+ .appendTo(document.body)
+ .show()
+
+ if ($.support.transition && that.$element.hasClass('fade')) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element
+ .addClass('in')
+ .trigger('shown')
+ })
+
+ return this
+ }
+
+ , hide: function (e) {
+ e && e.preventDefault()
+
+ var that = this
+ this.isShown = false
+
+ escape.call(this)
+
+ this.$element
+ .trigger('hide')
+ .removeClass('in')
+
+ function removeElement () {
+ that.$element
+ .hide()
+ .trigger('hidden')
+
+ backdrop.call(that)
+ }
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element.one(transitionEnd, removeElement) :
+ removeElement()
+
+ return this
+ }
+
+ }
+
+
+ /* MODAL PRIVATE METHODS
+ * ===================== */
+
+ function backdrop ( callback ) {
+ var that = this
+ , animate = this.$element.hasClass('fade') ? 'fade' : ''
+ if ( this.isShown && this.settings.backdrop ) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $('')
+ .appendTo(document.body)
+
+ if ( this.settings.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(transitionEnd, callback) :
+ callback()
+
+ } else if ( !this.isShown && this.$backdrop ) {
+ this.$backdrop.removeClass('in')
+
+ function removeElement() {
+ that.$backdrop.remove()
+ that.$backdrop = null
+ }
+
+ $.support.transition && this.$element.hasClass('fade')?
+ this.$backdrop.one(transitionEnd, removeElement) :
+ removeElement()
+ } else if ( callback ) {
+ callback()
+ }
+ }
+
+ function escape() {
+ var that = this
+ if ( this.isShown && this.settings.keyboard ) {
+ $(document).bind('keyup.modal', function ( e ) {
+ if ( e.which == 27 ) {
+ that.hide()
+ }
+ })
+ } else if ( !this.isShown ) {
+ $(document).unbind('keyup.modal')
+ }
+ }
+
+
+ /* MODAL PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.modal = function ( options ) {
+ var modal = this.data('modal')
+
+ if (!modal) {
+
+ if (typeof options == 'string') {
+ options = {
+ show: /show|toggle/.test(options)
+ }
+ }
+
+ return this.each(function () {
+ $(this).data('modal', new Modal(this, options))
+ })
+ }
+
+ if ( options === true ) {
+ return modal
+ }
+
+ if ( typeof options == 'string' ) {
+ modal[options]()
+ } else if ( modal ) {
+ modal.toggle()
+ }
+
+ return this
+ }
+
+ $.fn.modal.Modal = Modal
+
+ $.fn.modal.defaults = {
+ backdrop: false
+ , keyboard: false
+ , show: true
+ }
+
+
+ /* MODAL DATA- IMPLEMENTATION
+ * ========================== */
+
+ $(document).ready(function () {
+ $('body').delegate('[data-controls-modal]', 'click', function (e) {
+ e.preventDefault()
+ var $this = $(this).data('show', true)
+ $('#' + $this.attr('data-controls-modal')).modal( $this.data() )
+ })
+ })
+
+}( window.jQuery || window.ender );
\ No newline at end of file
diff --git a/vendor/assets/javascripts/twitter/bootstrap/bootstrap-popover.js b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-popover.js
new file mode 100644
index 00000000..5857840d
--- /dev/null
+++ b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-popover.js
@@ -0,0 +1,77 @@
+/* ===========================================================
+ * bootstrap-popover.js v1.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#popover
+ * ===========================================================
+ * Copyright 2011 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( $ ) {
+
+ var Popover = function ( element, options ) {
+ this.$element = $(element)
+ this.options = options
+ this.enabled = true
+ this.fixTitle()
+ }
+
+ /* NOTE: POPOVER EXTENDS BOOTSTRAP-TWIPSY.js
+ ========================================= */
+
+ Popover.prototype = $.extend({}, $.fn.twipsy.Twipsy.prototype, {
+
+ setContent: function () {
+ var $tip = this.tip()
+ $tip.find('.title')[this.options.html ? 'html' : 'text'](this.getTitle())
+ $tip.find('.content p')[this.options.html ? 'html' : 'text'](this.getContent())
+ $tip[0].className = 'popover'
+ }
+
+ , getContent: function () {
+ var content
+ , $e = this.$element
+ , o = this.options
+
+ if (typeof this.options.content == 'string') {
+ content = $e.attr(o.content)
+ } else if (typeof this.options.content == 'function') {
+ content = this.options.content.call(this.$element[0])
+ }
+ return content
+ }
+
+ , tip: function() {
+ if (!this.$tip) {
+ this.$tip = $('')
+ .html('')
+ }
+ return this.$tip
+ }
+
+ })
+
+
+ /* POPOVER PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.popover = function (options) {
+ if (typeof options == 'object') options = $.extend({}, $.fn.popover.defaults, options)
+ $.fn.twipsy.initWith.call(this, options, Popover, 'popover')
+ return this
+ }
+
+ $.fn.popover.defaults = $.extend({} , $.fn.twipsy.defaults, { content: 'data-content', placement: 'right'})
+
+}( window.jQuery || window.ender );
\ No newline at end of file
diff --git a/vendor/assets/javascripts/twitter/bootstrap/bootstrap-scrollspy.js b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-scrollspy.js
new file mode 100644
index 00000000..28229143
--- /dev/null
+++ b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-scrollspy.js
@@ -0,0 +1,105 @@
+/* =============================================================
+ * bootstrap-scrollspy.js v1.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
+ * =============================================================
+ * Copyright 2011 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 ( $ ) {
+
+ var $window = $(window)
+
+ function ScrollSpy( topbar, selector ) {
+ var processScroll = $.proxy(this.processScroll, this)
+ this.$topbar = $(topbar)
+ this.selector = selector || 'li > a'
+ this.refresh()
+ this.$topbar.delegate(this.selector, 'click', processScroll)
+ $window.scroll(processScroll)
+ this.processScroll()
+ }
+
+ ScrollSpy.prototype = {
+
+ refresh: function () {
+ this.targets = this.$topbar.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).offset().top
+ })
+ }
+
+ , processScroll: function () {
+ var scrollTop = $window.scrollTop() + 10
+ , 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.activateButton( targets[i] )
+ }
+ }
+
+ , activateButton: function (target) {
+ this.activeTarget = target
+
+ this.$topbar
+ .find(this.selector).parent('.active')
+ .removeClass('active')
+
+ this.$topbar
+ .find(this.selector + '[href="' + target + '"]')
+ .parent('li')
+ .addClass('active')
+ }
+
+ }
+
+ /* SCROLLSPY PLUGIN DEFINITION
+ * =========================== */
+
+ $.fn.scrollSpy = function( options ) {
+ var scrollspy = this.data('scrollspy')
+
+ if (!scrollspy) {
+ return this.each(function () {
+ $(this).data('scrollspy', new ScrollSpy( this, options ))
+ })
+ }
+
+ if ( options === true ) {
+ return scrollspy
+ }
+
+ if ( typeof options == 'string' ) {
+ scrollspy[options]()
+ }
+
+ return this
+ }
+
+ $(document).ready(function () {
+ $('body').scrollSpy('[data-scrollspy] li > a')
+ })
+
+}( window.jQuery || window.ender );
\ No newline at end of file
diff --git a/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tabs.js b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tabs.js
new file mode 100644
index 00000000..f39dfea5
--- /dev/null
+++ b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tabs.js
@@ -0,0 +1,62 @@
+/* ========================================================
+ * bootstrap-tabs.js v1.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
+ * ========================================================
+ * Copyright 2011 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 activate ( element, container ) {
+ container.find('.active').removeClass('active')
+ element.addClass('active')
+ }
+
+ function tab( e ) {
+ var $this = $(this)
+ , href = $this.attr('href')
+ , $ul = $this.closest('ul')
+ , $controlled
+
+ if (/^#\w+/.test(href)) {
+ e.preventDefault()
+
+ if ($this.hasClass('active')) {
+ return
+ }
+
+ $href = $(href)
+
+ activate($this.parent('li'), $ul)
+ activate($href, $href.parent())
+ }
+ }
+
+
+ /* TABS/PILLS PLUGIN DEFINITION
+ * ============================ */
+
+ $.fn.tabs = $.fn.pills = function ( selector ) {
+ return this.each(function () {
+ $(this).delegate(selector || '.tabs li > a, .pills > li > a', 'click', tab)
+ })
+ }
+
+ $(document).ready(function () {
+ $('body').tabs('ul[data-tabs] li > a, ul[data-pills] > li > a')
+ })
+
+}( window.jQuery || window.ender );
\ No newline at end of file
diff --git a/vendor/assets/javascripts/twitter/bootstrap/bootstrap-twipsy.js b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-twipsy.js
new file mode 100644
index 00000000..2001a804
--- /dev/null
+++ b/vendor/assets/javascripts/twitter/bootstrap/bootstrap-twipsy.js
@@ -0,0 +1,307 @@
+/* ==========================================================
+ * bootstrap-twipsy.js v1.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#twipsy
+ * Adapted from the original jQuery.tipsy by Jason Frame
+ * ==========================================================
+ * Copyright 2011 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( $ ) {
+
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
+ * ======================================================= */
+
+ var transitionEnd
+
+ $(document).ready(function () {
+
+ $.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
+ })()
+
+ // set CSS transition event type
+ if ( $.support.transition ) {
+ transitionEnd = "TransitionEnd"
+ if ( $.browser.webkit ) {
+ transitionEnd = "webkitTransitionEnd"
+ } else if ( $.browser.mozilla ) {
+ transitionEnd = "transitionend"
+ } else if ( $.browser.opera ) {
+ transitionEnd = "oTransitionEnd"
+ }
+ }
+
+ })
+
+
+ /* TWIPSY PUBLIC CLASS DEFINITION
+ * ============================== */
+
+ var Twipsy = function ( element, options ) {
+ this.$element = $(element)
+ this.options = options
+ this.enabled = true
+ this.fixTitle()
+ }
+
+ Twipsy.prototype = {
+
+ show: function() {
+ var pos
+ , actualWidth
+ , actualHeight
+ , placement
+ , $tip
+ , tp
+
+ if (this.getTitle() && this.enabled) {
+ $tip = this.tip()
+ this.setContent()
+
+ if (this.options.animate) {
+ $tip.addClass('fade')
+ }
+
+ $tip
+ .remove()
+ .css({ top: 0, left: 0, display: 'block' })
+ .prependTo(document.body)
+
+ pos = $.extend({}, this.$element.offset(), {
+ width: this.$element[0].offsetWidth
+ , height: this.$element[0].offsetHeight
+ })
+
+ actualWidth = $tip[0].offsetWidth
+ actualHeight = $tip[0].offsetHeight
+ placement = _.maybeCall(this.options.placement, this.$element[0])
+
+ switch (placement) {
+ case 'below':
+ tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
+ break
+ case 'above':
+ tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
+ break
+ case 'left':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}
+ break
+ case 'right':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}
+ break
+ }
+
+ $tip
+ .css(tp)
+ .addClass(placement)
+ .addClass('in')
+ }
+ }
+
+ , setContent: function () {
+ var $tip = this.tip()
+ $tip.find('.twipsy-inner')[this.options.html ? 'html' : 'text'](this.getTitle())
+ $tip[0].className = 'twipsy'
+ }
+
+ , hide: function() {
+ var that = this
+ , $tip = this.tip()
+
+ $tip.removeClass('in')
+
+ function removeElement () {
+ $tip.remove()
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip.bind(transitionEnd, removeElement) :
+ removeElement()
+ }
+
+ , 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')
+ }
+ }
+
+ , getTitle: function() {
+ var title
+ , $e = this.$element
+ , o = this.options
+
+ this.fixTitle()
+
+ if (typeof o.title == 'string') {
+ title = $e.attr(o.title == 'title' ? 'data-original-title' : o.title)
+ } else if (typeof o.title == 'function') {
+ title = o.title.call($e[0])
+ }
+
+ title = ('' + title).replace(/(^\s*|\s*$)/, "")
+
+ return title || o.fallback
+ }
+
+ , tip: function() {
+ if (!this.$tip) {
+ this.$tip = $('').html('')
+ }
+ return this.$tip
+ }
+
+ , 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
+ }
+
+ }
+
+
+ /* TWIPSY PRIVATE METHODS
+ * ====================== */
+
+ var _ = {
+
+ maybeCall: function ( thing, ctx ) {
+ return (typeof thing == 'function') ? (thing.call(ctx)) : thing
+ }
+
+ }
+
+
+ /* TWIPSY PLUGIN DEFINITION
+ * ======================== */
+
+ $.fn.twipsy = function (options) {
+ $.fn.twipsy.initWith.call(this, options, Twipsy, 'twipsy')
+ return this
+ }
+
+ $.fn.twipsy.initWith = function (options, Constructor, name) {
+ var twipsy
+ , binder
+ , eventIn
+ , eventOut
+
+ if (options === true) {
+ return this.data(name)
+ } else if (typeof options == 'string') {
+ twipsy = this.data(name)
+ if (twipsy) {
+ twipsy[options]()
+ }
+ return this
+ }
+
+ options = $.extend({}, $.fn[name].defaults, options)
+
+ function get(ele) {
+ var twipsy = $.data(ele, name)
+
+ if (!twipsy) {
+ twipsy = new Constructor(ele, $.fn.twipsy.elementOptions(ele, options))
+ $.data(ele, name, twipsy)
+ }
+
+ return twipsy
+ }
+
+ function enter() {
+ var twipsy = get(this)
+ twipsy.hoverState = 'in'
+
+ if (options.delayIn == 0) {
+ twipsy.show()
+ } else {
+ twipsy.fixTitle()
+ setTimeout(function() {
+ if (twipsy.hoverState == 'in') {
+ twipsy.show()
+ }
+ }, options.delayIn)
+ }
+ }
+
+ function leave() {
+ var twipsy = get(this)
+ twipsy.hoverState = 'out'
+ if (options.delayOut == 0) {
+ twipsy.hide()
+ } else {
+ setTimeout(function() {
+ if (twipsy.hoverState == 'out') {
+ twipsy.hide()
+ }
+ }, options.delayOut)
+ }
+ }
+
+ if (!options.live) {
+ this.each(function() {
+ get(this)
+ })
+ }
+
+ if (options.trigger != 'manual') {
+ binder = options.live ? 'live' : 'bind'
+ eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus'
+ eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'
+ this[binder](eventIn, enter)[binder](eventOut, leave)
+ }
+
+ return this
+ }
+
+ $.fn.twipsy.Twipsy = Twipsy
+
+ $.fn.twipsy.defaults = {
+ animate: true
+ , delayIn: 0
+ , delayOut: 0
+ , fallback: ''
+ , placement: 'above'
+ , html: false
+ , live: false
+ , offset: 0
+ , title: 'title'
+ , trigger: 'hover'
+ }
+
+ $.fn.twipsy.elementOptions = function(ele, options) {
+ return $.metadata ? $.extend({}, options, $(ele).metadata()) : options
+ }
+
+}( window.jQuery || window.ender );
\ No newline at end of file
diff --git a/vendor/assets/stylesheets/twitter/bootstrap.css.less b/vendor/assets/stylesheets/twitter/bootstrap.css.less
new file mode 100644
index 00000000..c52c529d
--- /dev/null
+++ b/vendor/assets/stylesheets/twitter/bootstrap.css.less
@@ -0,0 +1 @@
+@import "twitter/bootstrap/bootstrap";
diff --git a/vendor/assets/stylesheets/twitter/bootstrap.css.less~ b/vendor/assets/stylesheets/twitter/bootstrap.css.less~
new file mode 100644
index 00000000..6439a08e
--- /dev/null
+++ b/vendor/assets/stylesheets/twitter/bootstrap.css.less~
@@ -0,0 +1,2 @@
+@import "bootstrap/bootstrap";
+
diff --git a/vendor/toolkit/twitter/bootstrap.less b/vendor/toolkit/twitter/bootstrap.less
new file mode 100644
index 00000000..6fdb28ed
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap.less
@@ -0,0 +1 @@
+@import "bootstrap/bootstrap.less";
diff --git a/vendor/toolkit/twitter/bootstrap.less~ b/vendor/toolkit/twitter/bootstrap.less~
new file mode 100644
index 00000000..e69de29b
diff --git a/vendor/toolkit/twitter/bootstrap/bootstrap.less b/vendor/toolkit/twitter/bootstrap/bootstrap.less
new file mode 100644
index 00000000..b3ca9df8
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/bootstrap.less
@@ -0,0 +1,27 @@
+/*!
+ * Bootstrap @VERSION
+ *
+ * Copyright 2011 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.
+ * Date: @DATE
+ */
+
+// CSS Reset
+@import "reset.less";
+
+// Core variables and mixins
+@import "variables.less"; // Modify this for custom colors, font-sizes, etc
+@import "mixins.less";
+
+// Grid system and page structure
+@import "scaffolding.less";
+
+// Styled patterns and elements
+@import "type.less";
+@import "forms.less";
+@import "tables.less";
+@import "patterns.less";
+
diff --git a/vendor/toolkit/twitter/bootstrap/forms.less b/vendor/toolkit/twitter/bootstrap/forms.less
new file mode 100644
index 00000000..8ea48ee7
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/forms.less
@@ -0,0 +1,466 @@
+/* Forms.less
+ * Base styles for various input types, form layouts, and states
+ * ------------------------------------------------------------- */
+
+
+// FORM STYLES
+// -----------
+
+form {
+ margin-bottom: @baseline;
+}
+
+// Groups of fields with labels on top (legends)
+fieldset {
+ margin-bottom: @baseline;
+ padding-top: @baseline;
+ legend {
+ display: block;
+ padding-left: 150px;
+ font-size: @basefont * 1.5;
+ line-height: 1;
+ color: @grayDark;
+ *padding: 0 0 5px 145px; /* IE6-7 */
+ *line-height: 1.5; /* IE6-7 */
+ }
+}
+
+// Parent element that clears floats and wraps labels and fields together
+form .clearfix {
+ margin-bottom: @baseline;
+ .clearfix()
+}
+
+// Set font for forms
+label,
+input,
+select,
+textarea {
+ #font > .sans-serif(normal,13px,normal);
+}
+
+// Float labels left
+label {
+ padding-top: 6px;
+ font-size: @basefont;
+ line-height: @baseline;
+ float: left;
+ width: 130px;
+ text-align: right;
+ color: @grayDark;
+}
+
+// Shift over the inside div to align all label's relevant content
+form .input {
+ margin-left: 150px;
+}
+
+// Checkboxs and radio buttons
+input[type=checkbox],
+input[type=radio] {
+ cursor: pointer;
+}
+
+// Inputs, Textareas, Selects
+input,
+textarea,
+select,
+.uneditable-input {
+ display: inline-block;
+ width: 210px;
+ height: @baseline;
+ padding: 4px;
+ font-size: @basefont;
+ line-height: @baseline;
+ color: @gray;
+ border: 1px solid #ccc;
+ .border-radius(3px);
+}
+
+/* mini reset for non-html5 file types */
+input[type=checkbox],
+input[type=radio] {
+ width: auto;
+ height: auto;
+ padding: 0;
+ margin: 3px 0;
+ *margin-top: 0; /* IE6-7 */
+ line-height: normal;
+ border: none;
+}
+
+input[type=file] {
+ background-color: @white;
+ padding: initial;
+ border: initial;
+ line-height: initial;
+ .box-shadow(none);
+}
+
+input[type=button],
+input[type=reset],
+input[type=submit] {
+ width: auto;
+ height: auto;
+}
+
+select,
+input[type=file] {
+ height: @baseline * 1.5; // In IE7, the height of the select element cannot be changed by height, only font-size
+ line-height: @baseline * 1.5;
+ *margin-top: 4px; /* For IE7, add top margin to align select with labels */
+}
+
+// Make multiple select elements height not fixed
+select[multiple] {
+ height: inherit;
+}
+
+textarea {
+ height: auto;
+}
+
+// For text that needs to appear as an input but should not be an input
+.uneditable-input {
+ background-color: @white;
+ display: block;
+ border-color: #eee;
+ .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
+:-moz-placeholder {
+ color: @grayLight;
+}
+::-webkit-input-placeholder {
+ color: @grayLight;
+}
+
+// Focus states
+input,
+textarea {
+ @transition: border linear .2s, box-shadow linear .2s;
+ .transition(@transition);
+ .box-shadow(inset 0 1px 3px rgba(0,0,0,.1));
+}
+input:focus,
+textarea:focus {
+ outline: 0;
+ border-color: rgba(82,168,236,.8);
+ @shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
+ .box-shadow(@shadow);
+}
+input[type=file]:focus,
+input[type=checkbox]:focus,
+select:focus {
+ .box-shadow(none); // override for file inputs
+ outline: 1px dotted #666; // Selet elements don't get box-shadow styles, so instead we do outline
+}
+
+// Error styles
+form div.clearfix.error {
+ background: lighten(@red, 57%);
+ padding: 10px 0;
+ margin: -10px 0 10px;
+ .border-radius(4px);
+ @error-text: desaturate(lighten(@red, 25%), 25%);
+ > label,
+ span.help-inline,
+ span.help-block {
+ color: @red;
+ }
+ input,
+ textarea {
+ border-color: @error-text;
+ .box-shadow(0 0 3px rgba(171,41,32,.25));
+ &:focus {
+ border-color: darken(@error-text, 10%);
+ .box-shadow(0 0 6px rgba(171,41,32,.5));
+ }
+ }
+ .input-prepend,
+ .input-append {
+ span.add-on {
+ background: lighten(@red, 50%);
+ border-color: @error-text;
+ color: darken(@error-text, 10%);
+ }
+ }
+}
+
+// Form element sizes
+// TODO v2: remove duplication here and just stick to .input-[size] in light of adding .spanN sizes
+.input-mini,
+input.mini,
+textarea.mini,
+select.mini {
+ width: 60px;
+}
+.input-small,
+input.small,
+textarea.small,
+select.small {
+ width: 90px;
+}
+.input-medium,
+input.medium,
+textarea.medium,
+select.medium {
+ width: 150px;
+}
+.input-large,
+input.large,
+textarea.large,
+select.large {
+ width: 210px;
+}
+.input-xlarge,
+input.xlarge,
+textarea.xlarge,
+select.xlarge {
+ width: 270px;
+}
+.input-xxlarge,
+input.xxlarge,
+textarea.xxlarge,
+select.xxlarge {
+ width: 530px;
+}
+textarea.xxlarge {
+ overflow-y: auto;
+}
+
+// Grid style input sizes
+// This is a duplication of the main grid .columns() mixin, but subtracts 10px to account for input padding and border
+.formColumns(@columnSpan: 1) {
+ display: inline-block;
+ float: none;
+ width: ((@gridColumnWidth - 10) * @columnSpan) + ((@gridColumnWidth - 10) * (@columnSpan - 1));
+ margin-left: 0;
+}
+input,
+textarea,
+select {
+ // Default columns
+ &.span1 { .formColumns(1); }
+ &.span2 { .formColumns(2); }
+ &.span3 { .formColumns(3); }
+ &.span4 { .formColumns(4); }
+ &.span5 { .formColumns(5); }
+ &.span6 { .formColumns(6); }
+ &.span7 { .formColumns(7); }
+ &.span8 { .formColumns(8); }
+ &.span9 { .formColumns(9); }
+ &.span10 { .formColumns(10); }
+ &.span11 { .formColumns(11); }
+ &.span12 { .formColumns(12); }
+ &.span13 { .formColumns(13); }
+ &.span14 { .formColumns(14); }
+ &.span15 { .formColumns(15); }
+ &.span16 { .formColumns(16); }
+}
+
+// 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;
+}
+
+// Actions (the buttons)
+.actions {
+ background: #f5f5f5;
+ margin-top: @baseline;
+ margin-bottom: @baseline;
+ padding: (@baseline - 1) 20px @baseline 150px;
+ border-top: 1px solid #ddd;
+ .border-radius(0 0 3px 3px);
+ .secondary-action {
+ float: right;
+ a {
+ line-height: 30px;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+}
+
+// Help Text
+.help-inline,
+.help-block {
+ font-size: @basefont - 2;
+ line-height: @baseline;
+ color: @grayLight;
+}
+.help-inline {
+ padding-left: 5px;
+ *position: relative; /* IE6-7 */
+ *top: -5px; /* IE6-7 */
+}
+
+// Big blocks of help text
+.help-block {
+ display: block;
+ max-width: 600px;
+}
+
+// Inline Fields (input fields that appear as inline objects
+.inline-inputs {
+ color: @gray;
+ span, input {
+ display: inline-block;
+ }
+ input.mini {
+ width: 60px;
+ }
+ input.small {
+ width: 90px;
+ }
+ span {
+ padding: 0 2px 0 1px;
+ }
+}
+
+// Allow us to put symbols and text within the input field for a cleaner look
+.input-prepend,
+.input-append {
+ input {
+ .border-radius(0 3px 3px 0);
+ }
+ .add-on {
+ position: relative;
+ background: #f5f5f5;
+ border: 1px solid #ccc;
+ z-index: 2;
+ float: left;
+ display: block;
+ width: auto;
+ min-width: 16px;
+ height: 18px;
+ padding: 4px 4px 4px 5px;
+ margin-right: -1px;
+ font-weight: normal;
+ line-height: 18px;
+ color: @grayLight;
+ text-align: center;
+ text-shadow: 0 1px 0 @white;
+ .border-radius(3px 0 0 3px);
+ }
+ .active {
+ background: lighten(@green, 30);
+ border-color: @green;
+ }
+}
+.input-prepend {
+ .add-on {
+ *margin-top: 1px; /* IE6-7 */
+ }
+}
+.input-append {
+ input {
+ float: left;
+ .border-radius(3px 0 0 3px);
+ }
+ .add-on {
+ .border-radius(0 3px 3px 0);
+ margin-right: 0;
+ margin-left: -1px;
+ }
+}
+
+// Stacked options for forms (radio buttons or checkboxes)
+.inputs-list {
+ margin: 0 0 5px;
+ width: 100%;
+ li {
+ display: block;
+ padding: 0;
+ width: 100%;
+ }
+ label {
+ display: block;
+ float: none;
+ width: auto;
+ padding: 0;
+ line-height: @baseline;
+ text-align: left;
+ white-space: normal;
+ strong {
+ color: @gray;
+ }
+ small {
+ font-size: @basefont - 2;
+ font-weight: normal;
+ }
+ }
+ .inputs-list {
+ margin-left: 25px;
+ margin-bottom: 10px;
+ padding-top: 0;
+ }
+ &:first-child {
+ padding-top: 6px;
+ }
+ li + li {
+ padding-top: 2px;
+ }
+ input[type=radio],
+ input[type=checkbox] {
+ margin-bottom: 0;
+ }
+}
+
+// Stacked forms
+.form-stacked {
+ padding-left: 20px;
+ fieldset {
+ padding-top: @baseline / 2;
+ }
+ legend {
+ padding-left: 0;
+ }
+ label {
+ display: block;
+ float: none;
+ width: auto;
+ font-weight: bold;
+ text-align: left;
+ line-height: 20px;
+ padding-top: 0;
+ }
+ .clearfix {
+ margin-bottom: @baseline / 2;
+ div.input {
+ margin-left: 0;
+ }
+ }
+ .inputs-list {
+ margin-bottom: 0;
+ li {
+ padding-top: 0;
+ label {
+ font-weight: normal;
+ padding-top: 0;
+ }
+ }
+ }
+ div.clearfix.error {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ padding-left: 10px;
+ margin-top: 0;
+ margin-left: -10px;
+ }
+ .actions {
+ margin-left: -20px;
+ padding-left: 20px;
+ }
+}
+
diff --git a/vendor/toolkit/twitter/bootstrap/mixins.less b/vendor/toolkit/twitter/bootstrap/mixins.less
new file mode 100644
index 00000000..673e7e1c
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/mixins.less
@@ -0,0 +1,218 @@
+/* Variables.less
+ * Snippets of reusable CSS to develop faster and keep code readable
+ * ----------------------------------------------------------------- */
+
+
+// Clearfix for clearing floats like a boss h5bp.com/q
+.clearfix() {
+ zoom: 1;
+ &:before,
+ &:after {
+ display: table;
+ content: "";
+ zoom: 1;
+ *display: inline;
+ }
+ &:after {
+ clear: both;
+ }
+}
+
+// Center-align a block level element
+.center-block() {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+// Sizing shortcuts
+.size(@height: 5px, @width: 5px) {
+ height: @height;
+ width: @width;
+}
+.square(@size: 5px) {
+ .size(@size, @size);
+}
+
+// Input placeholder text
+.placeholder(@color: @grayLight) {
+ :-moz-placeholder {
+ color: @color;
+ }
+ ::-webkit-input-placeholder {
+ color: @color;
+ }
+}
+
+// Font Stacks
+#font {
+ .shorthand(@weight: normal, @size: 14px, @lineHeight: 20px) {
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+ .sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+ .serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
+ font-family: "Georgia", Times New Roman, Times, serif;
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+ .monospace(@weight: normal, @size: 12px, @lineHeight: 20px) {
+ font-family: "Monaco", Courier New, monospace;
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+}
+
+// Grid System
+.fixed-container() {
+ width: @siteWidth;
+ margin-left: auto;
+ margin-right: auto;
+ .clearfix();
+}
+.columns(@columnSpan: 1) {
+ width: (@gridColumnWidth * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1));
+}
+.offset(@columnOffset: 1) {
+ margin-left: (@gridColumnWidth * @columnOffset) + (@gridGutterWidth * (@columnOffset - 1)) + @extraSpace;
+}
+// Necessary grid styles for every column to make them appear next to each other horizontally
+.gridColumn() {
+ display: inline;
+ float: left;
+ margin-left: @gridGutterWidth;
+}
+// makeColumn can be used to mark any element (e.g., .content-primary) as a column without changing markup to .span something
+.makeColumn(@columnSpan: 1) {
+ .gridColumn();
+ .columns(@columnSpan);
+}
+
+// Border Radius
+.border-radius(@radius: 5px) {
+ -webkit-border-radius: @radius;
+ -moz-border-radius: @radius;
+ border-radius: @radius;
+}
+
+// Drop shadows
+.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
+ -webkit-box-shadow: @shadow;
+ -moz-box-shadow: @shadow;
+ box-shadow: @shadow;
+}
+
+// Transitions
+.transition(@transition) {
+ -webkit-transition: @transition;
+ -moz-transition: @transition;
+ -ms-transition: @transition;
+ -o-transition: @transition;
+ transition: @transition;
+}
+
+// Background clipping
+.background-clip(@clip) {
+ -webkit-background-clip: @clip;
+ -moz-background-clip: @clip;
+ background-clip: @clip;
+}
+
+// CSS3 Content Columns
+.content-columns(@columnCount, @columnGap: 20px) {
+ -webkit-column-count: @columnCount;
+ -moz-column-count: @columnCount;
+ column-count: @columnCount;
+ -webkit-column-gap: @columnGap;
+ -moz-column-gap: @columnGap;
+ column-gap: @columnGap;
+}
+
+// Add an alphatransparency value to any background or border color (via Elyse Holladay)
+#translucent {
+ .background(@color: @white, @alpha: 1) {
+ background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
+ }
+ .border(@color: @white, @alpha: 1) {
+ border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
+ background-clip: padding-box;
+ }
+}
+
+// Gradient Bar Colors for buttons and allerts
+.gradientBar(@primaryColor, @secondaryColor) {
+ #gradient > .vertical(@primaryColor, @secondaryColor);
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ 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
+#gradient {
+ .horizontal (@startColor: #555, @endColor: #333) {
+ background-color: @endColor;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); // Konqueror
+ 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, left top, right top, color-stop(0%, @startColor), color-stop(100%, @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
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down
+ }
+ .vertical (@startColor: #555, @endColor: #333) {
+ background-color: @endColor;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror
+ 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, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @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
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
+ }
+ .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
+ }
+ .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
+ background-color: @endColor;
+ background-repeat: no-repeat;
+ 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);
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback
+ }
+}
+
+// Reset filters for IE
+.reset-filter() {
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
+}
+
+// Opacity
+.opacity(@opacity: 100) {
+ filter: e(%("alpha(opacity=%d)", @opacity));
+ -khtml-opacity: @opacity / 100;
+ -moz-opacity: @opacity / 100;
+ opacity: @opacity / 100;
+}
+
diff --git a/vendor/toolkit/twitter/bootstrap/patterns.less b/vendor/toolkit/twitter/bootstrap/patterns.less
new file mode 100644
index 00000000..78503c0a
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/patterns.less
@@ -0,0 +1,1007 @@
+/* Patterns.less
+ * Repeatable UI elements outside the base styles provided from the scaffolding
+ * ---------------------------------------------------------------------------- */
+
+
+// TOPBAR
+// ------
+
+// Topbar for Branding and Nav
+.topbar {
+ height: 40px;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 10000;
+ overflow: visible;
+
+ // Links get text shadow
+ a {
+ color: @grayLight;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ }
+
+ // Hover and active states
+ // h3 for backwards compatibility
+ h3 a:hover,
+ .brand a:hover,
+ ul .active > a {
+ background-color: #333;
+ background-color: rgba(255,255,255,.05);
+ color: @white;
+ text-decoration: none;
+ }
+
+ // Website name
+ // h3 left for backwards compatibility
+ h3 {
+ position: relative;
+ }
+ h3 a,
+ .brand {
+ float: left;
+ display: block;
+ padding: 8px 20px 12px;
+ margin-left: -20px; // negative indent to left-align the text down the page
+ color: @white;
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 1;
+ }
+
+ // Plain text in topbar
+ p {
+ margin: 0;
+ line-height: 40px;
+ a:hover {
+ background-color: transparent;
+ color: @white;
+ }
+ }
+
+ // Search Form
+ form {
+ float: left;
+ margin: 5px 0 0 0;
+ position: relative;
+ .opacity(100);
+ }
+ // Todo: remove from v2.0 when ready, added for legacy
+ form.pull-right {
+ float: right;
+ }
+ input {
+ background-color: #444;
+ background-color: rgba(255,255,255,.3);
+ #font > .sans-serif(13px, normal, 1);
+ padding: 4px 9px;
+ color: @white;
+ color: rgba(255,255,255,.75);
+ border: 1px solid #111;
+ .border-radius(4px);
+ @shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0px rgba(255,255,255,.25);
+ .box-shadow(@shadow);
+ .transition(none);
+
+ // Placeholder text gets special styles; can't be bundled together though for some reason
+ &:-moz-placeholder {
+ color: @grayLighter;
+ }
+ &::-webkit-input-placeholder {
+ color: @grayLighter;
+ }
+ // Hover states
+ &:hover {
+ background-color: @grayLight;
+ background-color: rgba(255,255,255,.5);
+ color: @white;
+ }
+ // Focus states (we use .focused since IE8 and down doesn't support :focus)
+ &:focus,
+ &.focused {
+ outline: 0;
+ background-color: @white;
+ color: @grayDark;
+ text-shadow: 0 1px 0 @white;
+ border: 0;
+ padding: 5px 10px;
+ .box-shadow(0 0 3px rgba(0,0,0,.15));
+ }
+ }
+}
+
+// gradient is applied to it's own element because overflow visible is not honored by ie when filter is present
+// For backwards compatibility, include .topbar .fill
+.topbar-inner,
+.topbar .fill {
+ background-color: #222;
+ #gradient > .vertical(#333, #222);
+ @shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
+ .box-shadow(@shadow);
+}
+
+
+// NAVIGATION
+// ----------
+
+// Topbar Nav
+// ul.nav for all topbar based navigation to avoid inheritance issues and over-specificity
+// For backwards compatibility, leave in .topbar div > ul
+.topbar div > ul,
+.nav {
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+ position: relative;
+ left: 0;
+ > li {
+ display: block;
+ float: left;
+ }
+ a {
+ display: block;
+ float: none;
+ padding: 10px 10px 11px;
+ line-height: 19px;
+ text-decoration: none;
+ &:hover {
+ color: @white;
+ text-decoration: none;
+ }
+ }
+ .active > a {
+ background-color: #222;
+ background-color: rgba(0,0,0,.5);
+ }
+
+ // Secondary (floated right) nav in topbar
+ &.secondary-nav {
+ float: right;
+ margin-left: 10px;
+ margin-right: 0;
+ // backwards compatibility
+ .menu-dropdown,
+ .dropdown-menu {
+ right: 0;
+ border: 0;
+ }
+ }
+ // Dropdowns within the .nav
+ // a.menu:hover and li.open .menu for backwards compatibility
+ a.menu:hover,
+ li.open .menu,
+ .dropdown-toggle:hover,
+ .dropdown.open .dropdown-toggle {
+ background: #444;
+ background: rgba(255,255,255,.05);
+ }
+ // .menu-dropdown for backwards compatibility
+ .menu-dropdown,
+ .dropdown-menu {
+ background-color: #333;
+ // a.menu for backwards compatibility
+ a.menu,
+ .dropdown-toggle {
+ color: @white;
+ &.open {
+ background: #444;
+ background: rgba(255,255,255,.05);
+ }
+ }
+ li a {
+ color: #999;
+ text-shadow: 0 1px 0 rgba(0,0,0,.5);
+ &:hover {
+ #gradient > .vertical(#292929,#191919);
+ color: @white;
+ }
+ }
+ .active a {
+ color: @white;
+ }
+ .divider {
+ background-color: #222;
+ border-color: #444;
+ }
+ }
+}
+
+// For backwards compatibility with new dropdowns, redeclare dropdown link padding
+.topbar ul .menu-dropdown li a,
+.topbar ul .dropdown-menu li a {
+ padding: 4px 15px;
+}
+
+// Dropdown Menus
+// Use the .menu class on any element within the topbar or ul.tabs and you'll get some superfancy dropdowns
+// li.menu for backwards compatibility
+li.menu,
+.dropdown {
+ position: relative;
+}
+// The link that is clicked to toggle the dropdown
+// a.menu for backwards compatibility
+a.menu:after,
+.dropdown-toggle:after {
+ width: 0;
+ height: 0;
+ display: inline-block;
+ content: "↓";
+ text-indent: -99999px;
+ vertical-align: top;
+ margin-top: 8px;
+ margin-left: 4px;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid @white;
+ .opacity(50);
+}
+// The dropdown menu (ul)
+// .menu-dropdown for backwards compatibility
+.menu-dropdown,
+.dropdown-menu {
+ background-color: @white;
+ float: left;
+ display: none; // None by default, but block on "open" of the menu
+ position: absolute;
+ top: 40px;
+ z-index: 900;
+ min-width: 160px;
+ max-width: 220px;
+ _width: 160px;
+ margin-left: 0; // override default ul styles
+ margin-right: 0;
+ padding: 6px 0;
+ zoom: 1; // do we need this?
+ border-color: #999;
+ border-color: rgba(0,0,0,.2);
+ border-style: solid;
+ border-width: 0 1px 1px;
+ .border-radius(0 0 6px 6px);
+ .box-shadow(0 2px 4px rgba(0,0,0,.2));
+ .background-clip(padding-box);
+
+ // Unfloat any li's to make them stack
+ li {
+ float: none;
+ display: block;
+ background-color: none;
+ }
+ // Dividers (basically an hr) within the dropdown
+ .divider {
+ height: 1px;
+ margin: 5px 0;
+ overflow: hidden;
+ background-color: #eee;
+ border-bottom: 1px solid @white;
+ }
+}
+
+.topbar .dropdown-menu, .dropdown-menu {
+ // Links within the dropdown menu
+ a {
+ display: block;
+ padding: 4px 15px;
+ clear: both;
+ font-weight: normal;
+ line-height: 18px;
+ color: @gray;
+ text-shadow: 0 1px 0 @white;
+ // Hover state
+ &:hover {
+ #gradient > .vertical(#eeeeee, #dddddd);
+ color: @grayDark;
+ text-decoration: none;
+ @shadow: inset 0 1px 0 rgba(0,0,0,.025), inset 0 -1px rgba(0,0,0,.025);
+ .box-shadow(@shadow);
+ }
+ }
+}
+
+// Open state for the dropdown
+// .open for backwards compatibility
+.open,
+.dropdown.open {
+ // .menu for backwards compatibility
+ .menu,
+ .dropdown-toggle {
+ color: @white;
+ background: #ccc;
+ background: rgba(0,0,0,.3);
+ }
+ // .menu-dropdown for backwards compatibility
+ .menu-dropdown,
+ .dropdown-menu {
+ display: block;
+ }
+}
+
+
+// Tabs and Pills
+.tabs,
+.pills {
+ margin: 0 0 20px;
+ padding: 0;
+ list-style: none;
+ .clearfix();
+ > li {
+ float: left;
+ > a {
+ display: block;
+ }
+ }
+}
+
+// Basic Tabs
+.tabs {
+ float: left;
+ width: 100%;
+ border-bottom: 1px solid #ddd;
+ > li {
+ position: relative; // For the dropdowns mostly
+ top: 1px;
+ > a {
+ padding: 0 15px;
+ margin-right: 2px;
+ line-height: @baseline * 2;
+ border: 1px solid transparent;
+ .border-radius(4px 4px 0 0);
+ &:hover {
+ text-decoration: none;
+ background-color: #eee;
+ border-color: #eee #eee #ddd;
+ }
+ }
+ &.active > a {
+ color: @gray;
+ background-color: @white;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ }
+ }
+ // first one for backwards compatibility
+ .menu-dropdown,
+ .dropdown-menu {
+ top: 35px;
+ border-width: 1px;
+ .border-radius(0 6px 6px 6px);
+ }
+ // first one for backwards compatibility
+ a.menu:after,
+ .dropdown-toggle:after {
+ border-top-color: #999;
+ margin-top: 15px;
+ margin-left: 5px;
+ }
+ // first one for backwards compatibility
+ li.open.menu .menu,
+ .open.dropdown .dropdown-toggle {
+ border-color: #999;
+ }
+ // first one for backwards compatibility
+ li.open a.menu:after,
+ .dropdown.open .dropdown-toggle:after {
+ border-top-color: #555;
+ }
+}
+.tab-content {
+ clear: both;
+}
+
+// Basic pill nav
+.pills {
+ a {
+ margin: 5px 3px 5px 0;
+ padding: 0 15px;
+ text-shadow: 0 1px 1px @white;
+ line-height: 30px;
+ .border-radius(15px);
+ &:hover {
+ background: @linkColorHover;
+ color: @white;
+ text-decoration: none;
+ text-shadow: 0 1px 1px rgba(0,0,0,.25);
+ }
+ }
+ .active a {
+ background: @linkColor;
+ color: @white;
+ text-shadow: 0 1px 1px rgba(0,0,0,.25);
+ }
+}
+
+.tab-content > *,
+.pill-content > * {
+ display: none;
+}
+
+.tab-content > .active,
+.pill-content > .active {
+ display:block;
+}
+
+
+// BREADCRUMBS
+// -----------
+
+.breadcrumb {
+ margin: 0 0 @baseline;
+ padding: 7px 14px;
+ #gradient > .vertical(#ffffff, #f5f5f5);
+ border: 1px solid #ddd;
+ .border-radius(3px);
+ .box-shadow(inset 0 1px 0 @white);
+ li {
+ display: inline;
+ text-shadow: 0 1px 0 @white;
+ }
+ .divider {
+ padding: 0 5px;
+ color: @grayLight;
+ }
+ a {
+ }
+ .active a {
+ color: @grayDark;
+ }
+}
+
+
+// PAGE HEADERS
+// ------------
+
+.hero-unit {
+ background-color: #f5f5f5;
+ margin-bottom: 30px;
+ padding: 60px;
+ .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: @baseline * 1.5;
+ }
+}
+footer {
+ margin-top: @baseline - 1;
+ padding-top: @baseline - 1;
+ border-top: 1px solid #eee;
+}
+
+
+// PAGE HEADERS
+// ------------
+
+.page-header {
+ margin-bottom: @baseline - 1;
+ border-bottom: 1px solid #ddd;
+ .box-shadow(0 1px 0 rgba(255,255,255,.5));
+ h1 {
+ margin-bottom: (@baseline / 2) - 1px;
+ }
+}
+
+
+// BUTTON STYLES
+// -------------
+
+// Shared colors for buttons and alerts
+.btn,
+.alert-message {
+ // Set text color
+ &.danger,
+ &.danger:hover,
+ &.error,
+ &.error:hover,
+ &.success,
+ &.success:hover,
+ &.info,
+ &.info:hover {
+ color: @white
+ }
+ // Danger and error appear as red
+ &.danger,
+ &.error {
+ .gradientBar(#ee5f5b, #c43c35);
+ }
+ // Success appears as green
+ &.success {
+ .gradientBar(#62c462, #57a957);
+ }
+ // Info appears as a neutral blue
+ &.info {
+ .gradientBar(#5bc0de, #339bb9);
+ }
+}
+
+// Base .btn styles
+.btn {
+ // Button Base
+ cursor: pointer;
+ display: inline-block;
+ #gradient > .vertical-three-colors(#ffffff, #ffffff, 25%, darken(#ffffff, 10%)); // Don't use .gradientbar() here since it does a three-color gradient
+ padding: 5px 14px 6px;
+ text-shadow: 0 1px 1px rgba(255,255,255,.75);
+ color: #333;
+ font-size: @basefont;
+ line-height: normal;
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ .border-radius(4px);
+ @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+ .box-shadow(@shadow);
+
+ &:hover {
+ background-position: 0 -15px;
+ color: #333;
+ text-decoration: none;
+ }
+
+ // Focus state for keyboard and accessibility
+ &:focus {
+ outline: 1px dotted #666;
+ }
+
+ // Primary Button Type
+ &.primary {
+ color: @white;
+ .gradientBar(@blue, @blueDark)
+ }
+
+ // Transitions
+ .transition(.1s linear all);
+
+ // Active and Disabled states
+ &:active {
+ @shadow: inset 0 2px 4px rgba(0,0,0,.25), 0 1px 2px rgba(0,0,0,.05);
+ .box-shadow(@shadow);
+ }
+ &.disabled {
+ cursor: default;
+ background-image: none;
+ .reset-filter();
+ .opacity(65);
+ .box-shadow(none);
+ }
+ &[disabled] {
+ // disabled pseudo can't be included with .disabled
+ // def because IE8 and below will drop it ;_;
+ cursor: default;
+ background-image: none;
+ .reset-filter();
+ .opacity(65);
+ .box-shadow(none);
+ }
+
+ // Button Sizes
+ &.large {
+ font-size: @basefont + 2px;
+ line-height: normal;
+ padding: 9px 14px 9px;
+ .border-radius(6px);
+ }
+ &.small {
+ padding: 7px 9px 7px;
+ font-size: @basefont - 2px;
+ }
+}
+// Super jank hack for removing border-radius from IE9 so we can keep filter gradients on alerts and buttons
+:root .alert-message,
+:root .btn {
+ border-radius: 0 \0;
+}
+
+// Help Firefox not be a jerk about adding extra padding to buttons
+button.btn,
+input[type=submit].btn {
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+ }
+}
+
+
+// CLOSE ICONS
+// -----------
+.close {
+ float: right;
+ color: @black;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: @baseline * .75;
+ text-shadow: 0 1px 0 rgba(255,255,255,1);
+ .opacity(20);
+ &:hover {
+ color: @black;
+ text-decoration: none;
+ .opacity(40);
+ }
+}
+
+
+// ERROR STYLES
+// ------------
+
+// Base alert styles
+.alert-message {
+ position: relative;
+ padding: 7px 15px;
+ margin-bottom: @baseline;
+ color: @grayDark;
+ .gradientBar(#fceec1, #eedc94); // warning by default
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
+ border-width: 1px;
+ border-style: solid;
+ .border-radius(4px);
+ .box-shadow(inset 0 1px 0 rgba(255,255,255,.25));
+
+ // Adjust close icon
+ .close {
+ *margin-top: 3px; /* IE7 spacing */
+ }
+
+ // Remove extra margin from content
+ h5 {
+ line-height: @baseline;
+ }
+ p {
+ margin-bottom: 0;
+ }
+ div {
+ margin-top: 5px;
+ margin-bottom: 2px;
+ line-height: 28px;
+ }
+ .btn {
+ // Provide actions with buttons
+ .box-shadow(0 1px 0 rgba(255,255,255,.25));
+ }
+
+ &.block-message {
+ background-image: none;
+ background-color: lighten(#fceec1, 5%);
+ .reset-filter();
+ padding: 14px;
+ border-color: #fceec1;
+ .box-shadow(none);
+ ul, p {
+ margin-right: 30px;
+ }
+ ul {
+ margin-bottom: 0;
+ }
+ li {
+ color: @grayDark;
+ }
+ .alert-actions {
+ margin-top: 5px;
+ }
+ &.error,
+ &.success,
+ &.info {
+ color: @grayDark;
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
+ }
+ &.error {
+ background-color: lighten(#f56a66, 25%);
+ border-color: lighten(#f56a66, 20%);
+ }
+ &.success {
+ background-color: lighten(#62c462, 30%);
+ border-color: lighten(#62c462, 25%);
+ }
+ &.info {
+ background-color: lighten(#6bd0ee, 25%);
+ border-color: lighten(#6bd0ee, 20%);
+ }
+ }
+}
+
+
+// PAGINATION
+// ----------
+
+.pagination {
+ height: @baseline * 2;
+ margin: @baseline 0;
+ ul {
+ float: left;
+ margin: 0;
+ border: 1px solid #ddd;
+ border: 1px solid rgba(0,0,0,.15);
+ .border-radius(3px);
+ .box-shadow(0 1px 2px rgba(0,0,0,.05));
+ }
+ li {
+ display: inline;
+ }
+ a {
+ float: left;
+ padding: 0 14px;
+ line-height: (@baseline * 2) - 2;
+ border-right: 1px solid;
+ border-right-color: #ddd;
+ border-right-color: rgba(0,0,0,.15);
+ *border-right-color: #ddd; /* IE6-7 */
+ text-decoration: none;
+ }
+ a:hover,
+ .active a {
+ background-color: lighten(@blue, 45%);
+ }
+ .disabled a,
+ .disabled a:hover {
+ background-color: transparent;
+ color: @grayLight;
+ }
+ .next a {
+ border: 0;
+ }
+}
+
+
+// WELLS
+// -----
+
+.well {
+ background-color: #f5f5f5;
+ margin-bottom: 20px;
+ padding: 19px;
+ min-height: 20px;
+ border: 1px solid #eee;
+ border: 1px solid rgba(0,0,0,.05);
+ .border-radius(4px);
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
+ blockquote {
+ border-color: #ddd;
+ border-color: rgba(0,0,0,.15);
+ }
+
+}
+
+
+// MODALS
+// ------
+
+.modal-backdrop {
+ background-color: @black;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 10000;
+ // Fade for backdrop
+ &.fade { opacity: 0; }
+}
+
+.modal-backdrop, .modal-backdrop.fade.in {
+ .opacity(80);
+}
+
+.modal {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ z-index: 11000;
+ width: 560px;
+ margin: -250px 0 0 -250px;
+ background-color: @white;
+ border: 1px solid #999;
+ border: 1px solid rgba(0,0,0,.3);
+ *border: 1px solid #999; /* IE6-7 */
+ .border-radius(6px);
+ .box-shadow(0 3px 7px rgba(0,0,0,0.3));
+ .background-clip(padding-box);
+ .close { margin-top: 7px; }
+ &.fade {
+ .transition(e('opacity .3s linear, top .3s ease-out'));
+ top: -25%;
+ }
+ &.fade.in { top: 50%; }
+}
+.modal-header {
+ border-bottom: 1px solid #eee;
+ padding: 5px 15px;
+}
+.modal-body {
+ padding: 15px;
+}
+.modal-footer {
+ background-color: #f5f5f5;
+ padding: 14px 15px 15px;
+ border-top: 1px solid #ddd;
+ .border-radius(0 0 6px 6px);
+ .box-shadow(inset 0 1px 0 @white);
+ .clearfix();
+ margin-bottom: 0;
+ .btn {
+ float: right;
+ margin-left: 5px;
+ }
+}
+
+
+// POPOVER ARROWS
+// --------------
+
+#popoverArrow {
+ .above(@arrowWidth: 5px) {
+ bottom: 0;
+ left: 50%;
+ margin-left: -@arrowWidth;
+ border-left: @arrowWidth solid transparent;
+ border-right: @arrowWidth solid transparent;
+ border-top: @arrowWidth solid @black;
+ }
+ .left(@arrowWidth: 5px) {
+ top: 50%;
+ right: 0;
+ margin-top: -@arrowWidth;
+ border-top: @arrowWidth solid transparent;
+ border-bottom: @arrowWidth solid transparent;
+ border-left: @arrowWidth solid @black;
+ }
+ .below(@arrowWidth: 5px) {
+ top: 0;
+ left: 50%;
+ margin-left: -@arrowWidth;
+ border-left: @arrowWidth solid transparent;
+ border-right: @arrowWidth solid transparent;
+ border-bottom: @arrowWidth solid @black;
+ }
+ .right(@arrowWidth: 5px) {
+ top: 50%;
+ left: 0;
+ margin-top: -@arrowWidth;
+ border-top: @arrowWidth solid transparent;
+ border-bottom: @arrowWidth solid transparent;
+ border-right: @arrowWidth solid @black;
+ }
+}
+
+// TWIPSY
+// ------
+
+.twipsy {
+ display: block;
+ position: absolute;
+ visibility: visible;
+ padding: 5px;
+ font-size: 11px;
+ z-index: 1000;
+ .opacity(80);
+ &.fade.in {
+ .opacity(80);
+ }
+ &.above .twipsy-arrow { #popoverArrow > .above(); }
+ &.left .twipsy-arrow { #popoverArrow > .left(); }
+ &.below .twipsy-arrow { #popoverArrow > .below(); }
+ &.right .twipsy-arrow { #popoverArrow > .right(); }
+}
+.twipsy-inner {
+ padding: 3px 8px;
+ background-color: @black;
+ color: white;
+ text-align: center;
+ max-width: 200px;
+ text-decoration: none;
+ .border-radius(4px);
+}
+.twipsy-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+}
+
+
+// POPOVERS
+// --------
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1000;
+ padding: 5px;
+ display: none;
+ &.above .arrow { #popoverArrow > .above(); }
+ &.right .arrow { #popoverArrow > .right(); }
+ &.below .arrow { #popoverArrow > .below(); }
+ &.left .arrow { #popoverArrow > .left(); }
+ .arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ }
+ .inner {
+ background-color: @black;
+ background-color: rgba(0,0,0,.8);
+ padding: 3px;
+ overflow: hidden;
+ width: 280px;
+ .border-radius(6px);
+ .box-shadow(0 3px 7px rgba(0,0,0,0.3));
+ }
+ .title {
+ background-color: #f5f5f5;
+ padding: 9px 15px;
+ line-height: 1;
+ .border-radius(3px 3px 0 0);
+ border-bottom:1px solid #eee;
+ }
+ .content {
+ background-color: @white;
+ padding: 14px;
+ .border-radius(0 0 3px 3px);
+ .background-clip(padding-box);
+ p, ul, ol {
+ margin-bottom: 0;
+ }
+ }
+}
+
+
+// PATTERN ANIMATIONS
+// ------------------
+
+.fade {
+ .transition(opacity .15s linear);
+ opacity: 0;
+ &.in {
+ opacity: 1;
+ }
+}
+
+
+// LABELS
+// ------
+
+.label {
+ padding: 1px 3px 2px;
+ background-color: @grayLight;
+ font-size: @basefont * .75;
+ font-weight: bold;
+ color: @white;
+ text-transform: uppercase;
+ .border-radius(3px);
+ &.important { background-color: #c43c35; }
+ &.warning { background-color: @orange; }
+ &.success { background-color: @green; }
+ &.notice { background-color: lighten(@blue, 25%); }
+}
+
+
+// MEDIA GRIDS
+// -----------
+
+.media-grid {
+ margin-left: -20px;
+ margin-bottom: 0;
+ .clearfix();
+ li {
+ display: inline;
+ }
+ a {
+ float: left;
+ padding: 4px;
+ margin: 0 0 20px 20px;
+ border: 1px solid #ddd;
+ .border-radius(4px);
+ .box-shadow(0 1px 1px rgba(0,0,0,.075));
+ img {
+ display: block;
+ }
+ &:hover {
+ border-color: @linkColor;
+ .box-shadow(0 1px 4px rgba(0,105,214,.25));
+ }
+ }
+}
+
diff --git a/vendor/toolkit/twitter/bootstrap/reset.less b/vendor/toolkit/twitter/bootstrap/reset.less
new file mode 100644
index 00000000..5390de7f
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/reset.less
@@ -0,0 +1,142 @@
+/* Reset.less
+ * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
+ * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
+
+
+// ERIC MEYER RESET
+// --------------------------------------------------
+
+html, body { margin: 0; padding: 0; }
+h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; font-weight: normal; font-style: normal; font-size: 100%; line-height: 1; font-family: inherit; }
+table { border-collapse: collapse; border-spacing: 0; }
+ol, ul { list-style: none; }
+q:before, q:after, blockquote:before, blockquote:after { content: ""; }
+
+
+// Normalize.css
+// Pulling in select resets form the normalize.css project
+// --------------------------------------------------
+
+// Display in IE6-9 and FF3
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+html {
+ overflow-y: scroll;
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+// Focus states
+a:focus {
+ outline: thin dotted;
+}
+// Hover & Active
+a:hover,
+a:active {
+ outline: 0;
+}
+
+// Display in IE6-9 and FF3
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+ display: block;
+}
+
+// Display block in IE6-9 and FF3
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+// Prevents modern browsers from displaying 'audio' without controls
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+audio:not([controls]) {
+ display: none;
+}
+
+// Prevents sub and sup affecting line-height in all browsers
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+
+// Img border in a's and image quality
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+img {
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+// Forms
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+
+// Font size in all browsers, margin changes, misc consistency
+button,
+input,
+select,
+textarea {
+ font-size: 100%;
+ margin: 0;
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+button,
+input {
+ line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
+ *overflow: visible; // Inner spacing ie IE6/7
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
+ border: 0;
+ padding: 0;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ cursor: pointer; // Cursors on all buttons applied consistently
+ -webkit-appearance: button; // Style clicable 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 {
+ -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
+}
+
diff --git a/vendor/toolkit/twitter/bootstrap/scaffolding.less b/vendor/toolkit/twitter/bootstrap/scaffolding.less
new file mode 100644
index 00000000..bc7fcb3b
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/scaffolding.less
@@ -0,0 +1,136 @@
+/*
+ * Scaffolding
+ * Basic and global styles for generating a grid system, structural layout, and page templates
+ * ------------------------------------------------------------------------------------------- */
+
+
+// STRUCTURAL LAYOUT
+// -----------------
+
+html, body {
+ background-color: @white;
+}
+body {
+ margin: 0;
+ #font > .sans-serif(normal,@basefont,@baseline);
+ color: @grayDark;
+}
+
+// Container (centered, fixed-width layouts)
+.container {
+ .fixed-container();
+}
+
+// Fluid layouts (left aligned, with sidebar, min- & max-width content)
+.container-fluid {
+ position: relative;
+ min-width: 940px;
+ padding-left: 20px;
+ padding-right: 20px;
+ .clearfix();
+ > .sidebar {
+ float: left;
+ width: 220px;
+ }
+ // TODO in v2: rename this and .popover .content to be more specific
+ > .content {
+ margin-left: 240px;
+ }
+}
+
+
+// BASE STYLES
+// -----------
+
+// Links
+a {
+ color: @linkColor;
+ text-decoration: none;
+ line-height: inherit;
+ font-weight: inherit;
+ &:hover {
+ color: @linkColorHover;
+ text-decoration: underline;
+ }
+}
+
+// Quick floats
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+
+// Toggling content
+.hide {
+ display: none;
+}
+.show {
+ display: block;
+}
+
+
+// GRID SYSTEM
+// -----------
+// To customize the grid system, bring up the variables.less file and change the column count, size, and gutter there
+
+.row {
+ .clearfix();
+ margin-left: -1 * @gridGutterWidth;
+}
+
+// Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7)
+// Credit to @dhg for the idea
+[class*="span"] {
+ .gridColumn();
+}
+
+// Default columns
+.span1 { .columns(1); }
+.span2 { .columns(2); }
+.span3 { .columns(3); }
+.span4 { .columns(4); }
+.span5 { .columns(5); }
+.span6 { .columns(6); }
+.span7 { .columns(7); }
+.span8 { .columns(8); }
+.span9 { .columns(9); }
+.span10 { .columns(10); }
+.span11 { .columns(11); }
+.span12 { .columns(12); }
+.span13 { .columns(13); }
+.span14 { .columns(14); }
+.span15 { .columns(15); }
+.span16 { .columns(16); }
+
+// For optional 24-column grid
+.span17 { .columns(17); }
+.span18 { .columns(18); }
+.span19 { .columns(19); }
+.span20 { .columns(20); }
+.span21 { .columns(21); }
+.span22 { .columns(22); }
+.span23 { .columns(23); }
+.span24 { .columns(24); }
+
+// Offset column options
+.offset1 { .offset(1); }
+.offset2 { .offset(2); }
+.offset3 { .offset(3); }
+.offset4 { .offset(4); }
+.offset5 { .offset(5); }
+.offset6 { .offset(6); }
+.offset7 { .offset(7); }
+.offset8 { .offset(8); }
+.offset9 { .offset(9); }
+.offset10 { .offset(10); }
+.offset11 { .offset(11); }
+.offset12 { .offset(12); }
+
+// Unique column sizes for 16-column grid
+.span-one-third { width: 300px; }
+.span-two-thirds { width: 620px; }
+.offset-one-third { margin-left: 340px; }
+.offset-two-thirds { margin-left: 660px; }
+
diff --git a/vendor/toolkit/twitter/bootstrap/tables.less b/vendor/toolkit/twitter/bootstrap/tables.less
new file mode 100644
index 00000000..0cee1c80
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/tables.less
@@ -0,0 +1,171 @@
+/*
+ * Tables.less
+ * Tables for, you guessed it, tabular data
+ * ---------------------------------------- */
+
+
+// BASELINE STYLES
+// ---------------
+
+table {
+ width: 100%;
+ margin-bottom: @baseline;
+ padding: 0;
+ border-collapse: separate; // Done so we can round those corners!
+ *border-collapse: collapse; /* IE7, collapse table to remove spacing */
+ font-size: @basefont;
+ border: 1px solid #ddd;
+ .border-radius(4px);
+ th, td {
+ padding: 10px 10px 9px;
+ line-height: @baseline;
+ text-align: left;
+ }
+ th {
+ padding-top: 9px;
+ font-weight: bold;
+ vertical-align: middle;
+ border-bottom: 1px solid #ddd;
+ }
+ td {
+ vertical-align: top;
+ }
+ th + th,
+ td + td {
+ border-left: 1px solid #ddd;
+ }
+ tr + tr td {
+ border-top: 1px solid #ddd;
+ }
+ tbody tr:first-child td:first-child {
+ .border-radius(4px 0 0 0);
+ }
+ tbody tr:first-child td:last-child {
+ .border-radius(0 4px 0 0);
+ }
+ tbody tr:last-child td:first-child {
+ .border-radius(0 0 0 4px);
+ }
+ tbody tr:last-child td:last-child {
+ .border-radius(0 0 4px 0);
+ }
+}
+
+
+// ZEBRA-STRIPING
+// --------------
+
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+.zebra-striped {
+ tbody {
+ tr:nth-child(odd) td {
+ background-color: #f9f9f9;
+ }
+ tr:hover td {
+ background-color: #f5f5f5;
+ }
+ }
+}
+
+table {
+ // Tablesorting styles w/ jQuery plugin
+ .header {
+ cursor: pointer;
+ &:after {
+ content: "";
+ float: right;
+ margin-top: 7px;
+ border-width: 0 4px 4px;
+ border-style: solid;
+ border-color: #000 transparent;
+ visibility: hidden;
+ }
+ }
+ // Style the sorted column headers (THs)
+ .headerSortUp,
+ .headerSortDown {
+ background-color: rgba(141,192,219,.25);
+ text-shadow: 0 1px 1px rgba(255,255,255,.75);
+ }
+ // Style the ascending (reverse alphabetical) column header
+ .header:hover {
+ &:after {
+ visibility:visible;
+ }
+ }
+ // Style the descending (alphabetical) column header
+ .headerSortDown,
+ .headerSortDown:hover {
+ &:after {
+ visibility:visible;
+ .opacity(60);
+ }
+ }
+ // Style the ascending (reverse alphabetical) column header
+ .headerSortUp {
+ &:after {
+ border-bottom: none;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #000;
+ visibility:visible;
+ .box-shadow(none); //can't add boxshadow to downward facing arrow :(
+ .opacity(60);
+ }
+ }
+ // Blue Table Headings
+ .blue {
+ color: @blue;
+ border-bottom-color: @blue;
+ }
+ .headerSortUp.blue,
+ .headerSortDown.blue {
+ background-color: lighten(@blue, 40%);
+ }
+ // Green Table Headings
+ .green {
+ color: @green;
+ border-bottom-color: @green;
+ }
+ .headerSortUp.green,
+ .headerSortDown.green {
+ background-color: lighten(@green, 40%);
+ }
+ // Red Table Headings
+ .red {
+ color: @red;
+ border-bottom-color: @red;
+ }
+ .headerSortUp.red,
+ .headerSortDown.red {
+ background-color: lighten(@red, 50%);
+ }
+ // Yellow Table Headings
+ .yellow {
+ color: @yellow;
+ border-bottom-color: @yellow;
+ }
+ .headerSortUp.yellow,
+ .headerSortDown.yellow {
+ background-color: lighten(@yellow, 40%);
+ }
+ // Orange Table Headings
+ .orange {
+ color: @orange;
+ border-bottom-color: @orange;
+ }
+ .headerSortUp.orange,
+ .headerSortDown.orange {
+ background-color: lighten(@orange, 40%);
+ }
+ // Purple Table Headings
+ .purple {
+ color: @purple;
+ border-bottom-color: @purple;
+ }
+ .headerSortUp.purple,
+ .headerSortDown.purple {
+ background-color: lighten(@purple, 40%);
+ }
+}
+
diff --git a/vendor/toolkit/twitter/bootstrap/type.less b/vendor/toolkit/twitter/bootstrap/type.less
new file mode 100644
index 00000000..bcd6bf62
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/type.less
@@ -0,0 +1,188 @@
+/* Typography.less
+ * Headings, body text, lists, code, and more for a versatile and durable typography system
+ * ---------------------------------------------------------------------------------------- */
+
+
+// BODY TEXT
+// ---------
+
+p {
+ #font > .shorthand(normal,@basefont,@baseline);
+ margin-bottom: @baseline / 2;
+ small {
+ font-size: @basefont - 2;
+ color: @grayLight;
+ }
+}
+
+
+// HEADINGS
+// --------
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+ color: @grayDark;
+ small {
+ color: @grayLight;
+ }
+}
+h1 {
+ margin-bottom: @baseline;
+ font-size: 30px;
+ line-height: @baseline * 2;
+ small {
+ font-size: 18px;
+ }
+}
+h2 {
+ font-size: 24px;
+ line-height: @baseline * 2;
+ small {
+ font-size: 14px;
+ }
+}
+h3, h4, h5, h6 {
+ line-height: @baseline * 2;
+}
+h3 {
+ font-size: 18px;
+ small {
+ font-size: 14px;
+ }
+}
+h4 {
+ font-size: 16px;
+ small {
+ font-size: 12px;
+ }
+}
+h5 {
+ font-size: 14px;
+}
+h6 {
+ font-size: 13px;
+ color: @grayLight;
+ text-transform: uppercase;
+}
+
+
+// COLORS
+// ------
+
+// Unordered and Ordered lists
+ul, ol {
+ margin: 0 0 @baseline 25px;
+}
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin-bottom: 0;
+}
+ul {
+ list-style: disc;
+}
+ol {
+ list-style: decimal;
+}
+li {
+ line-height: @baseline;
+ color: @gray;
+}
+ul.unstyled {
+ list-style: none;
+ margin-left: 0;
+}
+
+// Description Lists
+dl {
+ margin-bottom: @baseline;
+ dt, dd {
+ line-height: @baseline;
+ }
+ dt {
+ font-weight: bold;
+ }
+ dd {
+ margin-left: @baseline / 2;
+ }
+}
+
+// MISC
+// ----
+
+// Horizontal rules
+hr {
+ margin: 20px 0 19px;
+ border: 0;
+ border-bottom: 1px solid #eee;
+}
+
+// Emphasis
+strong {
+ font-style: inherit;
+ font-weight: bold;
+}
+em {
+ font-style: italic;
+ font-weight: inherit;
+ line-height: inherit;
+}
+.muted {
+ color: @grayLight;
+}
+
+// Blockquotes
+blockquote {
+ margin-bottom: @baseline;
+ border-left: 5px solid #eee;
+ padding-left: 15px;
+ p {
+ #font > .shorthand(300,14px,@baseline);
+ margin-bottom: 0;
+ }
+ small {
+ display: block;
+ #font > .shorthand(300,12px,@baseline);
+ color: @grayLight;
+ &:before {
+ content: '\2014 \00A0';
+ }
+ }
+}
+
+// Addresses
+address {
+ display: block;
+ line-height: @baseline;
+ margin-bottom: @baseline;
+}
+
+// Inline and block code styles
+code, pre {
+ padding: 0 3px 2px;
+ font-family: Monaco, Andale Mono, Courier New, monospace;
+ font-size: 12px;
+ .border-radius(3px);
+}
+code {
+ background-color: lighten(@orange, 40%);
+ color: rgba(0,0,0,.75);
+ padding: 1px 3px;
+}
+pre {
+ background-color: #f5f5f5;
+ display: block;
+ padding: (@baseline - 1) / 2;
+ margin: 0 0 @baseline;
+ line-height: @baseline;
+ font-size: 12px;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0,0,0,.15);
+ .border-radius(3px);
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+
+}
+
diff --git a/vendor/toolkit/twitter/bootstrap/variables.less b/vendor/toolkit/twitter/bootstrap/variables.less
new file mode 100644
index 00000000..b2bc7c7c
--- /dev/null
+++ b/vendor/toolkit/twitter/bootstrap/variables.less
@@ -0,0 +1,61 @@
+/* Variables.less
+ * Variables to customize the look and feel of Bootstrap
+ * ----------------------------------------------------- */
+
+
+// Links
+@linkColor: #0069d6;
+@linkColorHover: darken(@linkColor, 15);
+
+// Grays
+@black: #000;
+@grayDark: lighten(@black, 25%);
+@gray: lighten(@black, 50%);
+@grayLight: lighten(@black, 75%);
+@grayLighter: lighten(@black, 90%);
+@white: #fff;
+
+// Accent Colors
+@blue: #049CDB;
+@blueDark: #0064CD;
+@green: #46a546;
+@red: #9d261d;
+@yellow: #ffc40d;
+@orange: #f89406;
+@pink: #c3325f;
+@purple: #7a43b6;
+
+// Baseline grid
+@basefont: 13px;
+@baseline: 18px;
+
+// Griditude
+// Modify the grid styles in mixins.less
+@gridColumns: 16;
+@gridColumnWidth: 40px;
+@gridGutterWidth: 20px;
+@extraSpace: (@gridGutterWidth * 2); // For our grid calculations
+@siteWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
+
+// Color Scheme
+// Use this to roll your own color schemes if you like (unused by Bootstrap by default)
+@baseColor: @blue; // Set a base color
+@complement: spin(@baseColor, 180); // Determine a complementary color
+@split1: spin(@baseColor, 158); // Split complements
+@split2: spin(@baseColor, -158);
+@triad1: spin(@baseColor, 135); // Triads colors
+@triad2: spin(@baseColor, -135);
+@tetra1: spin(@baseColor, 90); // Tetra colors
+@tetra2: spin(@baseColor, -90);
+@analog1: spin(@baseColor, 22); // Analogs colors
+@analog2: spin(@baseColor, -22);
+
+
+
+// More variables coming soon:
+// - @basefont to @baseFontSize
+// - @baseline to @baseLineHeight
+// - @baseFontFamily
+// - @primaryButtonColor
+// - anything else? File an issue on GitHub
+