├── .gitignore ├── vendor └── assets │ ├── images │ ├── glyphicons-halflings.png │ └── glyphicons-halflings-white.png │ ├── stylesheets │ ├── bootstrap │ │ ├── _grid.scss │ │ ├── _utilities.scss │ │ ├── _component-animations.scss │ │ ├── _close.scss │ │ ├── _wells.scss │ │ ├── _hero-unit.scss │ │ ├── _layouts.scss │ │ ├── _breadcrumbs.scss │ │ ├── _pager.scss │ │ ├── _accordion.scss │ │ ├── _scaffolding.scss │ │ ├── _thumbnails.scss │ │ ├── _labels.scss │ │ ├── _tooltip.scss │ │ ├── _pagination.scss │ │ ├── _popovers.scss │ │ ├── _code.scss │ │ ├── _alerts.scss │ │ ├── _modals.scss │ │ ├── _progress-bars.scss │ │ ├── _carousel.scss │ │ ├── _reset.scss │ │ ├── _tables.scss │ │ ├── _dropdowns.scss │ │ ├── _variables.scss │ │ ├── _button-groups.scss │ │ ├── _type.scss │ │ ├── _buttons.scss │ │ ├── _navbar.scss │ │ ├── _navs.scss │ │ ├── _sprites.scss │ │ ├── _forms.scss │ │ └── _mixins.scss │ ├── _bootstrap.scss │ └── _bootstrap-responsive.scss │ └── javascripts │ ├── bootstrap.js │ ├── bootstrap-transition.js │ ├── bootstrap-alert.js │ ├── bootstrap-dropdown.js │ ├── bootstrap-button.js │ ├── bootstrap-popover.js │ ├── bootstrap-tab.js │ ├── bootstrap-scrollspy.js │ ├── bootstrap-collapse.js │ ├── bootstrap-carousel.js │ ├── bootstrap-modal.js │ ├── bootstrap-typeahead.js │ └── bootstrap-tooltip.js ├── templates └── project │ ├── styles.scss │ └── manifest.rb ├── CHANGELOG.md ├── lib ├── bootstrap-sass │ ├── engine.rb │ ├── compass_extensions.rb │ └── config │ │ ├── sass-ie_hex_str.rb │ │ └── sass_extentions.rb └── bootstrap-sass.rb ├── bootstrap-sass.gemspec ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | 3 | -------------------------------------------------------------------------------- /vendor/assets/images/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fcoury/bootstrap-sass/master/vendor/assets/images/glyphicons-halflings.png -------------------------------------------------------------------------------- /vendor/assets/images/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fcoury/bootstrap-sass/master/vendor/assets/images/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /templates/project/styles.scss: -------------------------------------------------------------------------------- 1 | // I gather this file is a starting point for the project. 2 | @import "bootstrap"; 3 | 4 | // Include responsive Bootstrap styles 5 | // @import "bootstrap-responsive"; -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 2.0.1 4 | * Updated to Bootstrap 2.0.1 5 | * Modified `@mixin opacity()` to take an argument `0...1` rather than `0...100` to be consistent with Compass. 6 | 7 | ## 2.0.0 8 | * Updated to Bootstrap 2.0.0 -------------------------------------------------------------------------------- /lib/bootstrap-sass/engine.rb: -------------------------------------------------------------------------------- 1 | module Bootstrap 2 | module Rails 3 | class Engine < ::Rails::Engine 4 | # Rails, will you please look in our vendor? kthx 5 | # also add our initializer. 6 | paths["config/initializers"] << 'lib/bootstrap-sass/config' 7 | end 8 | end 9 | end -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_grid.scss: -------------------------------------------------------------------------------- 1 | // GRID SYSTEM 2 | // ----------- 3 | 4 | // Fixed (940px) 5 | @include gridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth); 6 | 7 | // Fluid (940px) 8 | @include fluidGridSystemGenerate($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth); -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_utilities.scss: -------------------------------------------------------------------------------- 1 | // UTILITY CLASSES 2 | // --------------- 3 | 4 | // Quick floats 5 | .pull-right { 6 | float: right; 7 | } 8 | .pull-left { 9 | float: left; 10 | } 11 | 12 | // Toggling content 13 | .hide { 14 | display: none; 15 | } 16 | .show { 17 | display: block; 18 | } 19 | 20 | // Visibility 21 | .invisible { 22 | visibility: hidden; 23 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_component-animations.scss: -------------------------------------------------------------------------------- 1 | // COMPONENT ANIMATIONS 2 | // -------------------- 3 | 4 | .fade { 5 | @include transition(opacity .15s linear); 6 | opacity: 0; 7 | &.in { 8 | opacity: 1; 9 | } 10 | } 11 | 12 | .collapse { 13 | @include transition(height .35s ease); 14 | position:relative; 15 | overflow:hidden; 16 | height: 0; 17 | &.in { height: auto; } 18 | } -------------------------------------------------------------------------------- /vendor/assets/javascripts/bootstrap.js: -------------------------------------------------------------------------------- 1 | //= require bootstrap-transition 2 | //= require bootstrap-alert 3 | //= require bootstrap-button 4 | //= require bootstrap-carousel 5 | //= require bootstrap-collapse 6 | //= require bootstrap-dropdown 7 | //= require bootstrap-modal 8 | //= require bootstrap-scrollspy 9 | //= require bootstrap-tab 10 | //= require bootstrap-tooltip 11 | //= require bootstrap-popover 12 | //= require bootstrap-typeahead -------------------------------------------------------------------------------- /lib/bootstrap-sass/compass_extensions.rb: -------------------------------------------------------------------------------- 1 | # This contains functions for use with a project *only* using Compass. 2 | 3 | module Sass::Script::Functions 4 | # Define asset_url for Compass to allow use of sprites. 5 | def asset_url(asset, type) 6 | asset_sans_quotes = asset.value.gsub('"', '') 7 | path = Sass::Script::String.new("/#{type}s/#{asset_sans_quotes}", :string) 8 | Sass::Script::String.new("url(#{path})") 9 | end 10 | end -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_close.scss: -------------------------------------------------------------------------------- 1 | // CLOSE ICONS 2 | // ----------- 3 | 4 | .close { 5 | float: right; 6 | font-size: 20px; 7 | font-weight: bold; 8 | line-height: $baseLineHeight; 9 | color: $black; 10 | text-shadow: 0 1px 0 rgba(255,255,255,1); 11 | @include opacity(0.2); 12 | &:hover { 13 | color: $black; 14 | text-decoration: none; 15 | @include opacity(0.4); 16 | cursor: pointer; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_wells.scss: -------------------------------------------------------------------------------- 1 | // WELLS 2 | // ----- 3 | 4 | .well { 5 | min-height: 20px; 6 | padding: 19px; 7 | margin-bottom: 20px; 8 | background-color: #f5f5f5; 9 | border: 1px solid #eee; 10 | border: 1px solid rgba(0,0,0,.05); 11 | @include border-radius(4px); 12 | @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 13 | blockquote { 14 | border-color: #ddd; 15 | border-color: rgba(0,0,0,.15); 16 | } 17 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_hero-unit.scss: -------------------------------------------------------------------------------- 1 | // HERO UNIT 2 | // --------- 3 | 4 | .hero-unit { 5 | padding: 60px; 6 | margin-bottom: 30px; 7 | background-color: #f5f5f5; 8 | @include border-radius(6px); 9 | h1 { 10 | margin-bottom: 0; 11 | font-size: 60px; 12 | line-height: 1; 13 | letter-spacing: -1px; 14 | } 15 | p { 16 | font-size: 18px; 17 | font-weight: 200; 18 | line-height: $baseLineHeight * 1.5; 19 | } 20 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_layouts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Layouts 3 | // Fixed-width and fluid (with sidebar) layouts 4 | // -------------------------------------------- 5 | 6 | 7 | // Container (centered, fixed-width layouts) 8 | .container { 9 | @include container-fixed(); 10 | } 11 | 12 | // Fluid layouts (left aligned, with sidebar, min- & max-width content) 13 | .container-fluid { 14 | padding-left: $gridGutterWidth; 15 | padding-right: $gridGutterWidth; 16 | @include clearfix(); 17 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | // BREADCRUMBS 2 | // ----------- 3 | 4 | .breadcrumb { 5 | padding: 7px 14px; 6 | margin: 0 0 $baseLineHeight; 7 | @include gradient-vertical($white, #f5f5f5); 8 | border: 1px solid #ddd; 9 | @include border-radius(3px); 10 | @include box-shadow(inset 0 1px 0 $white); 11 | li { 12 | display: inline-block; 13 | text-shadow: 0 1px 0 $white; 14 | } 15 | .divider { 16 | padding: 0 5px; 17 | color: $grayLight; 18 | } 19 | .active a { 20 | color: $grayDark; 21 | } 22 | } -------------------------------------------------------------------------------- /lib/bootstrap-sass/config/sass-ie_hex_str.rb: -------------------------------------------------------------------------------- 1 | require 'sass' 2 | 3 | module Sass::Script::Functions 4 | # LARS: Snatched from compass - 2011-11-29 - used for gradients in IE6-9 5 | # returns an IE hex string for a color with an alpha channel 6 | # suitable for passing to IE filters. 7 | def ie_hex_str(color) 8 | assert_type color, :Color 9 | alpha = (color.alpha * 255).round 10 | alphastr = alpha.to_s(16).rjust(2, '0') 11 | Sass::Script::String.new("##{alphastr}#{color.send(:hex_str)[1..-1]}".upcase) 12 | end 13 | declare :ie_hex_str, [:color] 14 | end -------------------------------------------------------------------------------- /lib/bootstrap-sass/config/sass_extentions.rb: -------------------------------------------------------------------------------- 1 | require 'sass' 2 | 3 | module Sass::Script::Functions 4 | # LARS: Snatched from compass - 2011-11-29 - used for gradients in IE6-9 5 | # returns an IE hex string for a color with an alpha channel 6 | # suitable for passing to IE filters. 7 | def ie_hex_str(color) 8 | assert_type color, :Color 9 | alpha = (color.alpha * 255).round 10 | alphastr = alpha.to_s(16).rjust(2, '0') 11 | Sass::Script::String.new("##{alphastr}#{color.send(:hex_str)[1..-1]}".upcase) 12 | end 13 | declare :ie_hex_str, [:color] 14 | end -------------------------------------------------------------------------------- /bootstrap-sass.gemspec: -------------------------------------------------------------------------------- 1 | Gem::Specification.new do |s| 2 | s.name = "bootstrap-sass" 3 | s.version = '2.0.1' 4 | s.authors = ["Thomas McDonald"] 5 | s.email = 'tom@conceptcoding.co.uk' 6 | s.summary = "Twitter's Bootstrap, converted to SASS and ready to drop into Rails or Compass" 7 | s.homepage = "http://github.com/thomas-mcdonald/bootstrap-sass" 8 | 9 | s.add_development_dependency 'compass' 10 | s.add_development_dependency 'sass-rails', '~> 3.2' 11 | 12 | s.files = Dir["vendor/**/*.{scss,js,png}"] + Dir["lib/**/*"] + Dir["templates/**/*"] + ["README.md", "LICENSE"] 13 | end 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2011 Twitter, Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | 15 | -------------------------------------------------------------------------------- /templates/project/manifest.rb: -------------------------------------------------------------------------------- 1 | description "Bootstrap for SASS" 2 | 3 | # Stylesheet importing bootstrap 4 | stylesheet 'styles.scss' 5 | 6 | # 7 | # Other Bootstrap assets 8 | basedir = '../../vendor/assets' 9 | 10 | # Glyphicons sprites 11 | %w(glyphicons-halflings glyphicons-halflings-white).each do |file| 12 | image "#{basedir}/images/#{file}.png", :to => "#{file}.png" 13 | end 14 | 15 | # Javascripts 16 | %w(alert button carousel collapse dropdown modal popover scrollspy tab tooltip transition typeahead).each do |file| 17 | javascript "#{basedir}/javascripts/bootstrap-#{file}.js", :to => "bootstrap-#{file}.js" 18 | end -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_pager.scss: -------------------------------------------------------------------------------- 1 | // PAGER 2 | // ----- 3 | 4 | .pager { 5 | margin-left: 0; 6 | margin-bottom: $baseLineHeight; 7 | list-style: none; 8 | text-align: center; 9 | @include clearfix(); 10 | } 11 | .pager li { 12 | display: inline; 13 | } 14 | .pager a { 15 | display: inline-block; 16 | padding: 5px 14px; 17 | background-color: #fff; 18 | border: 1px solid #ddd; 19 | @include border-radius(15px); 20 | } 21 | .pager a:hover { 22 | text-decoration: none; 23 | background-color: #f5f5f5; 24 | } 25 | .pager .next a { 26 | float: right; 27 | } 28 | .pager .previous a { 29 | float: left; 30 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_accordion.scss: -------------------------------------------------------------------------------- 1 | // ACCORDION 2 | // --------- 3 | 4 | 5 | // Parent container 6 | .accordion { 7 | margin-bottom: $baseLineHeight; 8 | } 9 | 10 | // Group == heading + body 11 | .accordion-group { 12 | margin-bottom: 2px; 13 | border: 1px solid #e5e5e5; 14 | @include border-radius(4px); 15 | } 16 | .accordion-heading { 17 | border-bottom: 0; 18 | } 19 | .accordion-heading .accordion-toggle { 20 | display: block; 21 | padding: 8px 15px; 22 | } 23 | 24 | // Inner needs the styles because you can't animate properly with any styles on the element 25 | .accordion-inner { 26 | padding: 9px 15px; 27 | border-top: 1px solid #e5e5e5; 28 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_scaffolding.scss: -------------------------------------------------------------------------------- 1 | // Scaffolding 2 | // Basic and global styles for generating a grid system, structural layout, and page templates 3 | // ------------------------------------------------------------------------------------------- 4 | 5 | 6 | // STRUCTURAL LAYOUT 7 | // ----------------- 8 | 9 | body { 10 | margin: 0; 11 | font-family: $baseFontFamily; 12 | font-size: $baseFontSize; 13 | line-height: $baseLineHeight; 14 | color: $textColor; 15 | background-color: $white; 16 | } 17 | 18 | 19 | // LINKS 20 | // ----- 21 | 22 | a { 23 | color: $linkColor; 24 | text-decoration: none; 25 | } 26 | a:hover { 27 | color: $linkColorHover; 28 | text-decoration: underline; 29 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_thumbnails.scss: -------------------------------------------------------------------------------- 1 | // THUMBNAILS 2 | // ---------- 3 | 4 | .thumbnails { 5 | margin-left: -$gridGutterWidth; 6 | list-style: none; 7 | @include clearfix(); 8 | } 9 | .thumbnails > li { 10 | float: left; 11 | margin: 0 0 $baseLineHeight $gridGutterWidth; 12 | } 13 | .thumbnail { 14 | display: block; 15 | padding: 4px; 16 | line-height: 1; 17 | border: 1px solid #ddd; 18 | @include border-radius(4px); 19 | @include box-shadow(0 1px 1px rgba(0,0,0,.075)); 20 | } 21 | // Add a hover state for linked versions only 22 | a.thumbnail:hover { 23 | border-color: $linkColor; 24 | @include box-shadow(0 1px 4px rgba(0,105,214,.25)); 25 | } 26 | // Images and captions 27 | .thumbnail > img { 28 | display: block; 29 | max-width: 100%; 30 | margin-left: auto; 31 | margin-right: auto; 32 | } 33 | .thumbnail .caption { 34 | padding: 9px; 35 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_labels.scss: -------------------------------------------------------------------------------- 1 | // LABELS 2 | // ------ 3 | 4 | // Base 5 | .label { 6 | padding: 2px 4px 3px; 7 | font-size: $baseFontSize * .85; 8 | font-weight: bold; 9 | color: $white; 10 | text-shadow: 0 -1px 0 rgba(0,0,0,.25); 11 | background-color: $grayLight; 12 | @include border-radius(3px); 13 | } 14 | 15 | // Hover state 16 | .label:hover { 17 | color: $white; 18 | text-decoration: none; 19 | } 20 | 21 | // Colors 22 | .label-important { background-color: $errorText; } 23 | .label-important:hover { background-color: darken($errorText, 10%); } 24 | 25 | .label-warning { background-color: $orange; } 26 | .label-warning:hover { background-color: darken($orange, 10%); } 27 | 28 | .label-success { background-color: $successText; } 29 | .label-success:hover { background-color: darken($successText, 10%); } 30 | 31 | .label-info { background-color: $infoText; } 32 | .label-info:hover { background-color: darken($infoText, 10%); } -------------------------------------------------------------------------------- /lib/bootstrap-sass.rb: -------------------------------------------------------------------------------- 1 | module Bootstrap 2 | class FrameworkNotFound < StandardError; end 3 | 4 | # Inspired by Kaminari 5 | def self.load! 6 | if rails? 7 | require 'sass-rails' # See: https://github.com/thomas-mcdonald/bootstrap-sass/pull/4 8 | require 'bootstrap-sass/engine' 9 | elsif compass? 10 | require 'bootstrap-sass/compass_extensions' 11 | base = File.join(File.dirname(__FILE__), '..') 12 | styles = File.join(base, 'vendor', 'assets', 'stylesheets') 13 | templates = File.join(base, 'templates') 14 | ::Compass::Frameworks.register('bootstrap', :stylesheets_directory => styles, :templates_directory => templates) 15 | else 16 | raise Bootstrap::FrameworkNotFound, "bootstrap-sass requires either Rails or Compass, neither of which are loaded" 17 | end 18 | end 19 | 20 | private 21 | def self.rails? 22 | defined?(::Rails) 23 | end 24 | 25 | def self.compass? 26 | defined?(::Compass) 27 | end 28 | end 29 | 30 | Bootstrap.load! 31 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_tooltip.scss: -------------------------------------------------------------------------------- 1 | // TOOLTIP 2 | // ------= 3 | 4 | .tooltip { 5 | position: absolute; 6 | z-index: $zindexTooltip; 7 | display: block; 8 | visibility: visible; 9 | padding: 5px; 10 | font-size: 11px; 11 | @include opacity(0); 12 | &.in { @include opacity(0.8); } 13 | &.top { margin-top: -2px; } 14 | &.right { margin-left: 2px; } 15 | &.bottom { margin-top: 2px; } 16 | &.left { margin-left: -2px; } 17 | &.top .tooltip-arrow { @include popoverArrowTop(); } 18 | &.left .tooltip-arrow { @include popoverArrowLeft(); } 19 | &.bottom .tooltip-arrow { @include popoverArrowBottom(); } 20 | &.right .tooltip-arrow { @include popoverArrowRight(); } 21 | } 22 | .tooltip-inner { 23 | max-width: 200px; 24 | padding: 3px 8px; 25 | color: $white; 26 | text-align: center; 27 | text-decoration: none; 28 | background-color: $black; 29 | @include border-radius(4px); 30 | } 31 | .tooltip-arrow { 32 | position: absolute; 33 | width: 0; 34 | height: 0; 35 | } 36 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_pagination.scss: -------------------------------------------------------------------------------- 1 | // PAGINATION 2 | // ---------- 3 | 4 | .pagination { 5 | height: $baseLineHeight * 2; 6 | margin: $baseLineHeight 0; 7 | } 8 | .pagination ul { 9 | display: inline-block; 10 | @include ie7-inline-block(); 11 | margin-left: 0; 12 | margin-bottom: 0; 13 | @include border-radius(3px); 14 | @include box-shadow(0 1px 2px rgba(0,0,0,.05)); 15 | } 16 | .pagination li { 17 | display: inline; 18 | } 19 | .pagination a { 20 | float: left; 21 | padding: 0 14px; 22 | line-height: ($baseLineHeight * 2) - 2; 23 | text-decoration: none; 24 | border: 1px solid #ddd; 25 | border-left-width: 0; 26 | } 27 | .pagination a:hover, .pagination .active a { 28 | background-color: #f5f5f5; 29 | } 30 | .pagination .active a { 31 | color: $grayLight; 32 | cursor: default; 33 | } 34 | .pagination .disabled a, .pagination .disabled a:hover { 35 | color: $grayLight; 36 | background-color: transparent; 37 | cursor: default; 38 | } 39 | .pagination li:first-child a { 40 | border-left-width: 1px; 41 | @include border-radius(3px 0 0 3px); 42 | } 43 | .pagination li:last-child a { 44 | @include border-radius(0 3px 3px 0); 45 | } 46 | 47 | // Centered 48 | .pagination-centered { 49 | text-align: center; 50 | } 51 | .pagination-right { 52 | text-align: right; 53 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_popovers.scss: -------------------------------------------------------------------------------- 1 | // POPOVERS 2 | // -------- 3 | 4 | .popover { 5 | position: absolute; 6 | top: 0; 7 | left: 0; 8 | z-index: $zindexPopover; 9 | display: none; 10 | padding: 5px; 11 | &.top { margin-top: -5px; } 12 | &.right { margin-left: 5px; } 13 | &.bottom { margin-top: 5px; } 14 | &.left { margin-left: -5px; } 15 | &.top .arrow { @include popoverArrowTop(); } 16 | &.right .arrow { @include popoverArrowRight(); } 17 | &.bottom .arrow { @include popoverArrowBottom(); } 18 | &.left .arrow { @include popoverArrowLeft(); } 19 | .arrow { 20 | position: absolute; 21 | width: 0; 22 | height: 0; 23 | } 24 | } 25 | .popover-inner { 26 | padding: 3px; 27 | width: 280px; 28 | overflow: hidden; 29 | background: $black; // has to be full background declaration for IE fallback 30 | background: rgba(0,0,0,.8); 31 | @include border-radius(6px); 32 | @include box-shadow(0 3px 7px rgba(0,0,0,0.3)); 33 | } 34 | .popover-title { 35 | padding: 9px 15px; 36 | line-height: 1; 37 | background-color: #f5f5f5; 38 | border-bottom:1px solid #eee; 39 | @include border-radius(3px 3px 0 0); 40 | } 41 | .popover-content { 42 | padding: 14px; 43 | background-color: $white; 44 | @include border-radius(0 0 3px 3px); 45 | @include background-clip(padding-box); 46 | p, ul, ol { 47 | margin-bottom: 0; 48 | } 49 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_code.scss: -------------------------------------------------------------------------------- 1 | // Code.css.scss 2 | // Code typography styles for the and
 elements
 3 | // --------------------------------------------------------
 4 | 
 5 | // Inline and block code styles
 6 | code, pre {
 7 |   padding: 0 3px 2px;
 8 |   @include font-family-monospace();
 9 |   font-size: $baseFontSize - 1;
10 |   color: $grayDark;
11 |   @include border-radius(3px);
12 | }
13 | 
14 | // Inline code
15 | code {
16 |   padding: 3px 4px;
17 |   color: #d14;
18 |   background-color: #f7f7f9;
19 |   border: 1px solid #e1e1e8;
20 | }
21 | 
22 | // Blocks of code
23 | pre {
24 |   display: block;
25 |   padding: ($baseLineHeight - 1) / 2;
26 |   margin: 0 0 $baseLineHeight / 2;
27 |   font-size: 12px;
28 |   line-height: $baseLineHeight;
29 |   background-color: #f5f5f5;
30 |   border: 1px solid #ccc; // fallback for IE7-8
31 |   border: 1px solid rgba(0,0,0,.15);
32 |   @include border-radius(4px);
33 |   white-space: pre;
34 |   white-space: pre-wrap;
35 |   word-break: break-all;
36 |   word-wrap: break-word;
37 | 
38 |   // Make prettyprint styles more spaced out for readability
39 |   &.prettyprint {
40 |     margin-bottom: $baseLineHeight;
41 |   }
42 | 
43 |   // Account for some code outputs that place code tags in pre tags
44 |   code {
45 |     padding: 0;
46 |     color: inherit;
47 |     background-color: transparent;
48 |     border: 0;
49 |   }
50 | }
51 | 
52 | // Enable scrollable blocks of code
53 | .pre-scrollable {
54 |   max-height: 340px;
55 |   overflow-y: scroll;
56 | }


--------------------------------------------------------------------------------
/vendor/assets/stylesheets/bootstrap/_alerts.scss:
--------------------------------------------------------------------------------
 1 | // ALERT STYLES
 2 | // ------------
 3 | 
 4 | // Base alert styles
 5 | .alert {
 6 |   padding: 8px 35px 8px 14px;
 7 |   margin-bottom: $baseLineHeight;
 8 |   text-shadow: 0 1px 0 rgba(255,255,255,.5);
 9 |   background-color: $warningBackground;
10 |   border: 1px solid $warningBorder;
11 |   @include border-radius(4px);
12 | }
13 | .alert, .alert-heading {
14 |   color: $warningText;
15 | }
16 | 
17 | // Adjust close link position
18 | .alert .close {
19 |   position: relative;
20 |   top: -2px;
21 |   right: -21px;
22 |   line-height: 18px;
23 | }
24 | 
25 | // Alternate styles
26 | // ----------------
27 | 
28 | .alert-success {
29 |   background-color: $successBackground;
30 |   border-color: $successBorder;
31 | }
32 | .alert-success, .alert-success .alert-heading {
33 |   color: $successText;
34 | }
35 | .alert-danger, .alert-error {
36 |   background-color: $errorBackground;
37 |   border-color: $errorBorder;
38 | }
39 | .alert-danger, .alert-error, .alert-danger .alert-heading, .alert-error .alert-heading {
40 |   color: $errorText;
41 | }
42 | .alert-info {
43 |   background-color: $infoBackground;
44 |   border-color: $infoBorder;
45 | }
46 | .alert-info, .alert-info .alert-heading {
47 |   color: $infoText;
48 | }
49 | 
50 | 
51 | // Block alerts
52 | // ------------------------
53 | .alert-block {
54 |   padding-top: 14px;
55 |   padding-bottom: 14px;
56 | }
57 | .alert-block > p, .alert-block > ul {
58 |   margin-bottom: 0;
59 | }
60 | .alert-block p + p {
61 |   margin-top: 5px;
62 | }


--------------------------------------------------------------------------------
/vendor/assets/stylesheets/_bootstrap.scss:
--------------------------------------------------------------------------------
 1 | /*!
 2 |  * Bootstrap 2.0.1
 3 |  *
 4 |  * Copyright 2012 Twitter, Inc
 5 |  * Licensed under the Apache License v2.0
 6 |  * http://www.apache.org/licenses/LICENSE-2.0
 7 |  *
 8 |  * Designed and built with all the love in the world @twitter by @mdo and @fat.
 9 |  * Converted to SASS by Thomas McDonald
10 |  */
11 | 
12 | // Core variables and mixins
13 | @import "bootstrap/variables"; // Modify this for custom colors, font-sizes, etc
14 | @import "bootstrap/mixins";
15 | 
16 | // CSS Reset
17 | @import "bootstrap/reset";
18 | 
19 | // Grid system and page structure
20 | @import "bootstrap/scaffolding";
21 | @import "bootstrap/grid";
22 | @import "bootstrap/layouts";
23 | 
24 | // Base CSS
25 | @import "bootstrap/type";
26 | @import "bootstrap/code";
27 | @import "bootstrap/forms";
28 | @import "bootstrap/tables";
29 | 
30 | // Components: common
31 | @import "bootstrap/sprites";
32 | @import "bootstrap/dropdowns";
33 | @import "bootstrap/wells";
34 | @import "bootstrap/component-animations";
35 | @import "bootstrap/close";
36 | 
37 | // Components: Buttons & Alerts
38 | @import "bootstrap/buttons";
39 | @import "bootstrap/button-groups";
40 | @import "bootstrap/alerts"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
41 | 
42 | // Components: Nav
43 | @import "bootstrap/navs";
44 | @import "bootstrap/navbar";
45 | @import "bootstrap/breadcrumbs";
46 | @import "bootstrap/pagination";
47 | @import "bootstrap/pager";
48 | 
49 | // Components: Popovers
50 | @import "bootstrap/modals";
51 | @import "bootstrap/tooltip";
52 | @import "bootstrap/popovers";
53 | 
54 | // Components: Misc
55 | @import "bootstrap/thumbnails";
56 | @import "bootstrap/labels";
57 | @import "bootstrap/progress-bars";
58 | @import "bootstrap/accordion";
59 | @import "bootstrap/carousel";
60 | @import "bootstrap/hero-unit";
61 | 
62 | // Utility classes
63 | @import "bootstrap/utilities"; // Has to be last to override when necessary


--------------------------------------------------------------------------------
/vendor/assets/javascripts/bootstrap-transition.js:
--------------------------------------------------------------------------------
 1 | /* ===================================================
 2 |  * bootstrap-transition.js v2.0.1
 3 |  * http://twitter.github.com/bootstrap/javascript.html#transitions
 4 |  * ===================================================
 5 |  * Copyright 2012 Twitter, Inc.
 6 |  *
 7 |  * Licensed under the Apache License, Version 2.0 (the "License");
 8 |  * you may not use this file except in compliance with the License.
 9 |  * You may obtain a copy of the License at
10 |  *
11 |  * http://www.apache.org/licenses/LICENSE-2.0
12 |  *
13 |  * Unless required by applicable law or agreed to in writing, software
14 |  * distributed under the License is distributed on an "AS IS" BASIS,
15 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 |  * See the License for the specific language governing permissions and
17 |  * limitations under the License.
18 |  * ========================================================== */
19 | 
20 | !function( $ ) {
21 | 
22 |   $(function () {
23 | 
24 |     "use strict"
25 | 
26 |     /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
27 |      * ======================================================= */
28 | 
29 |     $.support.transition = (function () {
30 |       var thisBody = document.body || document.documentElement
31 |         , thisStyle = thisBody.style
32 |         , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
33 | 
34 |       return support && {
35 |         end: (function () {
36 |           var transitionEnd = "TransitionEnd"
37 |           if ( $.browser.webkit ) {
38 |           	transitionEnd = "webkitTransitionEnd"
39 |           } else if ( $.browser.mozilla ) {
40 |           	transitionEnd = "transitionend"
41 |           } else if ( $.browser.opera ) {
42 |           	transitionEnd = "oTransitionEnd"
43 |           }
44 |           return transitionEnd
45 |         }())
46 |       }
47 |     })()
48 | 
49 |   })
50 | 
51 | }( window.jQuery );


--------------------------------------------------------------------------------
/vendor/assets/stylesheets/bootstrap/_modals.scss:
--------------------------------------------------------------------------------
 1 | // MODALS
 2 | // ------
 3 | 
 4 | // Recalculate z-index where appropriate
 5 | .modal-open {
 6 |   .dropdown-menu {  z-index: $zindexDropdown + $zindexModal; }
 7 |   .dropdown.open { *z-index: $zindexDropdown + $zindexModal; }
 8 |   .popover       {  z-index: $zindexPopover  + $zindexModal; }
 9 |   .tooltip       {  z-index: $zindexTooltip  + $zindexModal; }
10 | }
11 | 
12 | // Background
13 | .modal-backdrop {
14 |   position: fixed;
15 |   top: 0;
16 |   right: 0;
17 |   bottom: 0;
18 |   left: 0;
19 |   z-index: $zindexModalBackdrop;
20 |   background-color: $black;
21 |   // Fade for backdrop
22 |   &.fade { opacity: 0; }
23 | }
24 | 
25 | .modal-backdrop, .modal-backdrop.fade.in {
26 |   @include opacity(0.8);
27 | }
28 | 
29 | // Base modal
30 | .modal {
31 |   position: fixed;
32 |   top: 50%;
33 |   left: 50%;
34 |   z-index: $zindexModal;
35 |   max-height: 500px;
36 |   overflow: auto;
37 |   width: 560px;
38 |   margin: -250px 0 0 -280px;
39 |   background-color: $white;
40 |   border: 1px solid #999;
41 |   border: 1px solid rgba(0,0,0,.3);
42 |   *border: 1px solid #999; /* IE6-7 */
43 |   @include border-radius(6px);
44 |   @include box-shadow(0 3px 7px rgba(0,0,0,0.3));
45 |   @include background-clip(padding-box);
46 |   &.fade {
47 |     $transition: opacity .3s linear, top .3s ease-out;
48 |     @include transition($transition);
49 |     top: -25%;
50 |   }
51 |   &.fade.in { top: 50%; }
52 | }
53 | .modal-header {
54 |   padding: 9px 15px;
55 |   border-bottom: 1px solid #eee;
56 |   // Close icon
57 |   .close { margin-top: 2px; }
58 | }
59 | 
60 | // Body (where all modal content resides)
61 | .modal-body {
62 |   padding: 15px;
63 | }
64 | // Remove bottom margin if need be
65 | .modal-body .modal-form {
66 |   margin-bottom: 0;
67 | }
68 | 
69 | // Footer (for actions)
70 | .modal-footer {
71 |   padding: 14px 15px 15px;
72 |   margin-bottom: 0;
73 |   background-color: #f5f5f5;
74 |   border-top: 1px solid #ddd;
75 |   @include border-radius(0 0 6px 6px);
76 |   @include box-shadow(inset 0 1px 0 $white);
77 |   @include clearfix();
78 |   .btn {
79 |     float: right;
80 |     margin-left: 5px;
81 |     margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
82 |   }
83 | }
84 | 


--------------------------------------------------------------------------------
/vendor/assets/stylesheets/bootstrap/_progress-bars.scss:
--------------------------------------------------------------------------------
 1 | // PROGRESS BARS
 2 | // -------------
 3 | 
 4 | 
 5 | // ANIMATIONS
 6 | // ----------
 7 | 
 8 | // Webkit
 9 | @-webkit-keyframes progress-bar-stripes {
10 |   from  { background-position: 0 0; }
11 |   to    { background-position: 40px 0; }
12 | }
13 | 
14 | // Firefox
15 | @-moz-keyframes progress-bar-stripes {
16 |   from  { background-position: 0 0; }
17 |   to    { background-position: 40px 0; }
18 | }
19 | 
20 | // Spec
21 | @keyframes progress-bar-stripes {
22 |   from  { background-position: 0 0; }
23 |   to    { background-position: 40px 0; }
24 | }
25 | 
26 | 
27 | 
28 | // THE BARS
29 | // --------
30 | 
31 | // Outer container
32 | .progress {
33 |   overflow: hidden;
34 |   height: 18px;
35 |   margin-bottom: 18px;
36 |   @include gradient-vertical(#f5f5f5, #f9f9f9);
37 |   @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
38 |   @include border-radius(4px);
39 | }
40 | 
41 | // Bar of progress
42 | .progress .bar {
43 |   width: 0%;
44 |   height: 18px;
45 |   color: $white;
46 |   font-size: 12px;
47 |   text-align: center;
48 |   text-shadow: 0 -1px 0 rgba(0,0,0,.25);
49 |   @include gradient-vertical(#149bdf, #0480be);
50 |   @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
51 |   @include box-sizing(border-box);
52 |   @include transition(width .6s ease);
53 | }
54 | 
55 | // Striped bars
56 | .progress-striped .bar {
57 |   @include gradient-striped(#62c462);
58 |   @include background-size(40px 40px);
59 | }
60 | 
61 | // Call animation for the active one
62 | .progress.active .bar {
63 |   -webkit-animation: progress-bar-stripes 2s linear infinite;
64 |      -moz-animation: progress-bar-stripes 2s linear infinite;
65 |           animation: progress-bar-stripes 2s linear infinite;
66 | }
67 | 
68 | 
69 | 
70 | // COLORS
71 | // ------
72 | 
73 | // Danger (red)
74 | .progress-danger .bar {
75 |   @include gradient-vertical(#ee5f5b, #c43c35);
76 | }
77 | .progress-danger.progress-striped .bar {
78 |   @include gradient-striped(#ee5f5b);
79 | }
80 | 
81 | // Success (green)
82 | .progress-success .bar {
83 |   @include gradient-vertical(#62c462, #57a957);
84 | }
85 | .progress-success.progress-striped .bar {
86 |   @include gradient-striped(#62c462);
87 | }
88 | 
89 | // Info (teal)
90 | .progress-info .bar {
91 |   @include gradient-vertical(#5bc0de, #339bb9);
92 | }
93 | .progress-info.progress-striped .bar {
94 |   @include gradient-striped(#5bc0de);
95 | }


--------------------------------------------------------------------------------
/vendor/assets/stylesheets/bootstrap/_carousel.scss:
--------------------------------------------------------------------------------
  1 | // CAROUSEL
  2 | // --------
  3 | 
  4 | .carousel {
  5 |   position: relative;
  6 |   margin-bottom: $baseLineHeight;
  7 |   line-height: 1;
  8 | }
  9 | 
 10 | .carousel-inner {
 11 |   overflow: hidden;
 12 |   width: 100%;
 13 |   position: relative;
 14 | }
 15 | 
 16 | .carousel {
 17 | 
 18 |   .item {
 19 |     display: none;
 20 |     position: relative;
 21 |     @include transition(.6s ease-in-out left);
 22 |   }
 23 | 
 24 |   // Account for jankitude on images
 25 |   .item > img {
 26 |     display: block;
 27 |     line-height: 1;
 28 |   }
 29 | 
 30 |   .active, .next, .prev { display: block; }
 31 | 
 32 |   .active {
 33 |     left: 0;
 34 |   }
 35 | 
 36 |   .next, .prev {
 37 |     position: absolute;
 38 |     top: 0;
 39 |     width: 100%;
 40 |   }
 41 | 
 42 |   .next {
 43 |     left: 100%;
 44 |   }
 45 |   .prev {
 46 |     left: -100%;
 47 |   }
 48 |   .next.left, .prev.right {
 49 |     left: 0;
 50 |   }
 51 | 
 52 |   .active.left {
 53 |     left: -100%;
 54 |   }
 55 |   .active.right {
 56 |     left: 100%;
 57 |   }
 58 | 
 59 | }
 60 | 
 61 | // Left/right controls for nav
 62 | // ---------------------------
 63 | 
 64 | .carousel-control {
 65 |   position: absolute;
 66 |   top: 40%;
 67 |   left: 15px;
 68 |   width: 40px;
 69 |   height: 40px;
 70 |   margin-top: -20px;
 71 |   font-size: 60px;
 72 |   font-weight: 100;
 73 |   line-height: 30px;
 74 |   color: $white;
 75 |   text-align: center;
 76 |   background: $grayDarker;
 77 |   border: 3px solid $white;
 78 |   @include border-radius(23px);
 79 |   @include opacity(0.5);
 80 | 
 81 |   // we can't have this transition here
 82 |   // because webkit cancels the carousel
 83 |   // animation if you trip this while
 84 |   // in the middle of another animation
 85 |   // ;_;
 86 |   // @include transition(opacity .2s linear);
 87 | 
 88 |   // Reposition the right one
 89 |   &.right {
 90 |     left: auto;
 91 |     right: 15px;
 92 |   }
 93 | 
 94 |   // Hover state
 95 |   &:hover {
 96 |     color: $white;
 97 |     text-decoration: none;
 98 |     @include opacity(0.9);
 99 |   }
100 | }
101 | 
102 | // Caption for text below images
103 | // -----------------------------
104 | 
105 | .carousel-caption {
106 |   position: absolute;
107 |   left: 0;
108 |   right: 0;
109 |   bottom: 0;
110 |   padding: 10px 15px 5px;
111 |   background: $grayDark;
112 |   background: rgba(0,0,0,.75);
113 | }
114 | .carousel-caption h4, .carousel-caption p {
115 |   color: $white;
116 | }
117 | 


--------------------------------------------------------------------------------
/vendor/assets/javascripts/bootstrap-alert.js:
--------------------------------------------------------------------------------
 1 | /* ==========================================================
 2 |  * bootstrap-alert.js v2.0.1
 3 |  * http://twitter.github.com/bootstrap/javascript.html#alerts
 4 |  * ==========================================================
 5 |  * Copyright 2012 Twitter, Inc.
 6 |  *
 7 |  * Licensed under the Apache License, Version 2.0 (the "License");
 8 |  * you may not use this file except in compliance with the License.
 9 |  * You may obtain a copy of the License at
10 |  *
11 |  * http://www.apache.org/licenses/LICENSE-2.0
12 |  *
13 |  * Unless required by applicable law or agreed to in writing, software
14 |  * distributed under the License is distributed on an "AS IS" BASIS,
15 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 |  * See the License for the specific language governing permissions and
17 |  * limitations under the License.
18 |  * ========================================================== */
19 | 
20 | 
21 | !function( $ ){
22 | 
23 |   "use strict"
24 | 
25 |  /* ALERT CLASS DEFINITION
26 |   * ====================== */
27 | 
28 |   var dismiss = '[data-dismiss="alert"]'
29 |     , Alert = function ( el ) {
30 |         $(el).on('click', dismiss, this.close)
31 |       }
32 | 
33 |   Alert.prototype = {
34 | 
35 |     constructor: Alert
36 | 
37 |   , close: function ( e ) {
38 |       var $this = $(this)
39 |         , selector = $this.attr('data-target')
40 |         , $parent
41 | 
42 |       if (!selector) {
43 |         selector = $this.attr('href')
44 |         selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
45 |       }
46 | 
47 |       $parent = $(selector)
48 |       $parent.trigger('close')
49 | 
50 |       e && e.preventDefault()
51 | 
52 |       $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
53 | 
54 |       $parent
55 |         .trigger('close')
56 |         .removeClass('in')
57 | 
58 |       function removeElement() {
59 |         $parent
60 |           .trigger('closed')
61 |           .remove()
62 |       }
63 | 
64 |       $.support.transition && $parent.hasClass('fade') ?
65 |         $parent.on($.support.transition.end, removeElement) :
66 |         removeElement()
67 |     }
68 | 
69 |   }
70 | 
71 | 
72 |  /* ALERT PLUGIN DEFINITION
73 |   * ======================= */
74 | 
75 |   $.fn.alert = function ( option ) {
76 |     return this.each(function () {
77 |       var $this = $(this)
78 |         , data = $this.data('alert')
79 |       if (!data) $this.data('alert', (data = new Alert(this)))
80 |       if (typeof option == 'string') data[option].call($this)
81 |     })
82 |   }
83 | 
84 |   $.fn.alert.Constructor = Alert
85 | 
86 | 
87 |  /* ALERT DATA-API
88 |   * ============== */
89 | 
90 |   $(function () {
91 |     $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
92 |   })
93 | 
94 | }( window.jQuery );


--------------------------------------------------------------------------------
/vendor/assets/javascripts/bootstrap-dropdown.js:
--------------------------------------------------------------------------------
 1 | /* ============================================================
 2 |  * bootstrap-dropdown.js v2.0.1
 3 |  * http://twitter.github.com/bootstrap/javascript.html#dropdowns
 4 |  * ============================================================
 5 |  * Copyright 2012 Twitter, Inc.
 6 |  *
 7 |  * Licensed under the Apache License, Version 2.0 (the "License");
 8 |  * you may not use this file except in compliance with the License.
 9 |  * You may obtain a copy of the License at
10 |  *
11 |  * http://www.apache.org/licenses/LICENSE-2.0
12 |  *
13 |  * Unless required by applicable law or agreed to in writing, software
14 |  * distributed under the License is distributed on an "AS IS" BASIS,
15 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 |  * See the License for the specific language governing permissions and
17 |  * limitations under the License.
18 |  * ============================================================ */
19 | 
20 | 
21 | !function( $ ){
22 | 
23 |   "use strict"
24 | 
25 |  /* DROPDOWN CLASS DEFINITION
26 |   * ========================= */
27 | 
28 |   var toggle = '[data-toggle="dropdown"]'
29 |     , Dropdown = function ( element ) {
30 |         var $el = $(element).on('click.dropdown.data-api', this.toggle)
31 |         $('html').on('click.dropdown.data-api', function () {
32 |           $el.parent().removeClass('open')
33 |         })
34 |       }
35 | 
36 |   Dropdown.prototype = {
37 | 
38 |     constructor: Dropdown
39 | 
40 |   , toggle: function ( e ) {
41 |       var $this = $(this)
42 |         , selector = $this.attr('data-target')
43 |         , $parent
44 |         , isActive
45 | 
46 |       if (!selector) {
47 |         selector = $this.attr('href')
48 |         selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
49 |       }
50 | 
51 |       $parent = $(selector)
52 |       $parent.length || ($parent = $this.parent())
53 | 
54 |       isActive = $parent.hasClass('open')
55 | 
56 |       clearMenus()
57 |       !isActive && $parent.toggleClass('open')
58 | 
59 |       return false
60 |     }
61 | 
62 |   }
63 | 
64 |   function clearMenus() {
65 |     $(toggle).parent().removeClass('open')
66 |   }
67 | 
68 | 
69 |   /* DROPDOWN PLUGIN DEFINITION
70 |    * ========================== */
71 | 
72 |   $.fn.dropdown = function ( option ) {
73 |     return this.each(function () {
74 |       var $this = $(this)
75 |         , data = $this.data('dropdown')
76 |       if (!data) $this.data('dropdown', (data = new Dropdown(this)))
77 |       if (typeof option == 'string') data[option].call($this)
78 |     })
79 |   }
80 | 
81 |   $.fn.dropdown.Constructor = Dropdown
82 | 
83 | 
84 |   /* APPLY TO STANDARD DROPDOWN ELEMENTS
85 |    * =================================== */
86 | 
87 |   $(function () {
88 |     $('html').on('click.dropdown.data-api', clearMenus)
89 |     $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
90 |   })
91 | 
92 | }( window.jQuery );


--------------------------------------------------------------------------------
/vendor/assets/stylesheets/bootstrap/_reset.scss:
--------------------------------------------------------------------------------
  1 | // Reset.css.scss
  2 | // Adapted from Normalize.css http://github.com/necolas/normalize.css
  3 | // ------------------------------------------------------------------------
  4 | 
  5 | // Display in IE6-9 and FF3
  6 | // -------------------------
  7 | 
  8 | article, aside, details, figcaption, figure, footer, header, hgroup, nav, section {
  9 |   display: block;
 10 | }
 11 | 
 12 | // Display block in IE6-9 and FF3
 13 | // -------------------------
 14 | 
 15 | audio, canvas, video {
 16 |   display: inline-block;
 17 |   *display: inline;
 18 |   *zoom: 1;
 19 | }
 20 | 
 21 | // Prevents modern browsers from displaying 'audio' without controls
 22 | // -------------------------
 23 | 
 24 | audio:not([controls]) {
 25 |     display: none;
 26 | }
 27 | 
 28 | // Base settings
 29 | // -------------------------
 30 | 
 31 | html {
 32 |   font-size: 100%;
 33 |   -webkit-text-size-adjust: 100%;
 34 |       -ms-text-size-adjust: 100%;
 35 | }
 36 | // Focus states
 37 | a:focus {
 38 |   @include tab-focus();
 39 | }
 40 | // Hover & Active
 41 | a:hover, a:active {
 42 |   outline: 0;
 43 | }
 44 | 
 45 | // Prevents sub and sup affecting line-height in all browsers
 46 | // -------------------------
 47 | 
 48 | sub, sup {
 49 |   position: relative;
 50 |   font-size: 75%;
 51 |   line-height: 0;
 52 |   vertical-align: baseline;
 53 | }
 54 | sup {
 55 |   top: -0.5em;
 56 | }
 57 | sub {
 58 |   bottom: -0.25em;
 59 | }
 60 | 
 61 | // Img border in a's and image quality
 62 | // -------------------------
 63 | 
 64 | img {
 65 |   max-width: 100%;
 66 |   height: auto;
 67 |   border: 0;
 68 |   -ms-interpolation-mode: bicubic;
 69 | }
 70 | 
 71 | // Forms
 72 | // -------------------------
 73 | 
 74 | // Font size in all browsers, margin changes, misc consistency
 75 | button, input, select, textarea {
 76 |   margin: 0;
 77 |   font-size: 100%;
 78 |   vertical-align: middle;
 79 | }
 80 | button, input {
 81 |   *overflow: visible; // Inner spacing ie IE6/7
 82 |   line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
 83 | }
 84 | button::-moz-focus-inner, input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
 85 |   padding: 0;
 86 |   border: 0;
 87 | }
 88 | button, input[type="button"], input[type="reset"], input[type="submit"] {
 89 |   cursor: pointer; // Cursors on all buttons applied consistently
 90 |   -webkit-appearance: button; // Style clickable inputs in iOS
 91 | }
 92 | input[type="search"] { // Appearance in Safari/Chrome
 93 |   -webkit-appearance: textfield;
 94 |   -webkit-box-sizing: content-box;
 95 |      -moz-box-sizing: content-box;
 96 |           box-sizing: content-box;
 97 | }
 98 | input[type="search"]::-webkit-search-decoration,
 99 | input[type="search"]::-webkit-search-cancel-button {
100 |   -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
101 | }
102 | textarea {
103 |   overflow: auto; // Remove vertical scrollbar in IE6-9
104 |   vertical-align: top; // Readability and alignment cross-browser
105 | }


--------------------------------------------------------------------------------
/vendor/assets/javascripts/bootstrap-button.js:
--------------------------------------------------------------------------------
 1 | /* ============================================================
 2 |  * bootstrap-button.js v2.0.1
 3 |  * http://twitter.github.com/bootstrap/javascript.html#buttons
 4 |  * ============================================================
 5 |  * Copyright 2012 Twitter, Inc.
 6 |  *
 7 |  * Licensed under the Apache License, Version 2.0 (the "License");
 8 |  * you may not use this file except in compliance with the License.
 9 |  * You may obtain a copy of the License at
10 |  *
11 |  * http://www.apache.org/licenses/LICENSE-2.0
12 |  *
13 |  * Unless required by applicable law or agreed to in writing, software
14 |  * distributed under the License is distributed on an "AS IS" BASIS,
15 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 |  * See the License for the specific language governing permissions and
17 |  * limitations under the License.
18 |  * ============================================================ */
19 | 
20 | !function( $ ){
21 | 
22 |   "use strict"
23 | 
24 |  /* BUTTON PUBLIC CLASS DEFINITION
25 |   * ============================== */
26 | 
27 |   var Button = function ( element, options ) {
28 |     this.$element = $(element)
29 |     this.options = $.extend({}, $.fn.button.defaults, options)
30 |   }
31 | 
32 |   Button.prototype = {
33 | 
34 |       constructor: Button
35 | 
36 |     , setState: function ( state ) {
37 |         var d = 'disabled'
38 |           , $el = this.$element
39 |           , data = $el.data()
40 |           , val = $el.is('input') ? 'val' : 'html'
41 | 
42 |         state = state + 'Text'
43 |         data.resetText || $el.data('resetText', $el[val]())
44 | 
45 |         $el[val](data[state] || this.options[state])
46 | 
47 |         // push to event loop to allow forms to submit
48 |         setTimeout(function () {
49 |           state == 'loadingText' ?
50 |             $el.addClass(d).attr(d, d) :
51 |             $el.removeClass(d).removeAttr(d)
52 |         }, 0)
53 |       }
54 | 
55 |     , toggle: function () {
56 |         var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
57 | 
58 |         $parent && $parent
59 |           .find('.active')
60 |           .removeClass('active')
61 | 
62 |         this.$element.toggleClass('active')
63 |       }
64 | 
65 |   }
66 | 
67 | 
68 |  /* BUTTON PLUGIN DEFINITION
69 |   * ======================== */
70 | 
71 |   $.fn.button = function ( option ) {
72 |     return this.each(function () {
73 |       var $this = $(this)
74 |         , data = $this.data('button')
75 |         , options = typeof option == 'object' && option
76 |       if (!data) $this.data('button', (data = new Button(this, options)))
77 |       if (option == 'toggle') data.toggle()
78 |       else if (option) data.setState(option)
79 |     })
80 |   }
81 | 
82 |   $.fn.button.defaults = {
83 |     loadingText: 'loading...'
84 |   }
85 | 
86 |   $.fn.button.Constructor = Button
87 | 
88 | 
89 |  /* BUTTON DATA-API
90 |   * =============== */
91 | 
92 |   $(function () {
93 |     $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
94 |       $(e.currentTarget).button('toggle')
95 |     })
96 |   })
97 | 
98 | }( window.jQuery );


--------------------------------------------------------------------------------
/vendor/assets/javascripts/bootstrap-popover.js:
--------------------------------------------------------------------------------
 1 | /* ===========================================================
 2 |  * bootstrap-popover.js v2.0.1
 3 |  * http://twitter.github.com/bootstrap/javascript.html#popovers
 4 |  * ===========================================================
 5 |  * Copyright 2012 Twitter, Inc.
 6 |  *
 7 |  * Licensed under the Apache License, Version 2.0 (the "License");
 8 |  * you may not use this file except in compliance with the License.
 9 |  * You may obtain a copy of the License at
10 |  *
11 |  * http://www.apache.org/licenses/LICENSE-2.0
12 |  *
13 |  * Unless required by applicable law or agreed to in writing, software
14 |  * distributed under the License is distributed on an "AS IS" BASIS,
15 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 |  * See the License for the specific language governing permissions and
17 |  * limitations under the License.
18 |  * =========================================================== */
19 | 
20 | 
21 | !function( $ ) {
22 | 
23 |  "use strict"
24 | 
25 |   var Popover = function ( element, options ) {
26 |     this.init('popover', element, options)
27 |   }
28 | 
29 |   /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
30 |      ========================================== */
31 | 
32 |   Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
33 | 
34 |     constructor: Popover
35 | 
36 |   , setContent: function () {
37 |       var $tip = this.tip()
38 |         , title = this.getTitle()
39 |         , content = this.getContent()
40 | 
41 |       $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
42 |       $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
43 | 
44 |       $tip.removeClass('fade top bottom left right in')
45 |     }
46 | 
47 |   , hasContent: function () {
48 |       return this.getTitle() || this.getContent()
49 |     }
50 | 
51 |   , getContent: function () {
52 |       var content
53 |         , $e = this.$element
54 |         , o = this.options
55 | 
56 |       content = $e.attr('data-content')
57 |         || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
58 | 
59 |       content = content.toString().replace(/(^\s*|\s*$)/, "")
60 | 
61 |       return content
62 |     }
63 | 
64 |   , tip: function() {
65 |       if (!this.$tip) {
66 |         this.$tip = $(this.options.template)
67 |       }
68 |       return this.$tip
69 |     }
70 | 
71 |   })
72 | 
73 | 
74 |  /* POPOVER PLUGIN DEFINITION
75 |   * ======================= */
76 | 
77 |   $.fn.popover = function ( option ) {
78 |     return this.each(function () {
79 |       var $this = $(this)
80 |         , data = $this.data('popover')
81 |         , options = typeof option == 'object' && option
82 |       if (!data) $this.data('popover', (data = new Popover(this, options)))
83 |       if (typeof option == 'string') data[option]()
84 |     })
85 |   }
86 | 
87 |   $.fn.popover.Constructor = Popover
88 | 
89 |   $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
90 |     placement: 'right'
91 |   , content: ''
92 |   , template: '

' 93 | }) 94 | 95 | }( window.jQuery ); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap for SASS 2 | 3 | `bootstrap-sass` is an SASS-powered version of [Twitter's Bootstrap](http://github.com/twitter/bootstrap), ready to drop right into your SASS powered applications. 4 | 5 | Enjoy. 6 | 7 | ## Updating 8 | Updating your application to a new version of `bootstrap-sass`? See [our changelog](https://github.com/thomas-mcdonald/bootstrap-sass/blob/master/CHANGELOG.md), [Bootstrap's changelog](https://github.com/twitter/bootstrap/wiki/Changelog), and this [guide to updating to Bootstrap 2.0](http://twitter.github.com/bootstrap/upgrading.html) 9 | 10 | ## Usage 11 | 12 | ### Rails 13 | 14 | In your Gemfile: 15 | 16 | gem 'sass-rails', '~> 3.1' 17 | gem 'bootstrap-sass', '~> 2.0.1' 18 | 19 | **Note**: previous versions of bootstrap-sass automatically required sass-rails. This is no longer the case, and you will *need* to require it in your Gemfile. 20 | 21 | #### CSS 22 | 23 | Import "bootstrap" in your SCSS file of choice to get all of Bootstrap's styles, mixins and variables! Don't use Sproket's `//= require` directives for SASS files, because they're horrible and will kill your cat. 24 | 25 | @import "bootstrap"; 26 | 27 | Need to configure a variable or two? Simple define the value of the variable you want to change *before* importing Bootstrap. SASS will be awesome and respect your existing definition rather than overwriting it with the Bootstrap defaults. A list of customisable variables can be found in the [Bootstrap documentation](http://twitter.github.com/bootstrap/less.html#variables). 28 | 29 | $primaryButtonBackground: #f00; 30 | @import "bootstrap"; 31 | 32 | #### Javascripts 33 | 34 | You can include the Bootstrap javascripts through two methods. In this case, Sproket's `//= require` directives are useful and will not cause feline death. 35 | 36 | We have a helper that includes all available javascripts: 37 | 38 | // Loads all Bootstrap javascripts 39 | //= require bootstrap 40 | 41 | You can also load individual modules, provided you sort out any related dependencies. 42 | 43 | //= require bootstrap-scrollspy 44 | //= require bootstrap-modal 45 | //= require bootstrap-dropdown 46 | 47 | Simples. 48 | 49 | ### Compass 50 | 51 | `bootstrap-sass` 2.0 now comes with support for Compass, meaning projects that don't use Rails can get in on the fun Bootstrap web. 52 | 53 | #### New project 54 | 55 | Install the gem and create a new project using the gem. 56 | 57 | gem install bootstrap-sass 58 | compass create compass-test -r bootstrap-sass --using bootstrap 59 | 60 | This will sort a few things out: 61 | 62 | * You'll get a starting `styles.scss` ready for your alterations 63 | * You'll get a compiled stylesheet compiled & ready to drop into your application 64 | * We'll also copy the Bootstrap javascripts & images into their respective folders for you, absolutely free of charge! How cool is that? 65 | 66 | #### Existing project 67 | 68 | Install the gem, add the require statement to the top of your configuration file, and install the extension. 69 | 70 | gem install bootstrap-sass 71 | 72 | # In config.rb 73 | require 'bootstrap-sass' 74 | 75 | compass install bootstrap 76 | 77 | You'll get the same benefits as those starting from scratch. Radical. 78 | 79 | ---- 80 | 81 | As per the Bootstrap project we don't include the responsive styles by default. `@import "bootstrap-responsive";` to get them. 82 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_tables.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Tables.less 3 | // Tables for, you guessed it, tabular data 4 | // ---------------------------------------- 5 | 6 | 7 | // BASE TABLES 8 | // ----------------- 9 | 10 | table { 11 | max-width: 100%; 12 | border-collapse: collapse; 13 | border-spacing: 0; 14 | } 15 | 16 | // BASELINE STYLES 17 | // --------------- 18 | 19 | .table { 20 | width: 100%; 21 | margin-bottom: $baseLineHeight; 22 | // Cells 23 | th, td { 24 | padding: 8px; 25 | line-height: $baseLineHeight; 26 | text-align: left; 27 | vertical-align: top; 28 | border-top: 1px solid #ddd; 29 | } 30 | th { 31 | font-weight: bold; 32 | } 33 | // Bottom align for column headings 34 | thead th { 35 | vertical-align: bottom; 36 | } 37 | // Remove top border from thead by default 38 | thead:first-child tr th, thead:first-child tr td { 39 | border-top: 0; 40 | } 41 | // Account for multiple tbody instances 42 | tbody + tbody { 43 | border-top: 2px solid #ddd; 44 | } 45 | } 46 | 47 | 48 | 49 | // CONDENSED TABLE W/ HALF PADDING 50 | // ------------------------------- 51 | 52 | .table-condensed { 53 | th, td { 54 | padding: 4px 5px; 55 | } 56 | } 57 | 58 | 59 | // BORDERED VERSION 60 | // ---------------- 61 | 62 | .table-bordered { 63 | border: 1px solid #ddd; 64 | border-collapse: separate; // Done so we can round those corners! 65 | *border-collapse: collapsed; // IE7 can't round corners anyway 66 | @include border-radius(4px); 67 | th + th, td + td, th + td, td + th { 68 | border-left: 1px solid #ddd; 69 | } 70 | // Prevent a double border 71 | thead:first-child tr:first-child th, tbody:first-child tr:first-child th, tbody:first-child tr:first-child td { 72 | border-top: 0; 73 | } 74 | // For first th or td in the first row in the first thead or tbody 75 | thead:first-child tr:first-child th:first-child, tbody:first-child tr:first-child td:first-child { 76 | @include border-radius(4px 0 0 0); 77 | } 78 | thead:first-child tr:first-child th:last-child, tbody:first-child tr:first-child td:last-child { 79 | @include border-radius(0 4px 0 0); 80 | } 81 | // For first th or td in the first row in the first thead or tbody 82 | thead:last-child tr:last-child th:first-child, tbody:last-child tr:last-child td:first-child { 83 | @include border-radius(0 0 0 4px); 84 | } 85 | thead:last-child tr:last-child th:last-child, tbody:last-child tr:last-child td:last-child { 86 | @include border-radius(0 0 4px 0); 87 | } 88 | } 89 | 90 | 91 | // ZEBRA-STRIPING 92 | // -------------- 93 | 94 | // Default zebra-stripe styles (alternating gray and transparent backgrounds) 95 | .table-striped { 96 | tbody { 97 | tr:nth-child(odd) td, tr:nth-child(odd) th { 98 | background-color: #f9f9f9; 99 | } 100 | } 101 | } 102 | 103 | 104 | // HOVER EFFECT 105 | // ------------ 106 | // Placed here since it has to come after the potential zebra striping 107 | .table { 108 | tbody tr:hover td, tbody tr:hover th { 109 | background-color: #f5f5f5; 110 | } 111 | } 112 | 113 | // TABLE CELL SIZING 114 | // ----------------- 115 | 116 | // Change the columns 117 | @mixin tableColumns($columnSpan: 1) { 118 | float: none; 119 | width: (($gridColumnWidth) * $columnSpan) + ($gridGutterWidth * ($columnSpan - 1)) - 16; 120 | margin-left: 0; 121 | } 122 | table { 123 | @for $i from 1 through $gridColumns { 124 | .span#{$i} { @include tableColumns($i); } 125 | } 126 | } -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_dropdowns.scss: -------------------------------------------------------------------------------- 1 | // DROPDOWN MENUS 2 | // -------------- 3 | 4 | // Use the .menu class on any
  • element within the topbar or ul.tabs and you'll get some superfancy dropdowns 5 | .dropdown { 6 | position: relative; 7 | } 8 | .dropdown-toggle { 9 | // The caret makes the toggle a bit too tall in IE7 10 | *margin-bottom: -3px; 11 | } 12 | .dropdown-toggle:active, .open .dropdown-toggle { 13 | outline: 0; 14 | } 15 | // Dropdown arrow/caret 16 | .caret { 17 | display: inline-block; 18 | width: 0; 19 | height: 0; 20 | text-indent: -99999px; 21 | // IE7 won't do the border trick if there's a text indent, but it doesn't 22 | // do the content that text-indent is hiding, either, so we're ok. 23 | *text-indent: 0; 24 | vertical-align: top; 25 | border-left: 4px solid transparent; 26 | border-right: 4px solid transparent; 27 | border-top: 4px solid $black; 28 | @include opacity(0.3); 29 | content: "\2193"; 30 | } 31 | .dropdown .caret { 32 | margin-top: 8px; 33 | margin-left: 2px; 34 | } 35 | .dropdown:hover .caret, .open.dropdown .caret { 36 | @include opacity(1); 37 | } 38 | // The dropdown menu (ul) 39 | .dropdown-menu { 40 | position: absolute; 41 | top: 100%; 42 | left: 0; 43 | z-index: $zindexDropdown; 44 | float: left; 45 | display: none; // none by default, but block on "open" of the menu 46 | min-width: 160px; 47 | _width: 160px; 48 | padding: 4px 0; 49 | margin: 0; // override default ul 50 | list-style: none; 51 | background-color: $white; 52 | border-color: #ccc; 53 | border-color: rgba(0,0,0,.2); 54 | border-style: solid; 55 | border-width: 1px; 56 | @include border-radius(0 0 5px 5px); 57 | @include box-shadow(0 5px 10px rgba(0,0,0,.2)); 58 | -webkit-background-clip: padding-box; 59 | -moz-background-clip: padding; 60 | background-clip: padding-box; 61 | *border-right-width: 2px; 62 | *border-bottom-width: 2px; 63 | 64 | // Allow for dropdowns to go bottom up (aka, dropup-menu) 65 | &.bottom-up { 66 | top: auto; 67 | bottom: 100%; 68 | margin-bottom: 2px; 69 | } 70 | 71 | // Dividers (basically an hr) within the dropdown 72 | .divider { 73 | height: 1px; 74 | margin: 5px 1px; 75 | overflow: hidden; 76 | background-color: #e5e5e5; 77 | border-bottom: 1px solid $white; 78 | 79 | // IE7 needs a set width since we gave a height. Restricting just 80 | // to IE7 to keep the 1px left/right space in other browsers. 81 | // It is unclear where IE is getting the extra space that we need 82 | // to negative-margin away, but so it goes. 83 | *width: 100%; 84 | *margin: -5px 0 5px; 85 | } 86 | 87 | // Links within the dropdown menu 88 | a { 89 | display: block; 90 | padding: 3px 15px; 91 | clear: both; 92 | font-weight: normal; 93 | line-height: $baseLineHeight; 94 | color: $gray; 95 | white-space: nowrap; 96 | } 97 | } 98 | 99 | // Hover state 100 | .dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover { 101 | color: $white; 102 | text-decoration: none; 103 | background-color: $linkColor; 104 | } 105 | 106 | // Open state for the dropdown 107 | .dropdown.open { 108 | // IE7's z-index only goes to the nearest positioned ancestor, which would 109 | // make the menu appear below buttons that appeared later on the page 110 | *z-index: $zindexDropdown; 111 | 112 | .dropdown-toggle { 113 | color: $white; 114 | background: #ccc; 115 | background: rgba(0,0,0,.3); 116 | } 117 | .dropdown-menu { 118 | display: block; 119 | } 120 | } 121 | 122 | // Typeahead 123 | .typeahead { 124 | margin-top: 2px; // give it some space to breathe 125 | @include border-radius(4px); 126 | } 127 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables.less 2 | // Variables to customize the look and feel of Bootstrap 3 | // ----------------------------------------------------- 4 | 5 | 6 | 7 | // GLOBAL VALUES 8 | // -------------------------------------------------- 9 | 10 | // Links 11 | $linkColor: #08c !default; 12 | $linkColorHover: darken($linkColor, 15%) !default; 13 | 14 | // Grays 15 | $black: #000 !default; 16 | $grayDarker: #222 !default; 17 | $grayDark: #333 !default; 18 | $gray: #555 !default; 19 | $grayLight: #999 !default; 20 | $grayLighter: #eee !default; 21 | $white: #fff !default; 22 | 23 | // Accent colors 24 | $blue: #049cdb !default; 25 | $blueDark: #0064cd !default; 26 | $green: #46a546 !default; 27 | $red: #9d261d !default; 28 | $yellow: #ffc40d !default; 29 | $orange: #f89406 !default; 30 | $pink: #c3325f !default; 31 | $purple: #7a43b6 !default; 32 | 33 | // Typography 34 | $baseFontSize: 13px !default; 35 | $baseFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif !default; 36 | $baseLineHeight: 18px !default; 37 | $textColor: $grayDark !default; 38 | 39 | // Buttons 40 | $primaryButtonBackground: $linkColor !default; 41 | 42 | 43 | 44 | // COMPONENT VARIABLES 45 | // -------------------------------------------------- 46 | 47 | // Z-index master list 48 | // Used for a bird's eye view of components dependent on the z-axis 49 | // Try to avoid customizing these :) 50 | $zindexDropdown: 1000; 51 | $zindexPopover: 1010; 52 | $zindexTooltip: 1020; 53 | $zindexFixedNavbar: 1030; 54 | $zindexModalBackdrop: 1040; 55 | $zindexModal: 1050; 56 | 57 | // Input placeholder text color 58 | $placeholderText: $grayLight !default; 59 | 60 | // HR border color 61 | $hrBorder: $grayLighter !default; 62 | 63 | // Navbar 64 | $navbarHeight: 40px !default; 65 | $navbarBackground: $grayDarker !default; 66 | $navbarBackgroundHighlight: $grayDark !default; 67 | $navbarLinkBackgroundHover: transparent !default; 68 | 69 | $navbarText: $grayLight !default; 70 | $navbarLinkColor: $grayLight !default; 71 | $navbarLinkColorHover: $white !default; 72 | 73 | // Form states and alerts 74 | $warningText: #c09853 !default; 75 | $warningBackground: #fcf8e3 !default; 76 | $warningBorder: darken(adjust-hue($warningBackground, -10), 3%) !default; 77 | 78 | $errorText: #b94a48 !default; 79 | $errorBackground: #f2dede !default; 80 | $errorBorder: darken(adjust-hue($errorBackground, -10), 3%) !default; 81 | 82 | $successText: #468847 !default; 83 | $successBackground: #dff0d8 !default; 84 | $successBorder: darken(adjust-hue($successBackground, -10), 5%) !default; 85 | 86 | $infoText: #3a87ad !default; 87 | $infoBackground: #d9edf7 !default; 88 | $infoBorder: darken(adjust-hue($infoBackground, -10), 7%) !default; 89 | 90 | 91 | 92 | // GRID 93 | // -------------------------------------------------- 94 | 95 | // Default 940px grid 96 | $gridColumns: 12 !default; 97 | $gridColumnWidth: 60px !default; 98 | $gridGutterWidth: 20px !default; 99 | $gridRowWidth: ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1)) !default; 100 | 101 | // Fluid grid 102 | $fluidGridColumnWidth: 6.382978723% !default; 103 | $fluidGridGutterWidth: 2.127659574% !default; -------------------------------------------------------------------------------- /vendor/assets/javascripts/bootstrap-tab.js: -------------------------------------------------------------------------------- 1 | /* ======================================================== 2 | * bootstrap-tab.js v2.0.1 3 | * http://twitter.github.com/bootstrap/javascript.html#tabs 4 | * ======================================================== 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ======================================================== */ 19 | 20 | 21 | !function( $ ){ 22 | 23 | "use strict" 24 | 25 | /* TAB CLASS DEFINITION 26 | * ==================== */ 27 | 28 | var Tab = function ( element ) { 29 | this.element = $(element) 30 | } 31 | 32 | Tab.prototype = { 33 | 34 | constructor: Tab 35 | 36 | , show: function () { 37 | var $this = this.element 38 | , $ul = $this.closest('ul:not(.dropdown-menu)') 39 | , selector = $this.attr('data-target') 40 | , previous 41 | , $target 42 | 43 | if (!selector) { 44 | selector = $this.attr('href') 45 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 46 | } 47 | 48 | if ( $this.parent('li').hasClass('active') ) return 49 | 50 | previous = $ul.find('.active a').last()[0] 51 | 52 | $this.trigger({ 53 | type: 'show' 54 | , relatedTarget: previous 55 | }) 56 | 57 | $target = $(selector) 58 | 59 | this.activate($this.parent('li'), $ul) 60 | this.activate($target, $target.parent(), function () { 61 | $this.trigger({ 62 | type: 'shown' 63 | , relatedTarget: previous 64 | }) 65 | }) 66 | } 67 | 68 | , activate: function ( element, container, callback) { 69 | var $active = container.find('> .active') 70 | , transition = callback 71 | && $.support.transition 72 | && $active.hasClass('fade') 73 | 74 | function next() { 75 | $active 76 | .removeClass('active') 77 | .find('> .dropdown-menu > .active') 78 | .removeClass('active') 79 | 80 | element.addClass('active') 81 | 82 | if (transition) { 83 | element[0].offsetWidth // reflow for transition 84 | element.addClass('in') 85 | } else { 86 | element.removeClass('fade') 87 | } 88 | 89 | if ( element.parent('.dropdown-menu') ) { 90 | element.closest('li.dropdown').addClass('active') 91 | } 92 | 93 | callback && callback() 94 | } 95 | 96 | transition ? 97 | $active.one($.support.transition.end, next) : 98 | next() 99 | 100 | $active.removeClass('in') 101 | } 102 | } 103 | 104 | 105 | /* TAB PLUGIN DEFINITION 106 | * ===================== */ 107 | 108 | $.fn.tab = function ( option ) { 109 | return this.each(function () { 110 | var $this = $(this) 111 | , data = $this.data('tab') 112 | if (!data) $this.data('tab', (data = new Tab(this))) 113 | if (typeof option == 'string') data[option]() 114 | }) 115 | } 116 | 117 | $.fn.tab.Constructor = Tab 118 | 119 | 120 | /* TAB DATA-API 121 | * ============ */ 122 | 123 | $(function () { 124 | $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { 125 | e.preventDefault() 126 | $(this).tab('show') 127 | }) 128 | }) 129 | 130 | }( window.jQuery ); -------------------------------------------------------------------------------- /vendor/assets/javascripts/bootstrap-scrollspy.js: -------------------------------------------------------------------------------- 1 | /* ============================================================= 2 | * bootstrap-scrollspy.js v2.0.1 3 | * http://twitter.github.com/bootstrap/javascript.html#scrollspy 4 | * ============================================================= 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================== */ 19 | 20 | !function ( $ ) { 21 | 22 | "use strict" 23 | 24 | /* SCROLLSPY CLASS DEFINITION 25 | * ========================== */ 26 | 27 | function ScrollSpy( element, options) { 28 | var process = $.proxy(this.process, this) 29 | , $element = $(element).is('body') ? $(window) : $(element) 30 | , href 31 | this.options = $.extend({}, $.fn.scrollspy.defaults, options) 32 | this.$scrollElement = $element.on('scroll.scroll.data-api', process) 33 | this.selector = (this.options.target 34 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 35 | || '') + ' .nav li > a' 36 | this.$body = $('body').on('click.scroll.data-api', this.selector, process) 37 | this.refresh() 38 | this.process() 39 | } 40 | 41 | ScrollSpy.prototype = { 42 | 43 | constructor: ScrollSpy 44 | 45 | , refresh: function () { 46 | this.targets = this.$body 47 | .find(this.selector) 48 | .map(function () { 49 | var href = $(this).attr('href') 50 | return /^#\w/.test(href) && $(href).length ? href : null 51 | }) 52 | 53 | this.offsets = $.map(this.targets, function (id) { 54 | return $(id).position().top 55 | }) 56 | } 57 | 58 | , process: function () { 59 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset 60 | , offsets = this.offsets 61 | , targets = this.targets 62 | , activeTarget = this.activeTarget 63 | , i 64 | 65 | for (i = offsets.length; i--;) { 66 | activeTarget != targets[i] 67 | && scrollTop >= offsets[i] 68 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) 69 | && this.activate( targets[i] ) 70 | } 71 | } 72 | 73 | , activate: function (target) { 74 | var active 75 | 76 | this.activeTarget = target 77 | 78 | this.$body 79 | .find(this.selector).parent('.active') 80 | .removeClass('active') 81 | 82 | active = this.$body 83 | .find(this.selector + '[href="' + target + '"]') 84 | .parent('li') 85 | .addClass('active') 86 | 87 | if ( active.parent('.dropdown-menu') ) { 88 | active.closest('li.dropdown').addClass('active') 89 | } 90 | } 91 | 92 | } 93 | 94 | 95 | /* SCROLLSPY PLUGIN DEFINITION 96 | * =========================== */ 97 | 98 | $.fn.scrollspy = function ( option ) { 99 | return this.each(function () { 100 | var $this = $(this) 101 | , data = $this.data('scrollspy') 102 | , options = typeof option == 'object' && option 103 | if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) 104 | if (typeof option == 'string') data[option]() 105 | }) 106 | } 107 | 108 | $.fn.scrollspy.Constructor = ScrollSpy 109 | 110 | $.fn.scrollspy.defaults = { 111 | offset: 10 112 | } 113 | 114 | 115 | /* SCROLLSPY DATA-API 116 | * ================== */ 117 | 118 | $(function () { 119 | $('[data-spy="scroll"]').each(function () { 120 | var $spy = $(this) 121 | $spy.scrollspy($spy.data()) 122 | }) 123 | }) 124 | 125 | }( window.jQuery ); -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_button-groups.scss: -------------------------------------------------------------------------------- 1 | // BUTTON GROUPS 2 | // ------------- 3 | 4 | 5 | // Make the div behave like a button 6 | .btn-group { 7 | position: relative; 8 | @include clearfix(); // clears the floated buttons 9 | @include ie7-restore-left-whitespace(); 10 | } 11 | 12 | // Space out series of button groups 13 | .btn-group + .btn-group { 14 | margin-left: 5px; 15 | } 16 | 17 | // Optional: Group multiple button groups together for a toolbar 18 | .btn-toolbar { 19 | margin-top: $baseLineHeight / 2; 20 | margin-bottom: $baseLineHeight / 2; 21 | .btn-group { 22 | display: inline-block; 23 | @include ie7-inline-block(); 24 | } 25 | } 26 | 27 | // Float them, remove border radius, then re-add to first and last elements 28 | .btn-group .btn { 29 | position: relative; 30 | float: left; 31 | margin-left: -1px; 32 | @include border-radius(0); 33 | } 34 | // 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 35 | .btn-group .btn:first-child { 36 | margin-left: 0; 37 | -webkit-border-top-left-radius: 4px; 38 | -moz-border-radius-topleft: 4px; 39 | border-top-left-radius: 4px; 40 | -webkit-border-bottom-left-radius: 4px; 41 | -moz-border-radius-bottomleft: 4px; 42 | border-bottom-left-radius: 4px; 43 | } 44 | .btn-group .btn:last-child, .btn-group .dropdown-toggle { 45 | -webkit-border-top-right-radius: 4px; 46 | -moz-border-radius-topright: 4px; 47 | border-top-right-radius: 4px; 48 | -webkit-border-bottom-right-radius: 4px; 49 | -moz-border-radius-bottomright: 4px; 50 | border-bottom-right-radius: 4px; 51 | } 52 | // Reset corners for large buttons 53 | .btn-group .btn.large:first-child { 54 | margin-left: 0; 55 | -webkit-border-top-left-radius: 6px; 56 | -moz-border-radius-topleft: 6px; 57 | border-top-left-radius: 6px; 58 | -webkit-border-bottom-left-radius: 6px; 59 | -moz-border-radius-bottomleft: 6px; 60 | border-bottom-left-radius: 6px; 61 | } 62 | .btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { 63 | -webkit-border-top-right-radius: 6px; 64 | -moz-border-radius-topright: 6px; 65 | border-top-right-radius: 6px; 66 | -webkit-border-bottom-right-radius: 6px; 67 | -moz-border-radius-bottomright: 6px; 68 | border-bottom-right-radius: 6px; 69 | } 70 | 71 | // On hover/focus/active, bring the proper btn to front 72 | .btn-group .btn:hover, .btn-group .btn:focus, .btn-group .btn:active, .btn-group .btn.active { 73 | z-index: 2; 74 | } 75 | 76 | // On active and open, don't show outline 77 | .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { 78 | outline: 0; 79 | } 80 | 81 | 82 | 83 | // Split button dropdowns 84 | // ---------------------- 85 | 86 | // Give the line between buttons some depth 87 | .btn-group .dropdown-toggle { 88 | padding-left: 8px; 89 | padding-right: 8px; 90 | $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); 91 | @include box-shadow($shadow); 92 | *padding-top: 5px; 93 | *padding-bottom: 5px; 94 | } 95 | 96 | .btn-group.open { 97 | // IE7's z-index only goes to the nearest positioned ancestor, which would 98 | // make the menu appear below buttons that appeared later on the page 99 | *z-index: $zindexDropdown; 100 | 101 | // Reposition menu on open and round all corners 102 | .dropdown-menu { 103 | display: block; 104 | margin-top: 1px; 105 | @include border-radius(5px); 106 | } 107 | 108 | .dropdown-toggle { 109 | background-image: none; 110 | $shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); 111 | @include box-shadow($shadow); 112 | } 113 | } 114 | 115 | // Reposition the caret 116 | .btn .caret { 117 | margin-top: 7px; 118 | margin-left: 0; 119 | } 120 | .btn:hover .caret, .open.btn-group .caret { 121 | @include opacity(1); 122 | } 123 | 124 | 125 | // Account for other colors 126 | .btn-primary, .btn-danger, .btn-info, .btn-success, .btn-inverse { 127 | .caret { 128 | border-top-color: $white; 129 | @include opacity(0.75); 130 | } 131 | } 132 | 133 | // Small button dropdowns 134 | .btn-small .caret { 135 | margin-top: 4px; 136 | } 137 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_type.scss: -------------------------------------------------------------------------------- 1 | // Typography.less 2 | // Headings, body text, lists, code, and more for a versatile and durable typography system 3 | // ---------------------------------------------------------------------------------------- 4 | 5 | 6 | // BODY TEXT 7 | // --------- 8 | 9 | p { 10 | margin: 0 0 $baseLineHeight / 2; 11 | font-family: $baseFontFamily; 12 | font-size: $baseFontSize; 13 | line-height: $baseLineHeight; 14 | small { 15 | font-size: $baseFontSize - 2; 16 | color: $grayLight; 17 | } 18 | } 19 | .lead { 20 | margin-bottom: $baseLineHeight; 21 | font-size: 20px; 22 | font-weight: 200; 23 | line-height: $baseLineHeight * 1.5; 24 | } 25 | 26 | // HEADINGS 27 | // -------- 28 | 29 | h1, h2, h3, h4, h5, h6 { 30 | margin: 0; 31 | font-weight: bold; 32 | color: $grayDark; 33 | text-rendering: optimizelegibility; // Fix the character spacing for headings 34 | small { 35 | font-weight: normal; 36 | color: $grayLight; 37 | } 38 | } 39 | h1 { 40 | font-size: 30px; 41 | line-height: $baseLineHeight * 2; 42 | small { 43 | font-size: 18px; 44 | } 45 | } 46 | h2 { 47 | font-size: 24px; 48 | line-height: $baseLineHeight * 2; 49 | small { 50 | font-size: 18px; 51 | } 52 | } 53 | h3 { 54 | line-height: $baseLineHeight * 1.5; 55 | font-size: 18px; 56 | small { 57 | font-size: 14px; 58 | } 59 | } 60 | h4, h5, h6 { 61 | line-height: $baseLineHeight; 62 | } 63 | h4 { 64 | font-size: 14px; 65 | small { 66 | font-size: 12px; 67 | } 68 | } 69 | h5 { 70 | font-size: 12px; 71 | } 72 | h6 { 73 | font-size: 11px; 74 | color: $grayLight; 75 | text-transform: uppercase; 76 | } 77 | 78 | // Page header 79 | .page-header { 80 | padding-bottom: $baseLineHeight - 1; 81 | margin: $baseLineHeight 0; 82 | border-bottom: 1px solid $grayLighter; 83 | } 84 | .page-header h1 { 85 | line-height: 1; 86 | } 87 | 88 | 89 | 90 | // LISTS 91 | // ----- 92 | 93 | // Unordered and Ordered lists 94 | ul, ol { 95 | padding: 0; 96 | margin: 0 0 $baseLineHeight / 2 25px; 97 | } 98 | ul ul, ul ol, ol ol, ol ul { 99 | margin-bottom: 0; 100 | } 101 | ul { 102 | list-style: disc; 103 | } 104 | ol { 105 | list-style: decimal; 106 | } 107 | li { 108 | line-height: $baseLineHeight; 109 | } 110 | ul.unstyled, ol.unstyled { 111 | margin-left: 0; 112 | list-style: none; 113 | } 114 | 115 | // Description Lists 116 | dl { 117 | margin-bottom: $baseLineHeight; 118 | } 119 | dt, dd { 120 | line-height: $baseLineHeight; 121 | } 122 | dt { 123 | font-weight: bold; 124 | } 125 | dd { 126 | margin-left: $baseLineHeight / 2; 127 | } 128 | 129 | // MISC 130 | // ---- 131 | 132 | // Horizontal rules 133 | hr { 134 | margin: $baseLineHeight 0; 135 | border: 0; 136 | border-top: 1px solid $hrBorder; 137 | border-bottom: 1px solid $white; 138 | } 139 | 140 | // Emphasis 141 | strong { 142 | font-weight: bold; 143 | } 144 | em { 145 | font-style: italic; 146 | } 147 | .muted { 148 | color: $grayLight; 149 | } 150 | 151 | // Abbreviations and acronyms 152 | abbr { 153 | font-size: 90%; 154 | text-transform: uppercase; 155 | border-bottom: 1px dotted #ddd; 156 | cursor: help; 157 | } 158 | 159 | // Blockquotes 160 | blockquote { 161 | padding: 0 0 0 15px; 162 | margin: 0 0 $baseLineHeight; 163 | border-left: 5px solid $grayLighter; 164 | p { 165 | margin-bottom: 0; 166 | @include font-shorthand(16px,300,$baseLineHeight * 1.25); 167 | } 168 | small { 169 | display: block; 170 | line-height: $baseLineHeight; 171 | color: $grayLight; 172 | &:before { 173 | content: '\2014 \00A0'; 174 | } 175 | } 176 | 177 | // Float right with text-align: right 178 | &.pull-right { 179 | float: right; 180 | padding-left: 0; 181 | padding-right: 15px; 182 | border-left: 0; 183 | border-right: 5px solid $grayLighter; 184 | p, small { 185 | text-align: right; 186 | } 187 | } 188 | } 189 | 190 | // Quotes 191 | q:before, q:after, blockquote:before, blockquote:after { 192 | content: ""; 193 | } 194 | 195 | // Addresses 196 | address { 197 | display: block; 198 | margin-bottom: $baseLineHeight; 199 | line-height: $baseLineHeight; 200 | font-style: normal; 201 | } 202 | 203 | // Misc 204 | small { 205 | font-size: 100%; 206 | } 207 | cite { 208 | font-style: normal; 209 | } -------------------------------------------------------------------------------- /vendor/assets/javascripts/bootstrap-collapse.js: -------------------------------------------------------------------------------- 1 | /* ============================================================= 2 | * bootstrap-collapse.js v2.0.1 3 | * http://twitter.github.com/bootstrap/javascript.html#collapse 4 | * ============================================================= 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================ */ 19 | 20 | !function( $ ){ 21 | 22 | "use strict" 23 | 24 | var Collapse = function ( element, options ) { 25 | this.$element = $(element) 26 | this.options = $.extend({}, $.fn.collapse.defaults, options) 27 | 28 | if (this.options["parent"]) { 29 | this.$parent = $(this.options["parent"]) 30 | } 31 | 32 | this.options.toggle && this.toggle() 33 | } 34 | 35 | Collapse.prototype = { 36 | 37 | constructor: Collapse 38 | 39 | , dimension: function () { 40 | var hasWidth = this.$element.hasClass('width') 41 | return hasWidth ? 'width' : 'height' 42 | } 43 | 44 | , show: function () { 45 | var dimension = this.dimension() 46 | , scroll = $.camelCase(['scroll', dimension].join('-')) 47 | , actives = this.$parent && this.$parent.find('.in') 48 | , hasData 49 | 50 | if (actives && actives.length) { 51 | hasData = actives.data('collapse') 52 | actives.collapse('hide') 53 | hasData || actives.data('collapse', null) 54 | } 55 | 56 | this.$element[dimension](0) 57 | this.transition('addClass', 'show', 'shown') 58 | this.$element[dimension](this.$element[0][scroll]) 59 | 60 | } 61 | 62 | , hide: function () { 63 | var dimension = this.dimension() 64 | this.reset(this.$element[dimension]()) 65 | this.transition('removeClass', 'hide', 'hidden') 66 | this.$element[dimension](0) 67 | } 68 | 69 | , reset: function ( size ) { 70 | var dimension = this.dimension() 71 | 72 | this.$element 73 | .removeClass('collapse') 74 | [dimension](size || 'auto') 75 | [0].offsetWidth 76 | 77 | this.$element.addClass('collapse') 78 | } 79 | 80 | , transition: function ( method, startEvent, completeEvent ) { 81 | var that = this 82 | , complete = function () { 83 | if (startEvent == 'show') that.reset() 84 | that.$element.trigger(completeEvent) 85 | } 86 | 87 | this.$element 88 | .trigger(startEvent) 89 | [method]('in') 90 | 91 | $.support.transition && this.$element.hasClass('collapse') ? 92 | this.$element.one($.support.transition.end, complete) : 93 | complete() 94 | } 95 | 96 | , toggle: function () { 97 | this[this.$element.hasClass('in') ? 'hide' : 'show']() 98 | } 99 | 100 | } 101 | 102 | /* COLLAPSIBLE PLUGIN DEFINITION 103 | * ============================== */ 104 | 105 | $.fn.collapse = function ( option ) { 106 | return this.each(function () { 107 | var $this = $(this) 108 | , data = $this.data('collapse') 109 | , options = typeof option == 'object' && option 110 | if (!data) $this.data('collapse', (data = new Collapse(this, options))) 111 | if (typeof option == 'string') data[option]() 112 | }) 113 | } 114 | 115 | $.fn.collapse.defaults = { 116 | toggle: true 117 | } 118 | 119 | $.fn.collapse.Constructor = Collapse 120 | 121 | 122 | /* COLLAPSIBLE DATA-API 123 | * ==================== */ 124 | 125 | $(function () { 126 | $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { 127 | var $this = $(this), href 128 | , target = $this.attr('data-target') 129 | || e.preventDefault() 130 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 131 | , option = $(target).data('collapse') ? 'toggle' : $this.data() 132 | $(target).collapse(option) 133 | }) 134 | }) 135 | 136 | }( window.jQuery ); -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_buttons.scss: -------------------------------------------------------------------------------- 1 | // BUTTON STYLES 2 | // ------------- 3 | 4 | 5 | // Base styles 6 | // -------------------------------------------------- 7 | 8 | // Core 9 | .btn { 10 | display: inline-block; 11 | padding: 4px 10px 4px; 12 | margin-bottom: 0; // For input.btn 13 | font-size: $baseFontSize; 14 | line-height: $baseLineHeight; 15 | color: $grayDark; 16 | text-align: center; 17 | text-shadow: 0 1px 1px rgba(255,255,255,.75); 18 | vertical-align: middle; 19 | @include buttonBackground($white, darken($white, 10%)); 20 | border: 1px solid #ccc; 21 | border-bottom-color: #bbb; 22 | @include border-radius(4px); 23 | $shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); 24 | @include box-shadow($shadow); 25 | cursor: pointer; 26 | 27 | // Give IE7 some love 28 | @include reset-filter(); 29 | @include ie7-restore-left-whitespace(); 30 | } 31 | 32 | // Hover state 33 | .btn:hover { 34 | color: $grayDark; 35 | text-decoration: none; 36 | background-color: darken($white, 10%); 37 | background-position: 0 -15px; 38 | 39 | // transition is only when going to hover, otherwise the background 40 | // behind the gradient (there for IE<=9 fallback) gets mismatched 41 | @include transition(background-position .1s linear); 42 | } 43 | 44 | // Focus state for keyboard and accessibility 45 | .btn:focus { 46 | @include tab-focus(); 47 | } 48 | 49 | // Active state 50 | .btn.active, .btn:active { 51 | background-image: none; 52 | $shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); 53 | @include box-shadow($shadow); 54 | background-color: darken($white, 10%); 55 | background-color: darken($white, 15%) \9; 56 | outline: 0; 57 | } 58 | 59 | // Disabled state 60 | .btn.disabled, .btn[disabled] { 61 | cursor: default; 62 | background-image: none; 63 | background-color: darken($white, 10%); 64 | @include opacity(0.65); 65 | @include box-shadow(none); 66 | } 67 | 68 | 69 | // Button Sizes 70 | // -------------------------------------------------- 71 | 72 | // Large 73 | .btn-large { 74 | padding: 9px 14px; 75 | font-size: $baseFontSize + 2px; 76 | line-height: normal; 77 | @include border-radius(5px); 78 | } 79 | .btn-large [class^="icon-"] { 80 | margin-top: 1px; 81 | } 82 | 83 | // Small 84 | .btn-small { 85 | padding: 5px 9px; 86 | font-size: $baseFontSize - 2px; 87 | line-height: $baseLineHeight - 2px; 88 | } 89 | .btn-small [class^="icon-"] { 90 | margin-top: -1px; 91 | } 92 | 93 | // Mini 94 | .btn-mini { 95 | padding: 2px 6px; 96 | font-size: $baseFontSize - 2px; 97 | line-height: $baseLineHeight - 4px; 98 | } 99 | 100 | 101 | // Alternate buttons 102 | // -------------------------------------------------- 103 | 104 | // Set text color 105 | // ------------------------- 106 | .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 { 107 | text-shadow: 0 -1px 0 rgba(0,0,0,.25); 108 | color: $white; 109 | } 110 | // Provide *some* extra contrast for those who can get it 111 | .btn-primary.active, .btn-warning.active, .btn-danger.active, .btn-success.active, .btn-info.active, .btn-inverse.active { 112 | color: rgba(255,255,255,.75); 113 | } 114 | 115 | // Set the backgrounds 116 | // ------------------------- 117 | .btn-primary { 118 | @include buttonBackground($primaryButtonBackground, adjust-hue($primaryButtonBackground, 20)); 119 | } 120 | // Warning appears are orange 121 | .btn-warning { 122 | @include buttonBackground(lighten($orange, 15%), $orange); 123 | } 124 | // Danger and error appear as red 125 | .btn-danger { 126 | @include buttonBackground(#ee5f5b, #bd362f); 127 | } 128 | // Success appears as green 129 | .btn-success { 130 | @include buttonBackground(#62c462, #51a351); 131 | } 132 | // Info appears as a neutral blue 133 | .btn-info { 134 | @include buttonBackground(#5bc0de, #2f96b4); 135 | } 136 | .btn-inverse { 137 | @include buttonBackground(#454545, #262626); 138 | } 139 | 140 | 141 | // Cross-browser Jank 142 | // -------------------------------------------------- 143 | 144 | button.btn, input[type="submit"].btn { 145 | 146 | // Firefox 3.6 only I believe 147 | &::-moz-focus-inner { 148 | padding: 0; 149 | border: 0; 150 | } 151 | 152 | // IE7 has some default padding on button controls 153 | *padding-top: 2px; 154 | *padding-bottom: 2px; 155 | &.large { 156 | *padding-top: 7px; 157 | *padding-bottom: 7px; 158 | } 159 | &.small { 160 | *padding-top: 3px; 161 | *padding-bottom: 3px; 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/bootstrap-carousel.js: -------------------------------------------------------------------------------- 1 | /* ========================================================== 2 | * bootstrap-carousel.js v2.0.1 3 | * http://twitter.github.com/bootstrap/javascript.html#carousel 4 | * ========================================================== 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ========================================================== */ 19 | 20 | 21 | !function( $ ){ 22 | 23 | "use strict" 24 | 25 | /* CAROUSEL CLASS DEFINITION 26 | * ========================= */ 27 | 28 | var Carousel = function (element, options) { 29 | this.$element = $(element) 30 | this.options = $.extend({}, $.fn.carousel.defaults, options) 31 | this.options.slide && this.slide(this.options.slide) 32 | } 33 | 34 | Carousel.prototype = { 35 | 36 | cycle: function () { 37 | this.interval = setInterval($.proxy(this.next, this), this.options.interval) 38 | return this 39 | } 40 | 41 | , to: function (pos) { 42 | var $active = this.$element.find('.active') 43 | , children = $active.parent().children() 44 | , activePos = children.index($active) 45 | , that = this 46 | 47 | if (pos > (children.length - 1) || pos < 0) return 48 | 49 | if (this.sliding) { 50 | return this.$element.one('slid', function () { 51 | that.to(pos) 52 | }) 53 | } 54 | 55 | if (activePos == pos) { 56 | return this.pause().cycle() 57 | } 58 | 59 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) 60 | } 61 | 62 | , pause: function () { 63 | clearInterval(this.interval) 64 | this.interval = null 65 | return this 66 | } 67 | 68 | , next: function () { 69 | if (this.sliding) return 70 | return this.slide('next') 71 | } 72 | 73 | , prev: function () { 74 | if (this.sliding) return 75 | return this.slide('prev') 76 | } 77 | 78 | , slide: function (type, next) { 79 | var $active = this.$element.find('.active') 80 | , $next = next || $active[type]() 81 | , isCycling = this.interval 82 | , direction = type == 'next' ? 'left' : 'right' 83 | , fallback = type == 'next' ? 'first' : 'last' 84 | , that = this 85 | 86 | if (!$next.length) return 87 | 88 | this.sliding = true 89 | 90 | isCycling && this.pause() 91 | 92 | $next = $next.length ? $next : this.$element.find('.item')[fallback]() 93 | 94 | if (!$.support.transition && this.$element.hasClass('slide')) { 95 | this.$element.trigger('slide') 96 | $active.removeClass('active') 97 | $next.addClass('active') 98 | this.sliding = false 99 | this.$element.trigger('slid') 100 | } else { 101 | $next.addClass(type) 102 | $next[0].offsetWidth // force reflow 103 | $active.addClass(direction) 104 | $next.addClass(direction) 105 | this.$element.trigger('slide') 106 | this.$element.one($.support.transition.end, function () { 107 | $next.removeClass([type, direction].join(' ')).addClass('active') 108 | $active.removeClass(['active', direction].join(' ')) 109 | that.sliding = false 110 | setTimeout(function () { that.$element.trigger('slid') }, 0) 111 | }) 112 | } 113 | 114 | isCycling && this.cycle() 115 | 116 | return this 117 | } 118 | 119 | } 120 | 121 | 122 | /* CAROUSEL PLUGIN DEFINITION 123 | * ========================== */ 124 | 125 | $.fn.carousel = function ( option ) { 126 | return this.each(function () { 127 | var $this = $(this) 128 | , data = $this.data('carousel') 129 | , options = typeof option == 'object' && option 130 | if (!data) $this.data('carousel', (data = new Carousel(this, options))) 131 | if (typeof option == 'number') data.to(option) 132 | else if (typeof option == 'string' || (option = options.slide)) data[option]() 133 | else data.cycle() 134 | }) 135 | } 136 | 137 | $.fn.carousel.defaults = { 138 | interval: 5000 139 | } 140 | 141 | $.fn.carousel.Constructor = Carousel 142 | 143 | 144 | /* CAROUSEL DATA-API 145 | * ================= */ 146 | 147 | $(function () { 148 | $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { 149 | var $this = $(this), href 150 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 151 | , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) 152 | $target.carousel(options) 153 | e.preventDefault() 154 | }) 155 | }) 156 | 157 | }( window.jQuery ); -------------------------------------------------------------------------------- /vendor/assets/javascripts/bootstrap-modal.js: -------------------------------------------------------------------------------- 1 | /* ========================================================= 2 | * bootstrap-modal.js v2.0.1 3 | * http://twitter.github.com/bootstrap/javascript.html#modals 4 | * ========================================================= 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ========================================================= */ 19 | 20 | 21 | !function( $ ){ 22 | 23 | "use strict" 24 | 25 | /* MODAL CLASS DEFINITION 26 | * ====================== */ 27 | 28 | var Modal = function ( content, options ) { 29 | this.options = options 30 | this.$element = $(content) 31 | .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) 32 | } 33 | 34 | Modal.prototype = { 35 | 36 | constructor: Modal 37 | 38 | , toggle: function () { 39 | return this[!this.isShown ? 'show' : 'hide']() 40 | } 41 | 42 | , show: function () { 43 | var that = this 44 | 45 | if (this.isShown) return 46 | 47 | $('body').addClass('modal-open') 48 | 49 | this.isShown = true 50 | this.$element.trigger('show') 51 | 52 | escape.call(this) 53 | backdrop.call(this, function () { 54 | var transition = $.support.transition && that.$element.hasClass('fade') 55 | 56 | !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position 57 | 58 | that.$element 59 | .show() 60 | 61 | if (transition) { 62 | that.$element[0].offsetWidth // force reflow 63 | } 64 | 65 | that.$element.addClass('in') 66 | 67 | transition ? 68 | that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : 69 | that.$element.trigger('shown') 70 | 71 | }) 72 | } 73 | 74 | , hide: function ( e ) { 75 | e && e.preventDefault() 76 | 77 | if (!this.isShown) return 78 | 79 | var that = this 80 | this.isShown = false 81 | 82 | $('body').removeClass('modal-open') 83 | 84 | escape.call(this) 85 | 86 | this.$element 87 | .trigger('hide') 88 | .removeClass('in') 89 | 90 | $.support.transition && this.$element.hasClass('fade') ? 91 | hideWithTransition.call(this) : 92 | hideModal.call(this) 93 | } 94 | 95 | } 96 | 97 | 98 | /* MODAL PRIVATE METHODS 99 | * ===================== */ 100 | 101 | function hideWithTransition() { 102 | var that = this 103 | , timeout = setTimeout(function () { 104 | that.$element.off($.support.transition.end) 105 | hideModal.call(that) 106 | }, 500) 107 | 108 | this.$element.one($.support.transition.end, function () { 109 | clearTimeout(timeout) 110 | hideModal.call(that) 111 | }) 112 | } 113 | 114 | function hideModal( that ) { 115 | this.$element 116 | .hide() 117 | .trigger('hidden') 118 | 119 | backdrop.call(this) 120 | } 121 | 122 | function backdrop( callback ) { 123 | var that = this 124 | , animate = this.$element.hasClass('fade') ? 'fade' : '' 125 | 126 | if (this.isShown && this.options.backdrop) { 127 | var doAnimate = $.support.transition && animate 128 | 129 | this.$backdrop = $('
  • ' 254 | } 255 | 256 | $.fn.typeahead.Constructor = Typeahead 257 | 258 | 259 | /* TYPEAHEAD DATA-API 260 | * ================== */ 261 | 262 | $(function () { 263 | $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { 264 | var $this = $(this) 265 | if ($this.data('typeahead')) return 266 | e.preventDefault() 267 | $this.typeahead($this.data()) 268 | }) 269 | }) 270 | 271 | }( window.jQuery ); -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_navs.scss: -------------------------------------------------------------------------------- 1 | // NAVIGATIONS 2 | // ----------- 3 | 4 | 5 | 6 | // BASE CLASS 7 | // ---------- 8 | 9 | .nav { 10 | margin-left: 0; 11 | margin-bottom: $baseLineHeight; 12 | list-style: none; 13 | } 14 | 15 | // Make links block level 16 | .nav > li > a { 17 | display: block; 18 | } 19 | .nav > li > a:hover { 20 | text-decoration: none; 21 | background-color: $grayLighter; 22 | } 23 | 24 | // Nav headers (for dropdowns and lists) 25 | .nav .nav-header { 26 | display: block; 27 | padding: 3px 15px; 28 | font-size: 11px; 29 | font-weight: bold; 30 | line-height: $baseLineHeight; 31 | color: $grayLight; 32 | text-shadow: 0 1px 0 rgba(255,255,255,.5); 33 | text-transform: uppercase; 34 | } 35 | // Space them out when they follow another list item (link) 36 | .nav li + .nav-header { 37 | margin-top: 9px; 38 | } 39 | 40 | 41 | // NAV LIST 42 | // -------- 43 | 44 | .nav-list { 45 | padding-left: 14px; 46 | padding-right: 14px; 47 | margin-bottom: 0; 48 | } 49 | .nav-list > li > a, .nav-list .nav-header { 50 | margin-left: -15px; 51 | margin-right: -15px; 52 | text-shadow: 0 1px 0 rgba(255,255,255,.5); 53 | } 54 | .nav-list > li > a { 55 | padding: 3px 15px; 56 | } 57 | .nav-list .active > a, .nav-list .active > a:hover { 58 | color: $white; 59 | text-shadow: 0 -1px 0 rgba(0,0,0,.2); 60 | background-color: $linkColor; 61 | } 62 | .nav-list [class^="icon-"] { 63 | margin-right: 2px; 64 | } 65 | 66 | 67 | 68 | // TABS AND PILLS 69 | // ------------- 70 | 71 | // Common styles 72 | .nav-tabs, .nav-pills { 73 | @include clearfix(); 74 | } 75 | .nav-tabs > li, .nav-pills > li { 76 | float: left; 77 | } 78 | .nav-tabs > li > a, .nav-pills > li > a { 79 | padding-right: 12px; 80 | padding-left: 12px; 81 | margin-right: 2px; 82 | line-height: 14px; // keeps the overall height an even number 83 | } 84 | 85 | // TABS 86 | // ---- 87 | 88 | // Give the tabs something to sit on 89 | .nav-tabs { 90 | border-bottom: 1px solid #ddd; 91 | } 92 | 93 | // Make the list-items overlay the bottom border 94 | .nav-tabs > li { 95 | margin-bottom: -1px; 96 | } 97 | 98 | // Actual tabs (as links) 99 | .nav-tabs > li > a { 100 | padding-top: 9px; 101 | padding-bottom: 9px; 102 | border: 1px solid transparent; 103 | @include border-radius(4px 4px 0 0); 104 | &:hover { 105 | border-color: $grayLighter $grayLighter #ddd; 106 | } 107 | } 108 | // Active state, and it's :hover to override normal :hover 109 | .nav-tabs > .active > a, .nav-tabs > .active > a:hover { 110 | color: $gray; 111 | background-color: $white; 112 | border: 1px solid #ddd; 113 | border-bottom-color: transparent; 114 | cursor: default; 115 | } 116 | 117 | // PILLS 118 | // ----- 119 | 120 | // Links rendered as pills 121 | .nav-pills > li > a { 122 | padding-top: 8px; 123 | padding-bottom: 8px; 124 | margin-top: 2px; 125 | margin-bottom: 2px; 126 | @include border-radius(5px); 127 | } 128 | 129 | // Active state 130 | .nav-pills .active > a, .nav-pills .active > a:hover { 131 | color: $white; 132 | background-color: $linkColor; 133 | } 134 | 135 | 136 | 137 | // STACKED NAV 138 | // ----------- 139 | 140 | // Stacked tabs and pills 141 | .nav-stacked > li { 142 | float: none; 143 | } 144 | .nav-stacked > li > a { 145 | margin-right: 0; // no need for the gap between nav items 146 | } 147 | 148 | // Tabs 149 | .nav-tabs.nav-stacked { 150 | border-bottom: 0; 151 | } 152 | .nav-tabs.nav-stacked > li > a { 153 | border: 1px solid #ddd; 154 | @include border-radius(0); 155 | } 156 | .nav-tabs.nav-stacked > li:first-child > a { 157 | @include border-radius(4px 4px 0 0); 158 | } 159 | .nav-tabs.nav-stacked > li:last-child > a { 160 | @include border-radius(0 0 4px 4px); 161 | } 162 | .nav-tabs.nav-stacked > li > a:hover { 163 | border-color: #ddd; 164 | z-index: 2; 165 | } 166 | 167 | // Pills 168 | .nav-pills.nav-stacked > li > a { 169 | margin-bottom: 3px; 170 | } 171 | .nav-pills.nav-stacked > li:last-child > a { 172 | margin-bottom: 1px; // decrease margin to match sizing of stacked tabs 173 | } 174 | 175 | 176 | 177 | // DROPDOWNS 178 | // --------- 179 | 180 | // Position the menu 181 | .nav-tabs .dropdown-menu, .nav-pills .dropdown-menu { 182 | margin-top: 1px; 183 | border-width: 1px; 184 | } 185 | .nav-pills .dropdown-menu { 186 | @include border-radius(4px); 187 | } 188 | 189 | // Default dropdown links 190 | // ------------------------- 191 | // Make carets use linkColor to start 192 | .nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret { 193 | border-top-color: $linkColor; 194 | margin-top: 6px; 195 | } 196 | .nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret { 197 | border-top-color: $linkColorHover; 198 | } 199 | 200 | // Active dropdown links 201 | // ------------------------- 202 | .nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret { 203 | border-top-color: $grayDark; 204 | } 205 | 206 | // Active:hover dropdown links 207 | // ------------------------- 208 | .nav > .dropdown.active > a:hover { 209 | color: $black; 210 | cursor: pointer; 211 | } 212 | 213 | // Open dropdowns 214 | // ------------------------- 215 | .nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover { 216 | color: $white; 217 | background-color: $grayLight; 218 | border-color: $grayLight; 219 | } 220 | .nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret { 221 | border-top-color: $white; 222 | @include opacity(1); 223 | } 224 | 225 | // Dropdowns in stacked tabs 226 | .tabs-stacked .open > a:hover { 227 | border-color: $grayLight; 228 | } 229 | 230 | 231 | 232 | // TABBABLE 233 | // -------- 234 | 235 | 236 | // COMMON STYLES 237 | // ------------- 238 | 239 | // Clear any floats 240 | .tabbable { 241 | @include clearfix(); 242 | } 243 | .tab-content { 244 | overflow: hidden; // prevent content from running below tabs 245 | } 246 | 247 | // Remove border on bottom, left, right 248 | .tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs { 249 | border-bottom: 0; 250 | } 251 | 252 | // Show/hide tabbable areas 253 | .tab-content > .tab-pane, .pill-content > .pill-pane { 254 | display: none; 255 | } 256 | .tab-content > .active, .pill-content > .active { 257 | display: block; 258 | } 259 | 260 | 261 | // BOTTOM 262 | // ------ 263 | 264 | .tabs-below .nav-tabs { 265 | border-top: 1px solid #ddd; 266 | } 267 | .tabs-below .nav-tabs > li { 268 | margin-top: -1px; 269 | margin-bottom: 0; 270 | } 271 | .tabs-below .nav-tabs > li > a { 272 | @include border-radius(0 0 4px 4px); 273 | &:hover { 274 | border-bottom-color: transparent; 275 | border-top-color: #ddd; 276 | } 277 | } 278 | .tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover { 279 | border-color: transparent #ddd #ddd #ddd; 280 | } 281 | 282 | // LEFT & RIGHT 283 | // ------------ 284 | 285 | // Common styles 286 | .tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li { 287 | float: none; 288 | } 289 | .tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a { 290 | min-width: 74px; 291 | margin-right: 0; 292 | margin-bottom: 3px; 293 | } 294 | 295 | // Tabs on the left 296 | .tabs-left .nav-tabs { 297 | float: left; 298 | margin-right: 19px; 299 | border-right: 1px solid #ddd; 300 | } 301 | .tabs-left .nav-tabs > li > a { 302 | margin-right: -1px; 303 | @include border-radius(4px 0 0 4px); 304 | } 305 | .tabs-left .nav-tabs > li > a:hover { 306 | border-color: $grayLighter #ddd $grayLighter $grayLighter; 307 | } 308 | .tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover { 309 | border-color: #ddd transparent #ddd #ddd; 310 | *border-right-color: $white; 311 | } 312 | 313 | // Tabs on the right 314 | .tabs-right .nav-tabs { 315 | float: right; 316 | margin-left: 19px; 317 | border-left: 1px solid #ddd; 318 | } 319 | .tabs-right .nav-tabs > li > a { 320 | margin-left: -1px; 321 | @include border-radius(0 4px 4px 0); 322 | } 323 | .tabs-right .nav-tabs > li > a:hover { 324 | border-color: $grayLighter $grayLighter $grayLighter #ddd; 325 | } 326 | .tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover { 327 | border-color: #ddd #ddd #ddd transparent; 328 | *border-left-color: $white; 329 | } 330 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/_bootstrap-responsive.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.0.1 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | * Converted to SASS by Thomas McDonald 10 | */ 11 | 12 | // Responsive.css.scss 13 | // For phone and tablet devices 14 | // ------------------------------------------------------------- 15 | 16 | 17 | // REPEAT VARIABLES & MIXINS 18 | // ------------------------- 19 | // Required since we compile the responsive stuff separately 20 | 21 | @import "bootstrap/variables"; // Modify this for custom colors, font-sizes, etc 22 | @import "bootstrap/mixins"; 23 | 24 | 25 | // RESPONSIVE CLASSES 26 | // ------------------ 27 | 28 | // Hide from screenreaders and browsers 29 | // Credit: HTML5 Boilerplate 30 | .hidden { 31 | display: none; 32 | visibility: hidden; 33 | } 34 | 35 | 36 | 37 | // UP TO LANDSCAPE PHONE 38 | // --------------------- 39 | 40 | @media (max-width: 480px) { 41 | 42 | // Smooth out the collapsing/expanding nav 43 | .nav-collapse { 44 | -webkit-transform: translate3d(0, 0, 0); // activate the GPU 45 | } 46 | 47 | // Block level the page header small tag for readability 48 | .page-header h1 small { 49 | display: block; 50 | line-height: $baseLineHeight; 51 | } 52 | 53 | // Make span* classes full width 54 | input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input { 55 | display: block; 56 | width: 100%; 57 | min-height: 28px; /* Make inputs at least the height of their button counterpart */ 58 | /* Makes inputs behave like true block-level elements */ 59 | -webkit-box-sizing: border-box; /* Older Webkit */ 60 | -moz-box-sizing: border-box; /* Older FF */ 61 | -ms-box-sizing: border-box; /* IE8 */ 62 | box-sizing: border-box; /* CSS3 spec*/ 63 | } 64 | // But don't let it screw up prepend/append inputs 65 | .input-prepend input[class*="span"], .input-append input[class*="span"] { 66 | width: auto; 67 | } 68 | 69 | // Update checkboxes for iOS 70 | input[type="checkbox"], input[type="radio"] { 71 | border: 1px solid #ccc; 72 | } 73 | 74 | // Remove the horizontal form styles 75 | .form-horizontal .control-group > label { 76 | float: none; 77 | width: auto; 78 | padding-top: 0; 79 | text-align: left; 80 | } 81 | // Move over all input controls and content 82 | .form-horizontal .controls { 83 | margin-left: 0; 84 | } 85 | // Move the options list down to align with labels 86 | .form-horizontal .control-list { 87 | padding-top: 0; // has to be padding because margin collaspes 88 | } 89 | // Move over buttons in .form-actions to align with .controls 90 | .form-horizontal .form-actions { 91 | padding-left: 10px; 92 | padding-right: 10px; 93 | } 94 | 95 | // Modals 96 | .modal { 97 | position: absolute; 98 | top: 10px; 99 | left: 10px; 100 | right: 10px; 101 | width: auto; 102 | margin: 0; 103 | &.fade.in { top: auto; } 104 | } 105 | .modal-header .close { 106 | padding: 10px; 107 | margin: -10px; 108 | } 109 | 110 | // Carousel 111 | .carousel-caption { 112 | position: static; 113 | } 114 | 115 | } 116 | 117 | 118 | 119 | // LANDSCAPE PHONE TO SMALL DESKTOP & PORTRAIT TABLET 120 | // -------------------------------------------------- 121 | 122 | @media (max-width: 767px) { 123 | // GRID & CONTAINERS 124 | // ----------------- 125 | // Remove width from containers 126 | .container { 127 | width: auto; 128 | padding: 0 20px; 129 | } 130 | // Fluid rows 131 | .row-fluid { 132 | width: 100%; 133 | } 134 | // Undo negative margin on rows 135 | .row { 136 | margin-left: 0; 137 | } 138 | // Make all columns even 139 | .row > [class*="span"], .row-fluid > [class*="span"] { 140 | float: none; 141 | display: block; 142 | width: auto; 143 | margin: 0; 144 | } 145 | } 146 | 147 | 148 | 149 | // PORTRAIT TABLET TO DEFAULT DESKTOP 150 | // ---------------------------------- 151 | 152 | @media (min-width: 768px) and (max-width: 979px) { 153 | 154 | // Fixed grid 155 | @include gridSystemGenerate(12, 42px, 20px); 156 | 157 | // Fluid grid 158 | @include fluidGridSystemGenerate(12, 5.801104972%, 2.762430939%); 159 | 160 | // Input grid 161 | @include inputGridSystemGenerate(12, 42px, 20px); 162 | 163 | } 164 | 165 | 166 | 167 | // TABLETS AND BELOW 168 | // ----------------- 169 | @media (max-width: 979px) { 170 | 171 | // UNFIX THE TOPBAR 172 | // ---------------- 173 | // Remove any padding from the body 174 | body { 175 | padding-top: 0; 176 | } 177 | // Unfix the navbar 178 | .navbar-fixed-top { 179 | position: static; 180 | margin-bottom: $baseLineHeight; 181 | } 182 | .navbar-fixed-top .navbar-inner { 183 | padding: 5px; 184 | } 185 | .navbar .container { 186 | width: auto; 187 | padding: 0; 188 | } 189 | // Account for brand name 190 | .navbar .brand { 191 | padding-left: 10px; 192 | padding-right: 10px; 193 | margin: 0 0 0 -5px; 194 | } 195 | // Nav collapse clears brand 196 | .navbar .nav-collapse { 197 | clear: left; 198 | } 199 | // Block-level the nav 200 | .navbar .nav { 201 | float: none; 202 | margin: 0 0 ($baseLineHeight / 2); 203 | } 204 | .navbar .nav > li { 205 | float: none; 206 | } 207 | .navbar .nav > li > a { 208 | margin-bottom: 2px; 209 | } 210 | .navbar .nav > .divider-vertical { 211 | display: none; 212 | } 213 | .navbar .nav .nav-header { 214 | color: $navbarText; 215 | text-shadow: none; 216 | } 217 | // Nav and dropdown links in navbar 218 | .navbar .nav > li > a, .navbar .dropdown-menu a { 219 | padding: 6px 15px; 220 | font-weight: bold; 221 | color: $navbarLinkColor; 222 | @include border-radius(3px); 223 | } 224 | .navbar .dropdown-menu li + li a { 225 | margin-bottom: 2px; 226 | } 227 | .navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover { 228 | background-color: $navbarBackground; 229 | } 230 | // Dropdowns in the navbar 231 | .navbar .dropdown-menu { 232 | position: static; 233 | top: auto; 234 | left: auto; 235 | float: none; 236 | display: block; 237 | max-width: none; 238 | margin: 0 15px; 239 | padding: 0; 240 | background-color: transparent; 241 | border: none; 242 | @include border-radius(0); 243 | @include box-shadow(none); 244 | } 245 | .navbar .dropdown-menu:before, .navbar .dropdown-menu:after { 246 | display: none; 247 | } 248 | .navbar .dropdown-menu .divider { 249 | display: none; 250 | } 251 | // Forms in navbar 252 | .navbar-form, .navbar-search { 253 | float: none; 254 | padding: ($baseLineHeight / 2) 15px; 255 | margin: ($baseLineHeight / 2) 0; 256 | border-top: 1px solid $navbarBackground; 257 | border-bottom: 1px solid $navbarBackground; 258 | $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); 259 | @include box-shadow($shadow); 260 | } 261 | // Pull right (secondary) nav content 262 | .navbar .nav.pull-right { 263 | float: none; 264 | margin-left: 0; 265 | } 266 | // Static navbar 267 | .navbar-static .navbar-inner { 268 | padding-left: 10px; 269 | padding-right: 10px; 270 | } 271 | // Navbar button 272 | .btn-navbar { 273 | display: block; 274 | } 275 | 276 | // Hide everything in the navbar save .brand and toggle button */ 277 | .nav-collapse { 278 | overflow: hidden; 279 | height: 0; 280 | } 281 | } 282 | 283 | 284 | 285 | // DEFAULT DESKTOP 286 | // --------------- 287 | 288 | @media (min-width: 980px) { 289 | .nav-collapse.collapse { 290 | height: auto !important; 291 | } 292 | } 293 | 294 | 295 | 296 | // LARGE DESKTOP & UP 297 | // ------------------ 298 | 299 | @media (min-width: 1200px) { 300 | 301 | // Fixed grid 302 | @include gridSystemGenerate(12, 70px, 30px); 303 | 304 | // Fluid grid 305 | @include fluidGridSystemGenerate(12, 5.982905983%, 2.564102564%); 306 | 307 | // Input grid 308 | @include inputGridSystemGenerate(12, 70px, 30px); 309 | 310 | // Thumbnails 311 | .thumbnails { 312 | margin-left: -30px; 313 | } 314 | .thumbnails > li { 315 | margin-left: 30px; 316 | } 317 | 318 | } -------------------------------------------------------------------------------- /vendor/assets/javascripts/bootstrap-tooltip.js: -------------------------------------------------------------------------------- 1 | /* =========================================================== 2 | * bootstrap-tooltip.js v2.0.1 3 | * http://twitter.github.com/bootstrap/javascript.html#tooltips 4 | * Inspired by the original jQuery.tipsy by Jason Frame 5 | * =========================================================== 6 | * Copyright 2012 Twitter, Inc. 7 | * 8 | * Licensed under the Apache License, Version 2.0 (the "License"); 9 | * you may not use this file except in compliance with the License. 10 | * You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, software 15 | * distributed under the License is distributed on an "AS IS" BASIS, 16 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | * See the License for the specific language governing permissions and 18 | * limitations under the License. 19 | * ========================================================== */ 20 | 21 | !function( $ ) { 22 | 23 | "use strict" 24 | 25 | /* TOOLTIP PUBLIC CLASS DEFINITION 26 | * =============================== */ 27 | 28 | var Tooltip = function ( element, options ) { 29 | this.init('tooltip', element, options) 30 | } 31 | 32 | Tooltip.prototype = { 33 | 34 | constructor: Tooltip 35 | 36 | , init: function ( type, element, options ) { 37 | var eventIn 38 | , eventOut 39 | 40 | this.type = type 41 | this.$element = $(element) 42 | this.options = this.getOptions(options) 43 | this.enabled = true 44 | 45 | if (this.options.trigger != 'manual') { 46 | eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus' 47 | eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur' 48 | this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this)) 49 | this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this)) 50 | } 51 | 52 | this.options.selector ? 53 | (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : 54 | this.fixTitle() 55 | } 56 | 57 | , getOptions: function ( options ) { 58 | options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) 59 | 60 | if (options.delay && typeof options.delay == 'number') { 61 | options.delay = { 62 | show: options.delay 63 | , hide: options.delay 64 | } 65 | } 66 | 67 | return options 68 | } 69 | 70 | , enter: function ( e ) { 71 | var self = $(e.currentTarget)[this.type](this._options).data(this.type) 72 | 73 | if (!self.options.delay || !self.options.delay.show) { 74 | self.show() 75 | } else { 76 | self.hoverState = 'in' 77 | setTimeout(function() { 78 | if (self.hoverState == 'in') { 79 | self.show() 80 | } 81 | }, self.options.delay.show) 82 | } 83 | } 84 | 85 | , leave: function ( e ) { 86 | var self = $(e.currentTarget)[this.type](this._options).data(this.type) 87 | 88 | if (!self.options.delay || !self.options.delay.hide) { 89 | self.hide() 90 | } else { 91 | self.hoverState = 'out' 92 | setTimeout(function() { 93 | if (self.hoverState == 'out') { 94 | self.hide() 95 | } 96 | }, self.options.delay.hide) 97 | } 98 | } 99 | 100 | , show: function () { 101 | var $tip 102 | , inside 103 | , pos 104 | , actualWidth 105 | , actualHeight 106 | , placement 107 | , tp 108 | 109 | if (this.hasContent() && this.enabled) { 110 | $tip = this.tip() 111 | this.setContent() 112 | 113 | if (this.options.animation) { 114 | $tip.addClass('fade') 115 | } 116 | 117 | placement = typeof this.options.placement == 'function' ? 118 | this.options.placement.call(this, $tip[0], this.$element[0]) : 119 | this.options.placement 120 | 121 | inside = /in/.test(placement) 122 | 123 | $tip 124 | .remove() 125 | .css({ top: 0, left: 0, display: 'block' }) 126 | .appendTo(inside ? this.$element : document.body) 127 | 128 | pos = this.getPosition(inside) 129 | 130 | actualWidth = $tip[0].offsetWidth 131 | actualHeight = $tip[0].offsetHeight 132 | 133 | switch (inside ? placement.split(' ')[1] : placement) { 134 | case 'bottom': 135 | tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} 136 | break 137 | case 'top': 138 | tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} 139 | break 140 | case 'left': 141 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} 142 | break 143 | case 'right': 144 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} 145 | break 146 | } 147 | 148 | $tip 149 | .css(tp) 150 | .addClass(placement) 151 | .addClass('in') 152 | } 153 | } 154 | 155 | , setContent: function () { 156 | var $tip = this.tip() 157 | $tip.find('.tooltip-inner').html(this.getTitle()) 158 | $tip.removeClass('fade in top bottom left right') 159 | } 160 | 161 | , hide: function () { 162 | var that = this 163 | , $tip = this.tip() 164 | 165 | $tip.removeClass('in') 166 | 167 | function removeWithAnimation() { 168 | var timeout = setTimeout(function () { 169 | $tip.off($.support.transition.end).remove() 170 | }, 500) 171 | 172 | $tip.one($.support.transition.end, function () { 173 | clearTimeout(timeout) 174 | $tip.remove() 175 | }) 176 | } 177 | 178 | $.support.transition && this.$tip.hasClass('fade') ? 179 | removeWithAnimation() : 180 | $tip.remove() 181 | } 182 | 183 | , fixTitle: function () { 184 | var $e = this.$element 185 | if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { 186 | $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title') 187 | } 188 | } 189 | 190 | , hasContent: function () { 191 | return this.getTitle() 192 | } 193 | 194 | , getPosition: function (inside) { 195 | return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), { 196 | width: this.$element[0].offsetWidth 197 | , height: this.$element[0].offsetHeight 198 | }) 199 | } 200 | 201 | , getTitle: function () { 202 | var title 203 | , $e = this.$element 204 | , o = this.options 205 | 206 | title = $e.attr('data-original-title') 207 | || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) 208 | 209 | title = title.toString().replace(/(^\s*|\s*$)/, "") 210 | 211 | return title 212 | } 213 | 214 | , tip: function () { 215 | return this.$tip = this.$tip || $(this.options.template) 216 | } 217 | 218 | , validate: function () { 219 | if (!this.$element[0].parentNode) { 220 | this.hide() 221 | this.$element = null 222 | this.options = null 223 | } 224 | } 225 | 226 | , enable: function () { 227 | this.enabled = true 228 | } 229 | 230 | , disable: function () { 231 | this.enabled = false 232 | } 233 | 234 | , toggleEnabled: function () { 235 | this.enabled = !this.enabled 236 | } 237 | 238 | , toggle: function () { 239 | this[this.tip().hasClass('in') ? 'hide' : 'show']() 240 | } 241 | 242 | } 243 | 244 | 245 | /* TOOLTIP PLUGIN DEFINITION 246 | * ========================= */ 247 | 248 | $.fn.tooltip = function ( option ) { 249 | return this.each(function () { 250 | var $this = $(this) 251 | , data = $this.data('tooltip') 252 | , options = typeof option == 'object' && option 253 | if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) 254 | if (typeof option == 'string') data[option]() 255 | }) 256 | } 257 | 258 | $.fn.tooltip.Constructor = Tooltip 259 | 260 | $.fn.tooltip.defaults = { 261 | animation: true 262 | , delay: 0 263 | , selector: false 264 | , placement: 'top' 265 | , trigger: 'hover' 266 | , title: '' 267 | , template: '
    ' 268 | } 269 | 270 | }( window.jQuery ); -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_sprites.scss: -------------------------------------------------------------------------------- 1 | // SPRITES 2 | // Glyphs and icons for buttons, nav, and more 3 | // ------------------------------------------- 4 | 5 | 6 | // ICONS 7 | // ----- 8 | 9 | // All icons receive the styles of the tag with a base class 10 | // of .i and are then given a unique class to add width, height, 11 | // and background-position. Your resulting HTML will look like 12 | // . 13 | 14 | // For the white version of the icons, just add the .icon-white class: 15 | // 16 | 17 | [class^="icon-"], [class*=" icon-"] { 18 | display: inline-block; 19 | width: 14px; 20 | height: 14px; 21 | line-height: 14px; 22 | vertical-align: text-top; 23 | background-image: asset-url("glyphicons-halflings.png", image); 24 | background-position: 14px 14px; 25 | background-repeat: no-repeat; 26 | 27 | @include ie7-restore-right-whitespace(); 28 | } 29 | .icon-white { 30 | background-image: asset-url("glyphicons-halflings-white.png", image); 31 | } 32 | 33 | .icon-glass { background-position: 0 0; } 34 | .icon-music { background-position: -24px 0; } 35 | .icon-search { background-position: -48px 0; } 36 | .icon-envelope { background-position: -72px 0; } 37 | .icon-heart { background-position: -96px 0; } 38 | .icon-star { background-position: -120px 0; } 39 | .icon-star-empty { background-position: -144px 0; } 40 | .icon-user { background-position: -168px 0; } 41 | .icon-film { background-position: -192px 0; } 42 | .icon-th-large { background-position: -216px 0; } 43 | .icon-th { background-position: -240px 0; } 44 | .icon-th-list { background-position: -264px 0; } 45 | .icon-ok { background-position: -288px 0; } 46 | .icon-remove { background-position: -312px 0; } 47 | .icon-zoom-in { background-position: -336px 0; } 48 | .icon-zoom-out { background-position: -360px 0; } 49 | .icon-off { background-position: -384px 0; } 50 | .icon-signal { background-position: -408px 0; } 51 | .icon-cog { background-position: -432px 0; } 52 | .icon-trash { background-position: -456px 0; } 53 | 54 | .icon-home { background-position: 0 -24px; } 55 | .icon-file { background-position: -24px -24px; } 56 | .icon-time { background-position: -48px -24px; } 57 | .icon-road { background-position: -72px -24px; } 58 | .icon-download-alt { background-position: -96px -24px; } 59 | .icon-download { background-position: -120px -24px; } 60 | .icon-upload { background-position: -144px -24px; } 61 | .icon-inbox { background-position: -168px -24px; } 62 | .icon-play-circle { background-position: -192px -24px; } 63 | .icon-repeat { background-position: -216px -24px; } 64 | .icon-refresh { background-position: -240px -24px; } 65 | .icon-list-alt { background-position: -264px -24px; } 66 | .icon-lock { background-position: -287px -24px; } // 1px off 67 | .icon-flag { background-position: -312px -24px; } 68 | .icon-headphones { background-position: -336px -24px; } 69 | .icon-volume-off { background-position: -360px -24px; } 70 | .icon-volume-down { background-position: -384px -24px; } 71 | .icon-volume-up { background-position: -408px -24px; } 72 | .icon-qrcode { background-position: -432px -24px; } 73 | .icon-barcode { background-position: -456px -24px; } 74 | 75 | .icon-tag { background-position: 0 -48px; } 76 | .icon-tags { background-position: -25px -48px; } // 1px off 77 | .icon-book { background-position: -48px -48px; } 78 | .icon-bookmark { background-position: -72px -48px; } 79 | .icon-print { background-position: -96px -48px; } 80 | .icon-camera { background-position: -120px -48px; } 81 | .icon-font { background-position: -144px -48px; } 82 | .icon-bold { background-position: -167px -48px; } // 1px off 83 | .icon-italic { background-position: -192px -48px; } 84 | .icon-text-height { background-position: -216px -48px; } 85 | .icon-text-width { background-position: -240px -48px; } 86 | .icon-align-left { background-position: -264px -48px; } 87 | .icon-align-center { background-position: -288px -48px; } 88 | .icon-align-right { background-position: -312px -48px; } 89 | .icon-align-justify { background-position: -336px -48px; } 90 | .icon-list { background-position: -360px -48px; } 91 | .icon-indent-left { background-position: -384px -48px; } 92 | .icon-indent-right { background-position: -408px -48px; } 93 | .icon-facetime-video { background-position: -432px -48px; } 94 | .icon-picture { background-position: -456px -48px; } 95 | 96 | .icon-pencil { background-position: 0 -72px; } 97 | .icon-map-marker { background-position: -24px -72px; } 98 | .icon-adjust { background-position: -48px -72px; } 99 | .icon-tint { background-position: -72px -72px; } 100 | .icon-edit { background-position: -96px -72px; } 101 | .icon-share { background-position: -120px -72px; } 102 | .icon-check { background-position: -144px -72px; } 103 | .icon-move { background-position: -168px -72px; } 104 | .icon-step-backward { background-position: -192px -72px; } 105 | .icon-fast-backward { background-position: -216px -72px; } 106 | .icon-backward { background-position: -240px -72px; } 107 | .icon-play { background-position: -264px -72px; } 108 | .icon-pause { background-position: -288px -72px; } 109 | .icon-stop { background-position: -312px -72px; } 110 | .icon-forward { background-position: -336px -72px; } 111 | .icon-fast-forward { background-position: -360px -72px; } 112 | .icon-step-forward { background-position: -384px -72px; } 113 | .icon-eject { background-position: -408px -72px; } 114 | .icon-chevron-left { background-position: -432px -72px; } 115 | .icon-chevron-right { background-position: -456px -72px; } 116 | 117 | .icon-plus-sign { background-position: 0 -96px; } 118 | .icon-minus-sign { background-position: -24px -96px; } 119 | .icon-remove-sign { background-position: -48px -96px; } 120 | .icon-ok-sign { background-position: -72px -96px; } 121 | .icon-question-sign { background-position: -96px -96px; } 122 | .icon-info-sign { background-position: -120px -96px; } 123 | .icon-screenshot { background-position: -144px -96px; } 124 | .icon-remove-circle { background-position: -168px -96px; } 125 | .icon-ok-circle { background-position: -192px -96px; } 126 | .icon-ban-circle { background-position: -216px -96px; } 127 | .icon-arrow-left { background-position: -240px -96px; } 128 | .icon-arrow-right { background-position: -264px -96px; } 129 | .icon-arrow-up { background-position: -289px -96px; } // 1px off 130 | .icon-arrow-down { background-position: -312px -96px; } 131 | .icon-share-alt { background-position: -336px -96px; } 132 | .icon-resize-full { background-position: -360px -96px; } 133 | .icon-resize-small { background-position: -384px -96px; } 134 | .icon-plus { background-position: -408px -96px; } 135 | .icon-minus { background-position: -433px -96px; } 136 | .icon-asterisk { background-position: -456px -96px; } 137 | 138 | .icon-exclamation-sign { background-position: 0 -120px; } 139 | .icon-gift { background-position: -24px -120px; } 140 | .icon-leaf { background-position: -48px -120px; } 141 | .icon-fire { background-position: -72px -120px; } 142 | .icon-eye-open { background-position: -96px -120px; } 143 | .icon-eye-close { background-position: -120px -120px; } 144 | .icon-warning-sign { background-position: -144px -120px; } 145 | .icon-plane { background-position: -168px -120px; } 146 | .icon-calendar { background-position: -192px -120px; } 147 | .icon-random { background-position: -216px -120px; } 148 | .icon-comment { background-position: -240px -120px; } 149 | .icon-magnet { background-position: -264px -120px; } 150 | .icon-chevron-up { background-position: -288px -120px; } 151 | .icon-chevron-down { background-position: -313px -119px; } // 1px off 152 | .icon-retweet { background-position: -336px -120px; } 153 | .icon-shopping-cart { background-position: -360px -120px; } 154 | .icon-folder-close { background-position: -384px -120px; } 155 | .icon-folder-open { background-position: -408px -120px; } 156 | .icon-resize-vertical { background-position: -432px -119px; } 157 | .icon-resize-horizontal { background-position: -456px -118px; } 158 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_forms.scss: -------------------------------------------------------------------------------- 1 | // Forms.less 2 | // Base styles for various input types, form layouts, and states 3 | // ------------------------------------------------------------- 4 | 5 | 6 | // GENERAL STYLES 7 | // -------------- 8 | 9 | // Make all forms have space below them 10 | form { 11 | margin: 0 0 $baseLineHeight; 12 | } 13 | 14 | fieldset { 15 | padding: 0; 16 | margin: 0; 17 | border: 0; 18 | } 19 | 20 | // Groups of fields with labels on top (legends) 21 | legend { 22 | display: block; 23 | width: 100%; 24 | padding: 0; 25 | margin-bottom: $baseLineHeight * 1.5; 26 | font-size: $baseFontSize * 1.5; 27 | line-height: $baseLineHeight * 2; 28 | color: $grayDark; 29 | border: 0; 30 | border-bottom: 1px solid #eee; 31 | 32 | // Small 33 | small { 34 | font-size: $baseLineHeight * .75; 35 | color: $grayLight; 36 | } 37 | } 38 | 39 | // Set font for forms 40 | label, input, button, select, textarea { 41 | @include font-shorthand($baseFontSize, normal, $baseLineHeight); // Set size, weight, line-height here 42 | } 43 | 44 | input, button, select, textarea { 45 | @include font-family-sans-serif(); // And only set font-family here for those that need it (note the missing label element) 46 | } 47 | 48 | // Identify controls by their labels 49 | label { 50 | display: block; 51 | margin-bottom: 5px; 52 | color: $grayDark; 53 | } 54 | 55 | // Inputs, Textareas, Selects 56 | input, textarea, select, .uneditable-input { 57 | display: inline-block; 58 | width: 210px; 59 | height: $baseLineHeight; 60 | padding: 4px; 61 | margin-bottom: 9px; 62 | font-size: $baseFontSize; 63 | line-height: $baseLineHeight; 64 | color: $gray; 65 | border: 1px solid #ccc; 66 | @include border-radius(3px); 67 | } 68 | .uneditable-textarea { 69 | width: auto; 70 | height: auto; 71 | } 72 | 73 | // Inputs within a label 74 | label input, label textarea, label select { 75 | display: block; 76 | } 77 | 78 | // Mini reset for unique input types 79 | input[type="image"], input[type="checkbox"], input[type="radio"] { 80 | width: auto; 81 | height: auto; 82 | padding: 0; 83 | margin: 3px 0; 84 | *margin-top: 0; /* IE7 */ 85 | line-height: normal; 86 | cursor: pointer; 87 | @include border-radius(0); 88 | border: 0 \9; /* IE9 and down */ 89 | } 90 | input[type="image"] { 91 | border: 0; 92 | } 93 | 94 | // Reset the file input to browser defaults 95 | input[type="file"] { 96 | width: auto; 97 | padding: initial; 98 | line-height: initial; 99 | border: initial; 100 | background-color: $white; 101 | background-color: initial; 102 | @include box-shadow(none); 103 | } 104 | 105 | // Help out input buttons 106 | input[type="button"], input[type="reset"], input[type="submit"] { 107 | width: auto; 108 | height: auto; 109 | } 110 | 111 | // Set the height of select and file controls to match text inputs 112 | select, input[type="file"] { 113 | height: 28px; /* In IE7, the height of the select element cannot be changed by height, only font-size */ 114 | *margin-top: 4px; /* For IE7, add top margin to align select with labels */ 115 | line-height: 28px; 116 | } 117 | 118 | // Reset line-height for IE 119 | input[type="file"] { 120 | line-height: 18px \9; 121 | } 122 | 123 | // Chrome on Linux and Mobile Safari need background-color 124 | select { 125 | width: 220px; // default input width + 10px of padding that doesn't get applied 126 | background-color: $white; 127 | } 128 | 129 | // Make multiple select elements height not fixed 130 | select[multiple], select[size] { 131 | height: auto; 132 | } 133 | 134 | // Remove shadow from image inputs 135 | input[type="image"] { 136 | @include box-shadow(none); 137 | } 138 | 139 | // Make textarea height behave 140 | textarea { 141 | height: auto; 142 | } 143 | 144 | // Hidden inputs 145 | input[type="hidden"] { 146 | display: none; 147 | } 148 | 149 | 150 | 151 | // CHECKBOXES & RADIOS 152 | // ------------------- 153 | 154 | // Indent the labels to position radios/checkboxes as hanging 155 | .radio, .checkbox { 156 | padding-left: 18px; 157 | } 158 | .radio input[type="radio"], .checkbox input[type="checkbox"] { 159 | float: left; 160 | margin-left: -18px; 161 | } 162 | 163 | // Move the options list down to align with labels 164 | .controls > .radio:first-child, .controls > .checkbox:first-child { 165 | padding-top: 5px; // has to be padding because margin collaspes 166 | } 167 | 168 | // Radios and checkboxes on same line 169 | // TODO v3: Convert .inline to .control-inline 170 | .radio.inline, .checkbox.inline { 171 | display: inline-block; 172 | padding-top: 5px; 173 | margin-bottom: 0; 174 | vertical-align: middle; 175 | } 176 | .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { 177 | margin-left: 10px; // space out consecutive inline controls 178 | } 179 | 180 | 181 | 182 | // FOCUS STATE 183 | // ----------- 184 | 185 | input, textarea { 186 | @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); 187 | $transition: border linear .2s, box-shadow linear .2s; 188 | @include transition($transition); 189 | } 190 | input:focus, textarea:focus { 191 | border-color: rgba(82,168,236,.8); 192 | $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); 193 | @include box-shadow($shadow); 194 | outline: 0; 195 | outline: thin dotted \9; /* IE6-9 */ 196 | } 197 | input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus, select:focus { 198 | @include box-shadow(none); // override for file inputs 199 | @include tab-focus(); 200 | } 201 | 202 | 203 | 204 | // INPUT SIZES 205 | // ----------- 206 | 207 | // General classes for quick sizes 208 | .input-mini { width: 60px; } 209 | .input-small { width: 90px; } 210 | .input-medium { width: 150px; } 211 | .input-large { width: 210px; } 212 | .input-xlarge { width: 270px; } 213 | .input-xxlarge { width: 530px; } 214 | 215 | // Grid style input sizes 216 | input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input { 217 | float: none; 218 | margin-left: 0; 219 | } 220 | 221 | 222 | 223 | // GRID SIZING FOR INPUTS 224 | // ---------------------- 225 | 226 | @include inputGridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth); 227 | 228 | 229 | 230 | 231 | // DISABLED STATE 232 | // -------------- 233 | 234 | // Disabled and read-only inputs 235 | input[disabled], select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] { 236 | background-color: #f5f5f5; 237 | border-color: #ddd; 238 | cursor: not-allowed; 239 | } 240 | 241 | 242 | 243 | 244 | // FORM FIELD FEEDBACK STATES 245 | // -------------------------- 246 | 247 | // Warning 248 | .control-group.warning { 249 | @include formFieldState($warningText, $warningText, $warningBackground); 250 | } 251 | // Error 252 | .control-group.error { 253 | @include formFieldState($errorText, $errorText, $errorBackground); 254 | } 255 | // Success 256 | .control-group.success { 257 | @include formFieldState($successText, $successText, $successBackground); 258 | } 259 | 260 | // HTML5 invalid states 261 | // Shares styles with the .control-group.error above 262 | input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid { 263 | color: #b94a48; 264 | border-color: #ee5f5b; 265 | &:focus { 266 | border-color: darken(#ee5f5b, 10%); 267 | @include box-shadow(0 0 6px lighten(#ee5f5b, 20%)); 268 | } 269 | } 270 | 271 | 272 | 273 | // FORM ACTIONS 274 | // ------------ 275 | 276 | .form-actions { 277 | padding: ($baseLineHeight - 1) 20px $baseLineHeight; 278 | margin-top: $baseLineHeight; 279 | margin-bottom: $baseLineHeight; 280 | background-color: #f5f5f5; 281 | border-top: 1px solid #ddd; 282 | } 283 | 284 | // For text that needs to appear as an input but should not be an input 285 | .uneditable-input { 286 | display: block; 287 | background-color: $white; 288 | border-color: #eee; 289 | @include box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); 290 | cursor: not-allowed; 291 | } 292 | 293 | // Placeholder text gets special styles; can't be bundled together though for some reason 294 | @include placeholder($grayLight); 295 | 296 | 297 | 298 | // HELP TEXT 299 | // --------- 300 | 301 | .help-block { 302 | display: block; // account for any element using help-block 303 | margin-top: 5px; 304 | margin-bottom: 0; 305 | color: $grayLight; 306 | } 307 | 308 | .help-inline { 309 | display: inline-block; 310 | @include ie7-inline-block(); 311 | margin-bottom: 9px; 312 | vertical-align: middle; 313 | padding-left: 5px; 314 | } 315 | 316 | 317 | 318 | // INPUT GROUPS 319 | // ------------ 320 | 321 | // Allow us to put symbols and text within the input field for a cleaner look 322 | .input-prepend, .input-append { 323 | margin-bottom: 5px; 324 | @include clearfix(); // Clear the float to prevent wrapping 325 | input, .uneditable-input { 326 | @include border-radius(0 3px 3px 0); 327 | &:focus { 328 | position: relative; 329 | z-index: 2; 330 | } 331 | } 332 | .uneditable-input { 333 | border-left-color: #eee; 334 | border-right-color: #ccc; 335 | } 336 | .add-on { 337 | float: left; 338 | display: block; 339 | width: auto; 340 | min-width: 16px; 341 | height: $baseLineHeight; 342 | margin-right: -1px; 343 | padding: 4px 5px; 344 | font-weight: normal; 345 | line-height: $baseLineHeight; 346 | color: $grayLight; 347 | text-align: center; 348 | text-shadow: 0 1px 0 $white; 349 | background-color: #f5f5f5; 350 | border: 1px solid #ccc; 351 | @include border-radius(3px 0 0 3px); 352 | } 353 | .active { 354 | background-color: lighten($green, 30); 355 | border-color: $green; 356 | } 357 | } 358 | .input-prepend { 359 | .add-on { 360 | *margin-top: 1px; /* IE6-7 */ 361 | } 362 | } 363 | .input-append { 364 | input, .uneditable-input { 365 | float: left; 366 | @include border-radius(3px 0 0 3px); 367 | } 368 | .uneditable-input { 369 | border-right-color: #ccc; 370 | } 371 | .add-on { 372 | margin-right: 0; 373 | margin-left: -1px; 374 | @include border-radius(0 3px 3px 0); 375 | } 376 | input:first-child { 377 | // In IE7, having a hasLayout container (from clearfix's zoom:1) can make the first input 378 | // inherit the sum of its ancestors' margins. 379 | *margin-left: -160px; 380 | 381 | &+.add-on { 382 | *margin-left: -21px; 383 | } 384 | } 385 | } 386 | 387 | 388 | 389 | // SEARCH FORM 390 | // ----------- 391 | 392 | .search-query { 393 | padding-left: 14px; 394 | padding-right: 14px; 395 | margin-bottom: 0; // remove the default margin on all inputs 396 | @include border-radius(14px); 397 | } 398 | 399 | 400 | 401 | // HORIZONTAL & VERTICAL FORMS 402 | // --------------------------- 403 | 404 | // Common properties 405 | // ----------------- 406 | 407 | .form-search, .form-inline, .form-horizontal { 408 | input, textarea, select, .help-inline, .uneditable-input { 409 | display: inline-block; 410 | margin-bottom: 0; 411 | } 412 | // Re-hide elemnts due to specifity 413 | .hide { display: none; } 414 | } 415 | .form-search label, .form-inline label, .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { 416 | display: inline-block; 417 | } 418 | // Make the prepend and append add-on vertical-align: middle; 419 | .form-search .input-append .add-on, .form-inline .input-prepend .add-on, .form-search .input-append .add-on, .form-inline .input-prepend .add-on { 420 | vertical-align: middle; 421 | } 422 | // Inline checkbox/radio labels 423 | .form-search .radio, .form-inline .radio, .form-search .checkbox, .form-inline .checkbox { 424 | margin-bottom: 0; 425 | vertical-align: middle; 426 | } 427 | 428 | // Margin to space out fieldsets 429 | .control-group { 430 | margin-bottom: $baseLineHeight / 2; 431 | } 432 | 433 | // Legend collapses margin, so next elements is responsible for spacing 434 | legend + .control-group { 435 | margin-top: $baseLineHeight; 436 | -webkit-margin-top-collapse: separate; 437 | } 438 | 439 | // Horizontal-specific styles 440 | // -------------------------- 441 | 442 | .form-horizontal { 443 | // Increase spacing between groups 444 | .control-group { 445 | margin-bottom: $baseLineHeight; 446 | @include clearfix(); 447 | } 448 | // Float the labels left 449 | .control-label { 450 | float: left; 451 | width: 140px; 452 | padding-top: 5px; 453 | text-align: right; 454 | } 455 | // Move over all input controls and content 456 | .controls { 457 | margin-left: 160px; 458 | } 459 | // Move over buttons in .form-actions to align with .controls 460 | .form-actions { 461 | padding-left: 160px; 462 | } 463 | } 464 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/bootstrap/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins.less 2 | // Snippets of reusable CSS to develop faster and keep code readable 3 | // ----------------------------------------------------------------- 4 | 5 | 6 | // UTILITY MIXINS 7 | // -------------------------------------------------- 8 | 9 | // Clearfix 10 | // -------- 11 | // For clearing floats like a boss h5bp.com/q 12 | @mixin clearfix() { 13 | *zoom: 1; 14 | &:before, 15 | &:after { 16 | display: table; 17 | content: ""; 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | .clearfix { @include clearfix(); } 24 | 25 | // Webkit-style focus 26 | // ------------------ 27 | @mixin tab-focus() { 28 | // Default 29 | outline: thin dotted #333; 30 | // Webkit 31 | outline: 5px auto -webkit-focus-ring-color; 32 | outline-offset: -2px; 33 | } 34 | 35 | // Center-align a block level element 36 | // ---------------------------------- 37 | @mixin center-block() { 38 | display: block; 39 | margin-left: auto; 40 | margin-right: auto; 41 | } 42 | 43 | // IE7 inline-block 44 | // ---------------- 45 | @mixin ie7-inline-block() { 46 | *display: inline; /* IE7 inline-block hack */ 47 | *zoom: 1; 48 | } 49 | 50 | // IE7 likes to collapse whitespace on either side of the inline-block elements. 51 | // Ems because we're attempting to match the width of a space character. Left 52 | // version is for form buttons, which typically come after other elements, and 53 | // right version is for icons, which come before. Applying both is ok, but it will 54 | // mean that space between those elements will be .6em (~2 space characters) in IE7, 55 | // instead of the 1 space in other browsers. 56 | @mixin ie7-restore-left-whitespace() { 57 | *margin-left: .3em; 58 | 59 | &:first-child { 60 | *margin-left: 0; 61 | } 62 | } 63 | 64 | @mixin ie7-restore-right-whitespace() { 65 | *margin-right: .3em; 66 | 67 | &:last-child { 68 | *margin-left: 0; 69 | } 70 | } 71 | 72 | // Sizing shortcuts 73 | // ------------------------- 74 | @mixin size($height: 5px, $width: 5px) { 75 | width: $width; 76 | height: $height; 77 | } 78 | @mixin square($size: 5px) { 79 | @include size($size, $size); 80 | } 81 | 82 | // Placeholder text 83 | // ------------------------- 84 | @mixin placeholder($color: $placeholderText) { 85 | :-moz-placeholder { 86 | color: $color; 87 | } 88 | ::-webkit-input-placeholder { 89 | color: $color; 90 | } 91 | } 92 | 93 | // Text overflow 94 | // ------------------------ 95 | @mixin text-overflow() { 96 | overflow: hidden; 97 | text-overflow: ellipsis; 98 | white-space: nowrap; 99 | } 100 | 101 | 102 | // FONTS 103 | // -------------------------------------------------- 104 | @mixin font-family-serif() { 105 | font-family: Georgia, "Times New Roman", Times, serif; 106 | } 107 | @mixin font-family-sans-serif() { 108 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 109 | } 110 | @mixin font-family-monospace() { 111 | font-family: Menlo, Monaco, "Courier New", monospace; 112 | } 113 | @mixin font-shorthand($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { 114 | font-size: $size; 115 | font-weight: $weight; 116 | line-height: $lineHeight; 117 | } 118 | @mixin font-serif($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { 119 | @include font-family-serif(); 120 | @include font-shorthand($size, $weight, $lineHeight); 121 | } 122 | @mixin font-sans-serif($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { 123 | @include font-family-sans-serif(); 124 | @include font-shorthand($size, $weight, $lineHeight); 125 | } 126 | @mixin font-monospace($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { 127 | @include font-family-monospace(); 128 | @include font-shorthand($size, $weight, $lineHeight); 129 | } 130 | 131 | 132 | 133 | // GRID SYSTEM 134 | // -------------------------------------------------- 135 | 136 | // Site container 137 | // ------------------------- 138 | @mixin container-fixed() { 139 | width: $gridRowWidth; 140 | margin-left: auto; 141 | margin-right: auto; 142 | @include clearfix(); 143 | } 144 | 145 | // Le grid system 146 | // ------------------------- 147 | 148 | // Setup the mixins to be used 149 | @mixin gridSystemColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $columns) { 150 | width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1)); 151 | } 152 | @mixin gridSystemOffset($gridColumnWidth, $gridGutterWidth, $columns) { 153 | margin-left: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1)) + ($gridGutterWidth * 2); 154 | } 155 | @mixin gridSystemGridColumn($gridGutterWidth) { 156 | float: left; 157 | margin-left: $gridGutterWidth; 158 | } 159 | // Take these values and mixins, and make 'em do their thang 160 | @mixin gridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth) { 161 | // Row surrounds the columns 162 | .row { 163 | margin-left: $gridGutterWidth * -1; 164 | @include clearfix(); 165 | } 166 | // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks @dhg) 167 | [class*="span"] { 168 | @include gridSystemGridColumn($gridGutterWidth); 169 | } 170 | // Default columns 171 | @for $i from 1 through $gridColumns { 172 | .span#{$i} { @include gridSystemColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $i) } 173 | } 174 | .container { @include gridSystemColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $gridColumns) } 175 | 176 | // Offset column options 177 | @for $i from 1 through $gridColumns - 1 { 178 | .offset#{$i} { @include gridSystemOffset($gridColumnWidth, $gridGutterWidth, $i) } 179 | } 180 | } 181 | 182 | // Fluid grid system 183 | // ------------------------- 184 | @mixin fluidGridSystemColumns($fluidGridGutterWidth, $fluidGridColumnWidth, $columns) { 185 | width: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1)); 186 | } 187 | @mixin fluidGridSystemGridColumn($fluidGridGutterWidth) { 188 | float: left; 189 | margin-left: $fluidGridGutterWidth; 190 | } 191 | // Take these values and mixins, and make 'em do their thang 192 | @mixin fluidGridSystemGenerate($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth) { 193 | // Row surrounds the columns 194 | .row-fluid { 195 | width: 100%; 196 | @include clearfix(); 197 | 198 | // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks @dhg) 199 | > [class*="span"] { 200 | @include fluidGridSystemGridColumn($fluidGridGutterWidth); 201 | } 202 | > [class*="span"]:first-child { 203 | margin-left: 0; 204 | } 205 | // Default columns 206 | @for $i from 1 through $gridColumns { 207 | > .span#{$i} { @include fluidGridSystemColumns($fluidGridGutterWidth, $fluidGridColumnWidth, $i); } 208 | } 209 | } 210 | } 211 | 212 | // Input grid system 213 | // ------------------------- 214 | @mixin inputGridSystemInputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $columns) { 215 | width: (($gridColumnWidth) * $columns) + ($gridGutterWidth * ($columns - 1)) - 10; 216 | } 217 | @mixin inputGridSystemGenerate($gridColumns, $gridColumnWidth, $gridGutterWidth) { 218 | input, textarea, .uneditable-input { 219 | @for $i from 1 through $gridColumns { 220 | &.span#{$i} { @include inputGridSystemInputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $i); } 221 | } 222 | } 223 | } 224 | 225 | // Make a grid 226 | // ------------------------- 227 | // Use makeRow() and makeColumn() to assign semantic layouts grid system behaviour 228 | @mixin makeRow() { 229 | margin-left: $gridGutterWidth * -1; 230 | @include clearfix(); 231 | } 232 | @mixin makeColumn($columns: 1) { 233 | float: left; 234 | margin-left: $gridGutterWidth; 235 | width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1)); 236 | } 237 | 238 | 239 | // Form field states (used in forms.less) 240 | // -------------------------------------------------- 241 | 242 | // Mixin for form field states 243 | @mixin formFieldState($textColor: #555, $borderColor: #ccc, $backgroundColor: #f5f5f5) { 244 | // Set the text color 245 | > label, .help-block, .help-inline { 246 | color: $textColor; 247 | } 248 | // Style inputs accordingly 249 | input, select, textarea { 250 | color: $textColor; 251 | border-color: $borderColor; 252 | &:focus { 253 | border-color: darken($borderColor, 10%); 254 | @include box-shadow(0 0 6px lighten($borderColor, 20%)); 255 | } 256 | } 257 | // Give a small background color for input-prepend/-append 258 | .input-prepend .add-on, .input-append .add-on { 259 | color: $textColor; 260 | background-color: $backgroundColor; 261 | border-color: $textColor; 262 | } 263 | } 264 | 265 | 266 | // CSS3 PROPERTIES 267 | // -------------------------------------------------- 268 | 269 | // Border Radius 270 | @mixin border-radius($radius: 5px) { 271 | -webkit-border-radius: $radius; 272 | -moz-border-radius: $radius; 273 | border-radius: $radius; 274 | } 275 | 276 | // Drop shadows 277 | @mixin box-shadow($shadow: 0 1px 3px rgba(0,0,0,.25)) { 278 | -webkit-box-shadow: $shadow; 279 | -moz-box-shadow: $shadow; 280 | box-shadow: $shadow; 281 | } 282 | 283 | // Transitions 284 | @mixin transition($transition) { 285 | -webkit-transition: $transition; 286 | -moz-transition: $transition; 287 | -ms-transition: $transition; 288 | -o-transition: $transition; 289 | transition: $transition; 290 | } 291 | 292 | // Transformations 293 | @mixin rotate($degrees) { 294 | -webkit-transform: rotate($degrees); 295 | -moz-transform: rotate($degrees); 296 | -ms-transform: rotate($degrees); 297 | -o-transform: rotate($degrees); 298 | transform: rotate($degrees); 299 | } 300 | @mixin scale($ratio) { 301 | -webkit-transform: scale($ratio); 302 | -moz-transform: scale($ratio); 303 | -ms-transform: scale($ratio); 304 | -o-transform: scale($ratio); 305 | transform: scale($ratio); 306 | } 307 | @mixin translate($x: 0, $y: 0) { 308 | -webkit-transform: translate($x, $y); 309 | -moz-transform: translate($x, $y); 310 | -ms-transform: translate($x, $y); 311 | -o-transform: translate($x, $y); 312 | transform: translate($x, $y); 313 | } 314 | 315 | @mixin skew($x: 0, $y: 0) { 316 | -webkit-transform: skew($x, $y); 317 | -moz-transform: skew($x, $y); 318 | -ms-transform: skew($x, $y); 319 | -o-transform: skew($x, $y); 320 | transform: skew($x, $y); 321 | } 322 | 323 | @mixin translate3d($x: 0, $y: 0, $z: 0) { 324 | -webkit-transform: translate($x, $y, $z); 325 | -moz-transform: translate($x, $y, $z); 326 | -ms-transform: translate($x, $y, $z); 327 | -o-transform: translate($x, $y, $z); 328 | transform: translate($x, $y, $z); 329 | } 330 | 331 | // Background clipping 332 | // Heads up: FF 3.6 and under need "padding" instead of "padding-box" 333 | @mixin background-clip($clip) { 334 | -webkit-background-clip: $clip; 335 | -moz-background-clip: $clip; 336 | background-clip: $clip; 337 | } 338 | 339 | // Background sizing 340 | @mixin background-size($size){ 341 | -webkit-background-size: $size; 342 | -moz-background-size: $size; 343 | -o-background-size: $size; 344 | background-size: $size; 345 | } 346 | 347 | 348 | // Box sizing 349 | @mixin box-sizing($boxmodel) { 350 | -webkit-box-sizing: $boxmodel; 351 | -moz-box-sizing: $boxmodel; 352 | box-sizing: $boxmodel; 353 | } 354 | 355 | // User select 356 | // For selecting text on the page 357 | @mixin user-select($select) { 358 | -webkit-user-select: $select; 359 | -moz-user-select: $select; 360 | -o-user-select: $select; 361 | user-select: $select; 362 | } 363 | 364 | // Resize anything 365 | @mixin resizable($direction: both) { 366 | resize: $direction; // Options: horizontal, vertical, both 367 | overflow: auto; // Safari fix 368 | } 369 | 370 | // CSS3 Content Columns 371 | @mixin content-columns($columnCount, $columnGap: $gridColumnGutter) { 372 | -webkit-column-count: $columnCount; 373 | -moz-column-count: $columnCount; 374 | column-count: $columnCount; 375 | -webkit-column-gap: $columnGap; 376 | -moz-column-gap: $columnGap; 377 | column-gap: $columnGap; 378 | } 379 | 380 | // Opacity 381 | @mixin opacity($opacity: 1) { 382 | opacity: $opacity; 383 | filter: alpha(opacity=$opacity * 100); 384 | } 385 | 386 | 387 | 388 | // BACKGROUNDS 389 | // -------------------------------------------------- 390 | 391 | // Add an alphatransparency value to any background or border color (via Elyse Holladay) 392 | @mixin translucent-background($color: $white, $alpha: 1) { 393 | background-color: hsla(hue($color), saturation($color), lightness($color), $alpha); 394 | } 395 | @mixin translucent-border($color: $white, $alpha: 1) { 396 | border-color: hsla(hue($color), saturation($color), lightness($color), $alpha); 397 | @include background-clip(padding-box); 398 | } 399 | 400 | // Gradient Bar Colors for buttons and alerts 401 | @mixin gradientBar($primaryColor, $secondaryColor) { 402 | @include gradient-vertical($primaryColor, $secondaryColor); 403 | border-color: $secondaryColor $secondaryColor darken($secondaryColor, 15%); 404 | border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%); 405 | } 406 | 407 | // Gradients 408 | @mixin gradient-horizontal($startColor: #555, $endColor: #333) { 409 | background-color: $endColor; 410 | background-image: -moz-linear-gradient(left, $startColor, $endColor); // FF 3.6+ 411 | background-image: -ms-linear-gradient(left, $startColor, $endColor); // IE10 412 | background-image: -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+ 413 | background-image: -webkit-linear-gradient(left, $startColor, $endColor); // Safari 5.1+, Chrome 10+ 414 | background-image: -o-linear-gradient(left, $startColor, $endColor); // Opera 11.10 415 | background-image: linear-gradient(left, $startColor, $endColor); // Le standard 416 | background-repeat: repeat-x; 417 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=1); // IE9 and down 418 | } 419 | @mixin gradient-vertical($startColor: #555, $endColor: #333) { 420 | background-color: mix($startColor, $endColor, 60%); 421 | background-image: -moz-linear-gradient(top, $startColor, $endColor); // FF 3.6+ 422 | background-image: -ms-linear-gradient(top, $startColor, $endColor); // IE10 423 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), to($endColor)); // Safari 4+, Chrome 2+ 424 | background-image: -webkit-linear-gradient(top, $startColor, $endColor); // Safari 5.1+, Chrome 10+ 425 | background-image: -o-linear-gradient(top, $startColor, $endColor); // Opera 11.10 426 | background-image: linear-gradient(top, $startColor, $endColor); // The standard 427 | background-repeat: repeat-x; 428 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=0); // IE9 and down 429 | } 430 | @mixin gradient-directional($startColor: #555, $endColor: #333, $deg: 45deg) { 431 | background-color: $endColor; 432 | background-repeat: repeat-x; 433 | background-image: -moz-linear-gradient($deg, $startColor, $endColor); // FF 3.6+ 434 | background-image: -ms-linear-gradient($deg, $startColor, $endColor); // IE10 435 | background-image: -webkit-linear-gradient($deg, $startColor, $endColor); // Safari 5.1+, Chrome 10+ 436 | background-image: -o-linear-gradient($deg, $startColor, $endColor); // Opera 11.10 437 | background-image: linear-gradient($deg, $startColor, $endColor); // The standard 438 | } 439 | @mixin gradient-vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) { 440 | background-color: mix($midColor, $endColor, 80%); 441 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), color-stop($colorStop, $midColor), to($endColor)); 442 | background-image: -webkit-linear-gradient($startColor, $midColor $colorStop, $endColor); 443 | background-image: -moz-linear-gradient(top, $startColor, $midColor $colorStop, $endColor); 444 | background-image: -ms-linear-gradient($startColor, $midColor $colorStop, $endColor); 445 | background-image: -o-linear-gradient($startColor, $midColor $colorStop, $endColor); 446 | background-image: linear-gradient($startColor, $midColor $colorStop, $endColor); 447 | background-repeat: no-repeat; 448 | 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 449 | } 450 | @mixin gradient-radial($innerColor: #555, $outerColor: #333) { 451 | background-color: $outerColor; 452 | background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($innerColor), to($outerColor)); 453 | background-image: -webkit-radial-gradient(circle, $innerColor, $outerColor); 454 | background-image: -moz-radial-gradient(circle, $innerColor, $outerColor); 455 | background-image: -ms-radial-gradient(circle, $innerColor, $outerColor); 456 | background-repeat: no-repeat; 457 | // Opera cannot do radial gradients yet 458 | } 459 | @mixin gradient-striped($color, $angle: -45deg) { 460 | background-color: $color; 461 | 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)); 462 | 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); 463 | 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); 464 | 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); 465 | 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); 466 | 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)); 467 | } 468 | // Reset filters for IE 469 | @mixin reset-filter() { 470 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 471 | } 472 | 473 | 474 | // Mixin for generating button backgrounds 475 | // --------------------------------------- 476 | @mixin buttonBackground($startColor, $endColor) { 477 | // gradientBar will set the background to a pleasing blend of these, to support IE<=9 478 | @include gradientBar($startColor, $endColor); 479 | @include reset-filter(); 480 | 481 | // in these cases the gradient won't cover the background, so we override 482 | &:hover, &:active, &.active, &.disabled, &[disabled] { 483 | background-color: $endColor; 484 | } 485 | 486 | // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves 487 | &:active, &.active { 488 | background-color: darken($endColor, 10%) \9; 489 | } 490 | } 491 | 492 | 493 | // COMPONENT MIXINS 494 | // -------------------------------------------------- 495 | 496 | // POPOVER ARROWS 497 | // ------------------------- 498 | // For tipsies and popovers 499 | @mixin popoverArrowTop($arrowWidth: 5px) { 500 | bottom: 0; 501 | left: 50%; 502 | margin-left: -$arrowWidth; 503 | border-left: $arrowWidth solid transparent; 504 | border-right: $arrowWidth solid transparent; 505 | border-top: $arrowWidth solid $black; 506 | } 507 | @mixin popoverArrowLeft($arrowWidth: 5px) { 508 | top: 50%; 509 | right: 0; 510 | margin-top: -$arrowWidth; 511 | border-top: $arrowWidth solid transparent; 512 | border-bottom: $arrowWidth solid transparent; 513 | border-left: $arrowWidth solid $black; 514 | } 515 | @mixin popoverArrowBottom($arrowWidth: 5px) { 516 | top: 0; 517 | left: 50%; 518 | margin-left: -$arrowWidth; 519 | border-left: $arrowWidth solid transparent; 520 | border-right: $arrowWidth solid transparent; 521 | border-bottom: $arrowWidth solid $black; 522 | } 523 | @mixin popoverArrowRight($arrowWidth: 5px) { 524 | top: 50%; 525 | left: 0; 526 | margin-top: -$arrowWidth; 527 | border-top: $arrowWidth solid transparent; 528 | border-bottom: $arrowWidth solid transparent; 529 | border-right: $arrowWidth solid $black; 530 | } 531 | --------------------------------------------------------------------------------