├── .gitignore ├── .ruby-version ├── .travis.yml ├── Gemfile ├── LICENSE.txt ├── README.md ├── Rakefile ├── bin └── hyperloop ├── hyperloop.gemspec ├── lib ├── hyperloop.rb └── hyperloop │ ├── application.rb │ ├── cli.rb │ ├── generators │ ├── site.rb │ └── site │ │ ├── Gemfile │ │ ├── _partial.html.erb │ │ ├── about.html.erb │ │ ├── app.css │ │ ├── app.js │ │ ├── application.html.erb │ │ ├── bootstrap.css │ │ ├── config.ru │ │ ├── current-time.coffee │ │ ├── index.html.erb │ │ ├── jquery.js │ │ ├── main.scss │ │ └── socool.jpg │ ├── response.rb │ ├── version.rb │ ├── view.rb │ └── view │ ├── registry.rb │ └── scope.rb └── spec ├── application_spec.rb ├── fixtures ├── assets │ ├── app │ │ ├── assets │ │ │ ├── images │ │ │ │ ├── my-gif.gif │ │ │ │ ├── my-jpg.jpg │ │ │ │ └── my-png.png │ │ │ ├── javascripts │ │ │ │ ├── app.js │ │ │ │ └── my-scripts.coffee │ │ │ ├── shouldfail │ │ │ │ └── shouldfail.css │ │ │ └── stylesheets │ │ │ │ ├── app.css │ │ │ │ └── my-styles.scss │ │ └── views │ │ │ ├── index.html.erb │ │ │ └── layouts │ │ │ └── application.html.erb │ └── vendor │ │ └── assets │ │ ├── javascripts │ │ └── vendored.js │ │ └── stylesheets │ │ └── vendored.css ├── erb │ └── app │ │ └── views │ │ ├── about.html.erb │ │ └── index.html.erb ├── layouts │ └── app │ │ └── views │ │ ├── index.html.erb │ │ ├── layouts │ │ └── application.html.erb │ │ └── subdir │ │ └── index.html.erb ├── partials │ └── app │ │ └── views │ │ ├── index.html.erb │ │ ├── layouts │ │ └── application.html.erb │ │ └── subdir │ │ ├── _partial.html.erb │ │ ├── index.html.erb │ │ └── nonroot.html.erb ├── simple │ └── app │ │ └── views │ │ ├── about.html │ │ └── index.html └── subdirectories │ └── app │ └── views │ ├── about.html │ ├── index.html │ └── subdir1 │ ├── index.html │ └── kanye.html ├── response_spec.rb ├── spec_helper.rb ├── view ├── registry_spec.rb └── scope_spec.rb └── view_spec.rb /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.0.0-p247 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.0.0 4 | - 1.9.3 5 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | # Specify your gem's dependencies in hyperloop.gemspec 4 | gemspec 5 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Jake Boxer 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hyperloop [![Build Status](https://travis-ci.org/jakeboxer/hyperloop.png?branch=master)](https://travis-ci.org/jakeboxer/hyperloop) 2 | 3 | Hyperloop is a framework that lets you make static websites with a technology stack familiar to Rails programmers. 4 | 5 | Before you keep reading, let's get one thing out of the way: 6 | 7 | ### If you think your website might need a database, do not use Hyperloop. 8 | 9 | I came up with the idea for Hyperloop after hearing one too many experienced web developers say "I don't even know how 10 | to set up a regular website anymore." 11 | 12 | With Hyperloop, you can create a new site just like you would with Rails. You can write ERB and Sass and CoffeeScript 13 | and all that other good stuff. You can use layouts and partials and deploy to Heroku. 14 | 15 | Basically, you can do all the stuff you're used to with Rails. On top of that, you don't have to type any of the magic 16 | incantations that just aren't necessary in a static site. You don't have to set up routes. You don't have to make 17 | controllers with a method for every view. You don't have to think about environments or tests or schemas or helpers or 18 | any of the other boilerplate directories/files that would clutter up a static site being shoehorned into a Rails app. 19 | 20 | ## Getting Started 21 | 22 | 1. Install Hyperloop and Thin at the command prompt if you haven't yet: 23 | 24 | gem install hyperloop 25 | gem install thin 26 | 27 | 2. At the command prompt, create a new Hyperloop site: 28 | 29 | hyperloop new mysite 30 | 31 | where "mysite" is the site name. 32 | 33 | 3. Change directory to `mysite` and start the web server: 34 | 35 | cd mysite 36 | thin start 37 | 38 | 4. Go to [http://localhost:3000/](http://localhost:3000/) and you'll see your brand new website! 39 | 40 | ## Structure 41 | 42 | ### Layout 43 | 44 | Your layout is in `app/views/layouts/application.html.erb`. 45 | 46 | ### Views 47 | 48 | Your site root is in `app/views/index.html.erb`. 49 | 50 | If you create `app/views/hello.html.erb`, you'll be able to get to it by going to 51 | [http://localhost:3000/hello/](http://localhost:3000/hello/). 52 | 53 | ### Subdirectories 54 | 55 | You can nest views in subdirectories. If you create the following files, the following URLs will work: 56 | 57 | - `app/views/people/ted_nyman.html.erb` will make [http://localhost:3000/people/ted_nyman/](http://localhost:3000/people/ted_nyman/) work. 58 | - `app/views/people/index.html.erb` will make [http://localhost:3000/people/](http://localhost:3000/people/) work. 59 | - `app/views/projects/2013/yeezus.html.erb` will make [http://localhost:3000/projects/2013/yeezus/](http://localhost:3000/projects/2013/yeezus/) work. 60 | 61 | ### Partials 62 | 63 | If you create `app/views/_some_section.html.erb`, you'll be able to load it as a partial almost like you would in Rails: 64 | 65 | ``` ruby 66 | <%= render "some_section" %> 67 | ``` 68 | 69 | Note: In Rails, it's `<%= render :partial => "some_section" %>`, since there are other things you could want to render 70 | besides a partial. In Hyperloop, there aren't, so the options hash isn't necessary. 71 | 72 | ### CSS, SCSS, Sass, JavaScript, and CoffeeScript 73 | 74 | If you create some files like: 75 | 76 | ``` 77 | app/assets/stylesheets/bootstrap.css 78 | app/assets/stylesheets/stylez1.css 79 | app/assets/stylesheets/stylez2.scss 80 | app/assets/javascripts/jquery.js 81 | app/assets/javascripts/scriptz1.js 82 | app/assets/javascripts/scriptz2.coffee 83 | ``` 84 | 85 | They'll be included in all your views, so long as you have these two tags: 86 | 87 | ``` html 88 | 89 | 90 | 91 | 92 | 93 | ``` 94 | 95 | somewhere in your layout. All your CSS and JS assets belong in these folders, including vendored ones like jQuery and Bootstrap. 96 | 97 | ### Images 98 | 99 | If you create `app/assets/images/photo.jpg`, you'll be able to show it in a view with ``. 100 | 101 | ## Contributing 102 | 103 | 1. Fork it 104 | 2. Create your feature branch (`git checkout -b my-new-feature`) 105 | 3. Commit your changes (`git commit -am 'Add some feature'`) 106 | 4. Push to the branch (`git push origin my-new-feature`) 107 | 5. Create new Pull Request 108 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require "bundler/gem_tasks" 2 | require "rspec/core/rake_task" 3 | 4 | RSpec::Core::RakeTask.new(:spec) 5 | 6 | task :default => :spec 7 | -------------------------------------------------------------------------------- /bin/hyperloop: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | lib = File.expand_path(File.dirname(__FILE__) + '/../lib') 4 | $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib) 5 | require "hyperloop/cli" 6 | 7 | Hyperloop::CLI.start 8 | -------------------------------------------------------------------------------- /hyperloop.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | lib = File.expand_path("../lib", __FILE__) 3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 4 | require "hyperloop/version" 5 | 6 | Gem::Specification.new do |spec| 7 | spec.name = "hyperloop" 8 | spec.version = Hyperloop::VERSION 9 | spec.authors = ["Jake Boxer"] 10 | spec.email = ["jake@github.com"] 11 | spec.description = %q{Hyperloop lets you make simple websites with a technology stack familiar to Rails programmers.} 12 | spec.summary = %q{Make simple websites with Rails conventions and conveniences.} 13 | spec.homepage = "" 14 | spec.license = "MIT" 15 | 16 | spec.files = `git ls-files`.split($/) 17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 19 | spec.require_paths = ["lib"] 20 | 21 | spec.add_dependency "coffee-script", "~> 2.2.0" 22 | spec.add_dependency "rack", "~> 1.5" 23 | spec.add_dependency "sass", "~> 3.2.12" 24 | spec.add_dependency "sprockets", "~> 2.10.0" 25 | spec.add_dependency "thor", "~> 0.18.1" 26 | spec.add_dependency "tilt", "~> 1.4.1" 27 | spec.add_dependency "yui-compressor", "~> 0.12.0" 28 | 29 | spec.add_development_dependency "bundler", "~> 1.3" 30 | spec.add_development_dependency "nokogiri", "~> 1.6.0" 31 | spec.add_development_dependency "pry" 32 | spec.add_development_dependency "pry-debugger" 33 | spec.add_development_dependency "rake" 34 | spec.add_development_dependency "rspec", "~> 2.14" 35 | end 36 | -------------------------------------------------------------------------------- /lib/hyperloop.rb: -------------------------------------------------------------------------------- 1 | require "hyperloop/application" 2 | require "hyperloop/response" 3 | require "hyperloop/version" 4 | require "hyperloop/view" 5 | require "hyperloop/view/registry" 6 | require "hyperloop/view/scope" 7 | 8 | module Hyperloop 9 | end 10 | -------------------------------------------------------------------------------- /lib/hyperloop/application.rb: -------------------------------------------------------------------------------- 1 | require "rack" 2 | require "sprockets" 3 | require "yui/compressor" 4 | 5 | module Hyperloop 6 | class Application 7 | include Rack::Utils 8 | 9 | def initialize(root=nil) 10 | @root = root 11 | end 12 | 13 | # Rack call interface. 14 | def call(env) 15 | request = Rack::Request.new(env) 16 | response = Response.new 17 | 18 | if self.class.asset_path?(request.path) && asset = assets[normalized_asset_path(request.path)] 19 | # If the path is for an asset, find the specified asset and use its data 20 | # as the response body. 21 | response["Content-Type"] = asset.content_type 22 | response.write(asset.source) 23 | elsif view = view_registry.find_template_view(normalized_request_path(request.path)) 24 | # If there's a view at the path, use its data as the response body. 25 | data = view.render(request) 26 | response.write(data) 27 | else 28 | # If there's no view at the path, 404. 29 | response.status = 404 30 | end 31 | 32 | response.finish 33 | end 34 | 35 | private 36 | 37 | # Internal: Is the specified path for assets? 38 | # 39 | # path - Path to check. 40 | # 41 | # Returns a boolean. 42 | def self.asset_path?(path) 43 | path =~ /^\/assets\/(images|javascripts|stylesheets)\// 44 | end 45 | 46 | # Internal: The sprockets environment for the app. 47 | # 48 | # Returns a Sprockets::Environment. 49 | def assets 50 | @assets = nil unless production? 51 | 52 | @assets ||= Sprockets::Environment.new(@root) do |env| 53 | env.version = ENV["RACK_ENV"] 54 | 55 | env.append_path(File.join("app", "assets")) 56 | env.append_path(File.join("vendor", "assets")) 57 | 58 | # compress everything in production 59 | if production? 60 | env.js_compressor = YUI::JavaScriptCompressor.new(:munge => true) 61 | env.css_compressor = YUI::CssCompressor.new 62 | end 63 | end 64 | end 65 | 66 | # Internal: Get a normalized version of the specified asset path. 67 | # 68 | # path - Asset path to normalize 69 | # 70 | # Returns a string. 71 | def normalized_asset_path(path) 72 | path.sub(/^\/assets\//, "") 73 | end 74 | 75 | # Internal: Get a normalized version of the specified request path. 76 | # 77 | # path - Request path to normalize 78 | # 79 | # Returns a string. 80 | def normalized_request_path(path) 81 | if path == "/" 82 | path 83 | else 84 | path.chomp("/") 85 | end 86 | end 87 | 88 | # Internal: Are we running in production mode? 89 | # 90 | # Returns a boolean. 91 | def production? 92 | ENV["RACK_ENV"] == "production" 93 | end 94 | 95 | # Internal: The view registry to use for the app. 96 | # 97 | # Returns a Hyperloop::View::Registry 98 | def view_registry 99 | @view_registry = nil unless production? 100 | @view_registry ||= View::Registry.new(@root) 101 | end 102 | end 103 | end 104 | -------------------------------------------------------------------------------- /lib/hyperloop/cli.rb: -------------------------------------------------------------------------------- 1 | require "hyperloop/generators/site" 2 | require "thor" 3 | 4 | module Hyperloop 5 | class CLI < Thor 6 | desc "new SITENAME", "Create a new Hyperloop site. \"hyperloop new my_site\" creates a new site called MySite in \"./my_site\"" 7 | def new(name) 8 | Hyperloop::Generators::Site.start([name]) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site.rb: -------------------------------------------------------------------------------- 1 | require "thor/group" 2 | require "hyperloop/version" 3 | 4 | module Hyperloop 5 | module Generators 6 | class Site < Thor::Group 7 | include Thor::Actions 8 | 9 | argument :name, :type => :string 10 | 11 | def self.source_root 12 | File.join(File.dirname(__FILE__), "site") 13 | end 14 | 15 | def create_directories 16 | empty_directory(name) 17 | empty_directory(File.join(name, "app")) 18 | empty_directory(File.join(name, "app", "assets")) 19 | empty_directory(File.join(name, "app", "assets", "images")) 20 | empty_directory(File.join(name, "app", "assets", "javascripts")) 21 | empty_directory(File.join(name, "app", "assets", "stylesheets")) 22 | empty_directory(File.join(name, "app", "views")) 23 | empty_directory(File.join(name, "app", "views", "layouts")) 24 | empty_directory(File.join(name, "vendor")) 25 | empty_directory(File.join(name, "vendor", "assets")) 26 | empty_directory(File.join(name, "vendor", "assets", "javascripts")) 27 | empty_directory(File.join(name, "vendor", "assets", "stylesheets")) 28 | end 29 | 30 | def copy_files 31 | template("config.ru", File.join(name, "config.ru")) 32 | template("Gemfile", File.join(name, "Gemfile")) 33 | copy_file("socool.jpg", File.join(name, "app", "assets", "images", "socool.jpg")) 34 | template("app.js", File.join(name, "app", "assets", "javascripts", "app.js")) 35 | template("current-time.coffee", File.join(name, "app", "assets", "javascripts", "current-time.coffee")) 36 | template("app.css", File.join(name, "app", "assets", "stylesheets", "app.css")) 37 | template("main.scss", File.join(name, "app", "assets", "stylesheets", "main.scss")) 38 | template("application.html.erb", File.join(name, "app", "views", "layouts", "application.html.erb")) 39 | template("index.html.erb", File.join(name, "app", "views", "index.html.erb")) 40 | template("about.html.erb", File.join(name, "app", "views", "about.html.erb")) 41 | template("_partial.html.erb", File.join(name, "app", "views", "_partial.html.erb")) 42 | template("jquery.js", File.join(name, "vendor", "assets", "javascripts", "jquery.js")) 43 | template("bootstrap.css", File.join(name, "vendor", "assets", "stylesheets", "bootstrap.css")) 44 | end 45 | end 46 | end 47 | end 48 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "hyperloop", "<%= Hyperloop::VERSION %>" 4 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/_partial.html.erb: -------------------------------------------------------------------------------- 1 |

Here's a partial! You know it's a partial because the filename starts with an underscore.

2 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/about.html.erb: -------------------------------------------------------------------------------- 1 |

About

2 | 3 |

This page is accessible by making a request to /about from your browser.

4 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/app.css: -------------------------------------------------------------------------------- 1 | //= require_tree ../../../vendor/assets/stylesheets 2 | //= require_tree . 3 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/app.js: -------------------------------------------------------------------------------- 1 | //= require_tree ../../../vendor/assets/javascripts 2 | //= require_tree . 3 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%= name.capitalize %> 5 | 6 | 7 | 8 | 9 | 10 |

Welcome to <%= name.capitalize %>!

11 | 12 | 18 | 19 | <%%= yield %> 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/bootstrap.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.0.0 3 | * 4 | * Copyright 2013 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 by @mdo and @fat. 9 | */ 10 | 11 | /*! normalize.css v2.1.0 | MIT License | git.io/normalize */ 12 | 13 | article, 14 | aside, 15 | details, 16 | figcaption, 17 | figure, 18 | footer, 19 | header, 20 | hgroup, 21 | main, 22 | nav, 23 | section, 24 | summary { 25 | display: block; 26 | } 27 | 28 | audio, 29 | canvas, 30 | video { 31 | display: inline-block; 32 | } 33 | 34 | audio:not([controls]) { 35 | display: none; 36 | height: 0; 37 | } 38 | 39 | [hidden] { 40 | display: none; 41 | } 42 | 43 | html { 44 | font-family: sans-serif; 45 | -webkit-text-size-adjust: 100%; 46 | -ms-text-size-adjust: 100%; 47 | } 48 | 49 | body { 50 | margin: 0; 51 | } 52 | 53 | a:focus { 54 | outline: thin dotted; 55 | } 56 | 57 | a:active, 58 | a:hover { 59 | outline: 0; 60 | } 61 | 62 | h1 { 63 | margin: 0.67em 0; 64 | font-size: 2em; 65 | } 66 | 67 | abbr[title] { 68 | border-bottom: 1px dotted; 69 | } 70 | 71 | b, 72 | strong { 73 | font-weight: bold; 74 | } 75 | 76 | dfn { 77 | font-style: italic; 78 | } 79 | 80 | hr { 81 | height: 0; 82 | -moz-box-sizing: content-box; 83 | box-sizing: content-box; 84 | } 85 | 86 | mark { 87 | color: #000; 88 | background: #ff0; 89 | } 90 | 91 | code, 92 | kbd, 93 | pre, 94 | samp { 95 | font-family: monospace, serif; 96 | font-size: 1em; 97 | } 98 | 99 | pre { 100 | white-space: pre-wrap; 101 | } 102 | 103 | q { 104 | quotes: "\201C" "\201D" "\2018" "\2019"; 105 | } 106 | 107 | small { 108 | font-size: 80%; 109 | } 110 | 111 | sub, 112 | sup { 113 | position: relative; 114 | font-size: 75%; 115 | line-height: 0; 116 | vertical-align: baseline; 117 | } 118 | 119 | sup { 120 | top: -0.5em; 121 | } 122 | 123 | sub { 124 | bottom: -0.25em; 125 | } 126 | 127 | img { 128 | border: 0; 129 | } 130 | 131 | svg:not(:root) { 132 | overflow: hidden; 133 | } 134 | 135 | figure { 136 | margin: 0; 137 | } 138 | 139 | fieldset { 140 | padding: 0.35em 0.625em 0.75em; 141 | margin: 0 2px; 142 | border: 1px solid #c0c0c0; 143 | } 144 | 145 | legend { 146 | padding: 0; 147 | border: 0; 148 | } 149 | 150 | button, 151 | input, 152 | select, 153 | textarea { 154 | margin: 0; 155 | font-family: inherit; 156 | font-size: 100%; 157 | } 158 | 159 | button, 160 | input { 161 | line-height: normal; 162 | } 163 | 164 | button, 165 | select { 166 | text-transform: none; 167 | } 168 | 169 | button, 170 | html input[type="button"], 171 | input[type="reset"], 172 | input[type="submit"] { 173 | cursor: pointer; 174 | -webkit-appearance: button; 175 | } 176 | 177 | button[disabled], 178 | html input[disabled] { 179 | cursor: default; 180 | } 181 | 182 | input[type="checkbox"], 183 | input[type="radio"] { 184 | padding: 0; 185 | box-sizing: border-box; 186 | } 187 | 188 | input[type="search"] { 189 | -webkit-box-sizing: content-box; 190 | -moz-box-sizing: content-box; 191 | box-sizing: content-box; 192 | -webkit-appearance: textfield; 193 | } 194 | 195 | input[type="search"]::-webkit-search-cancel-button, 196 | input[type="search"]::-webkit-search-decoration { 197 | -webkit-appearance: none; 198 | } 199 | 200 | button::-moz-focus-inner, 201 | input::-moz-focus-inner { 202 | padding: 0; 203 | border: 0; 204 | } 205 | 206 | textarea { 207 | overflow: auto; 208 | vertical-align: top; 209 | } 210 | 211 | table { 212 | border-collapse: collapse; 213 | border-spacing: 0; 214 | } 215 | 216 | @media print { 217 | * { 218 | color: #000 !important; 219 | text-shadow: none !important; 220 | background: transparent !important; 221 | box-shadow: none !important; 222 | } 223 | a, 224 | a:visited { 225 | text-decoration: underline; 226 | } 227 | a[href]:after { 228 | content: " (" attr(href) ")"; 229 | } 230 | abbr[title]:after { 231 | content: " (" attr(title) ")"; 232 | } 233 | .ir a:after, 234 | a[href^="javascript:"]:after, 235 | a[href^="#"]:after { 236 | content: ""; 237 | } 238 | pre, 239 | blockquote { 240 | border: 1px solid #999; 241 | page-break-inside: avoid; 242 | } 243 | thead { 244 | display: table-header-group; 245 | } 246 | tr, 247 | img { 248 | page-break-inside: avoid; 249 | } 250 | img { 251 | max-width: 100% !important; 252 | } 253 | @page { 254 | margin: 2cm .5cm; 255 | } 256 | p, 257 | h2, 258 | h3 { 259 | orphans: 3; 260 | widows: 3; 261 | } 262 | h2, 263 | h3 { 264 | page-break-after: avoid; 265 | } 266 | .navbar { 267 | display: none; 268 | } 269 | .table td, 270 | .table th { 271 | background-color: #fff !important; 272 | } 273 | .btn > .caret, 274 | .dropup > .btn > .caret { 275 | border-top-color: #000 !important; 276 | } 277 | .label { 278 | border: 1px solid #000; 279 | } 280 | .table { 281 | border-collapse: collapse !important; 282 | } 283 | .table-bordered th, 284 | .table-bordered td { 285 | border: 1px solid #ddd !important; 286 | } 287 | } 288 | 289 | *, 290 | *:before, 291 | *:after { 292 | -webkit-box-sizing: border-box; 293 | -moz-box-sizing: border-box; 294 | box-sizing: border-box; 295 | } 296 | 297 | html { 298 | font-size: 62.5%; 299 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 300 | } 301 | 302 | body { 303 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 304 | font-size: 14px; 305 | line-height: 1.428571429; 306 | color: #333333; 307 | background-color: #ffffff; 308 | } 309 | 310 | input, 311 | button, 312 | select, 313 | textarea { 314 | font-family: inherit; 315 | font-size: inherit; 316 | line-height: inherit; 317 | } 318 | 319 | button, 320 | input, 321 | select[multiple], 322 | textarea { 323 | background-image: none; 324 | } 325 | 326 | a { 327 | color: #428bca; 328 | text-decoration: none; 329 | } 330 | 331 | a:hover, 332 | a:focus { 333 | color: #2a6496; 334 | text-decoration: underline; 335 | } 336 | 337 | a:focus { 338 | outline: thin dotted #333; 339 | outline: 5px auto -webkit-focus-ring-color; 340 | outline-offset: -2px; 341 | } 342 | 343 | img { 344 | vertical-align: middle; 345 | } 346 | 347 | .img-responsive { 348 | display: block; 349 | height: auto; 350 | max-width: 100%; 351 | } 352 | 353 | .img-rounded { 354 | border-radius: 6px; 355 | } 356 | 357 | .img-thumbnail { 358 | display: inline-block; 359 | height: auto; 360 | max-width: 100%; 361 | padding: 4px; 362 | line-height: 1.428571429; 363 | background-color: #ffffff; 364 | border: 1px solid #dddddd; 365 | border-radius: 4px; 366 | -webkit-transition: all 0.2s ease-in-out; 367 | transition: all 0.2s ease-in-out; 368 | } 369 | 370 | .img-circle { 371 | border-radius: 50%; 372 | } 373 | 374 | hr { 375 | margin-top: 20px; 376 | margin-bottom: 20px; 377 | border: 0; 378 | border-top: 1px solid #eeeeee; 379 | } 380 | 381 | .sr-only { 382 | position: absolute; 383 | width: 1px; 384 | height: 1px; 385 | padding: 0; 386 | margin: -1px; 387 | overflow: hidden; 388 | clip: rect(0 0 0 0); 389 | border: 0; 390 | } 391 | 392 | p { 393 | margin: 0 0 10px; 394 | } 395 | 396 | .lead { 397 | margin-bottom: 20px; 398 | font-size: 16.099999999999998px; 399 | font-weight: 200; 400 | line-height: 1.4; 401 | } 402 | 403 | @media (min-width: 768px) { 404 | .lead { 405 | font-size: 21px; 406 | } 407 | } 408 | 409 | small { 410 | font-size: 85%; 411 | } 412 | 413 | cite { 414 | font-style: normal; 415 | } 416 | 417 | .text-muted { 418 | color: #999999; 419 | } 420 | 421 | .text-primary { 422 | color: #428bca; 423 | } 424 | 425 | .text-warning { 426 | color: #c09853; 427 | } 428 | 429 | .text-danger { 430 | color: #b94a48; 431 | } 432 | 433 | .text-success { 434 | color: #468847; 435 | } 436 | 437 | .text-info { 438 | color: #3a87ad; 439 | } 440 | 441 | .text-left { 442 | text-align: left; 443 | } 444 | 445 | .text-right { 446 | text-align: right; 447 | } 448 | 449 | .text-center { 450 | text-align: center; 451 | } 452 | 453 | h1, 454 | h2, 455 | h3, 456 | h4, 457 | h5, 458 | h6, 459 | .h1, 460 | .h2, 461 | .h3, 462 | .h4, 463 | .h5, 464 | .h6 { 465 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 466 | font-weight: 500; 467 | line-height: 1.1; 468 | } 469 | 470 | h1 small, 471 | h2 small, 472 | h3 small, 473 | h4 small, 474 | h5 small, 475 | h6 small, 476 | .h1 small, 477 | .h2 small, 478 | .h3 small, 479 | .h4 small, 480 | .h5 small, 481 | .h6 small { 482 | font-weight: normal; 483 | line-height: 1; 484 | color: #999999; 485 | } 486 | 487 | h1, 488 | h2, 489 | h3 { 490 | margin-top: 20px; 491 | margin-bottom: 10px; 492 | } 493 | 494 | h4, 495 | h5, 496 | h6 { 497 | margin-top: 10px; 498 | margin-bottom: 10px; 499 | } 500 | 501 | h1, 502 | .h1 { 503 | font-size: 36px; 504 | } 505 | 506 | h2, 507 | .h2 { 508 | font-size: 30px; 509 | } 510 | 511 | h3, 512 | .h3 { 513 | font-size: 24px; 514 | } 515 | 516 | h4, 517 | .h4 { 518 | font-size: 18px; 519 | } 520 | 521 | h5, 522 | .h5 { 523 | font-size: 14px; 524 | } 525 | 526 | h6, 527 | .h6 { 528 | font-size: 12px; 529 | } 530 | 531 | h1 small, 532 | .h1 small { 533 | font-size: 24px; 534 | } 535 | 536 | h2 small, 537 | .h2 small { 538 | font-size: 18px; 539 | } 540 | 541 | h3 small, 542 | .h3 small, 543 | h4 small, 544 | .h4 small { 545 | font-size: 14px; 546 | } 547 | 548 | .page-header { 549 | padding-bottom: 9px; 550 | margin: 40px 0 20px; 551 | border-bottom: 1px solid #eeeeee; 552 | } 553 | 554 | ul, 555 | ol { 556 | margin-top: 0; 557 | margin-bottom: 10px; 558 | } 559 | 560 | ul ul, 561 | ol ul, 562 | ul ol, 563 | ol ol { 564 | margin-bottom: 0; 565 | } 566 | 567 | .list-unstyled { 568 | padding-left: 0; 569 | list-style: none; 570 | } 571 | 572 | .list-inline { 573 | padding-left: 0; 574 | list-style: none; 575 | } 576 | 577 | .list-inline > li { 578 | display: inline-block; 579 | padding-right: 5px; 580 | padding-left: 5px; 581 | } 582 | 583 | dl { 584 | margin-bottom: 20px; 585 | } 586 | 587 | dt, 588 | dd { 589 | line-height: 1.428571429; 590 | } 591 | 592 | dt { 593 | font-weight: bold; 594 | } 595 | 596 | dd { 597 | margin-left: 0; 598 | } 599 | 600 | @media (min-width: 768px) { 601 | .dl-horizontal dt { 602 | float: left; 603 | width: 160px; 604 | overflow: hidden; 605 | clear: left; 606 | text-align: right; 607 | text-overflow: ellipsis; 608 | white-space: nowrap; 609 | } 610 | .dl-horizontal dd { 611 | margin-left: 180px; 612 | } 613 | .dl-horizontal dd:before, 614 | .dl-horizontal dd:after { 615 | display: table; 616 | content: " "; 617 | } 618 | .dl-horizontal dd:after { 619 | clear: both; 620 | } 621 | .dl-horizontal dd:before, 622 | .dl-horizontal dd:after { 623 | display: table; 624 | content: " "; 625 | } 626 | .dl-horizontal dd:after { 627 | clear: both; 628 | } 629 | } 630 | 631 | abbr[title], 632 | abbr[data-original-title] { 633 | cursor: help; 634 | border-bottom: 1px dotted #999999; 635 | } 636 | 637 | abbr.initialism { 638 | font-size: 90%; 639 | text-transform: uppercase; 640 | } 641 | 642 | blockquote { 643 | padding: 10px 20px; 644 | margin: 0 0 20px; 645 | border-left: 5px solid #eeeeee; 646 | } 647 | 648 | blockquote p { 649 | font-size: 17.5px; 650 | font-weight: 300; 651 | line-height: 1.25; 652 | } 653 | 654 | blockquote p:last-child { 655 | margin-bottom: 0; 656 | } 657 | 658 | blockquote small { 659 | display: block; 660 | line-height: 1.428571429; 661 | color: #999999; 662 | } 663 | 664 | blockquote small:before { 665 | content: '\2014 \00A0'; 666 | } 667 | 668 | blockquote.pull-right { 669 | padding-right: 15px; 670 | padding-left: 0; 671 | border-right: 5px solid #eeeeee; 672 | border-left: 0; 673 | } 674 | 675 | blockquote.pull-right p, 676 | blockquote.pull-right small { 677 | text-align: right; 678 | } 679 | 680 | blockquote.pull-right small:before { 681 | content: ''; 682 | } 683 | 684 | blockquote.pull-right small:after { 685 | content: '\00A0 \2014'; 686 | } 687 | 688 | q:before, 689 | q:after, 690 | blockquote:before, 691 | blockquote:after { 692 | content: ""; 693 | } 694 | 695 | address { 696 | display: block; 697 | margin-bottom: 20px; 698 | font-style: normal; 699 | line-height: 1.428571429; 700 | } 701 | 702 | code, 703 | pre { 704 | font-family: Monaco, Menlo, Consolas, "Courier New", monospace; 705 | } 706 | 707 | code { 708 | padding: 2px 4px; 709 | font-size: 90%; 710 | color: #c7254e; 711 | white-space: nowrap; 712 | background-color: #f9f2f4; 713 | border-radius: 4px; 714 | } 715 | 716 | pre { 717 | display: block; 718 | padding: 9.5px; 719 | margin: 0 0 10px; 720 | font-size: 13px; 721 | line-height: 1.428571429; 722 | color: #333333; 723 | word-break: break-all; 724 | word-wrap: break-word; 725 | background-color: #f5f5f5; 726 | border: 1px solid #cccccc; 727 | border-radius: 4px; 728 | } 729 | 730 | pre.prettyprint { 731 | margin-bottom: 20px; 732 | } 733 | 734 | pre code { 735 | padding: 0; 736 | font-size: inherit; 737 | color: inherit; 738 | white-space: pre-wrap; 739 | background-color: transparent; 740 | border: 0; 741 | } 742 | 743 | .pre-scrollable { 744 | max-height: 340px; 745 | overflow-y: scroll; 746 | } 747 | 748 | .container { 749 | padding-right: 15px; 750 | padding-left: 15px; 751 | margin-right: auto; 752 | margin-left: auto; 753 | } 754 | 755 | .container:before, 756 | .container:after { 757 | display: table; 758 | content: " "; 759 | } 760 | 761 | .container:after { 762 | clear: both; 763 | } 764 | 765 | .container:before, 766 | .container:after { 767 | display: table; 768 | content: " "; 769 | } 770 | 771 | .container:after { 772 | clear: both; 773 | } 774 | 775 | .row { 776 | margin-right: -15px; 777 | margin-left: -15px; 778 | } 779 | 780 | .row:before, 781 | .row:after { 782 | display: table; 783 | content: " "; 784 | } 785 | 786 | .row:after { 787 | clear: both; 788 | } 789 | 790 | .row:before, 791 | .row:after { 792 | display: table; 793 | content: " "; 794 | } 795 | 796 | .row:after { 797 | clear: both; 798 | } 799 | 800 | .col-xs-1, 801 | .col-xs-2, 802 | .col-xs-3, 803 | .col-xs-4, 804 | .col-xs-5, 805 | .col-xs-6, 806 | .col-xs-7, 807 | .col-xs-8, 808 | .col-xs-9, 809 | .col-xs-10, 810 | .col-xs-11, 811 | .col-xs-12, 812 | .col-sm-1, 813 | .col-sm-2, 814 | .col-sm-3, 815 | .col-sm-4, 816 | .col-sm-5, 817 | .col-sm-6, 818 | .col-sm-7, 819 | .col-sm-8, 820 | .col-sm-9, 821 | .col-sm-10, 822 | .col-sm-11, 823 | .col-sm-12, 824 | .col-md-1, 825 | .col-md-2, 826 | .col-md-3, 827 | .col-md-4, 828 | .col-md-5, 829 | .col-md-6, 830 | .col-md-7, 831 | .col-md-8, 832 | .col-md-9, 833 | .col-md-10, 834 | .col-md-11, 835 | .col-md-12, 836 | .col-lg-1, 837 | .col-lg-2, 838 | .col-lg-3, 839 | .col-lg-4, 840 | .col-lg-5, 841 | .col-lg-6, 842 | .col-lg-7, 843 | .col-lg-8, 844 | .col-lg-9, 845 | .col-lg-10, 846 | .col-lg-11, 847 | .col-lg-12 { 848 | position: relative; 849 | min-height: 1px; 850 | padding-right: 15px; 851 | padding-left: 15px; 852 | } 853 | 854 | .col-xs-1, 855 | .col-xs-2, 856 | .col-xs-3, 857 | .col-xs-4, 858 | .col-xs-5, 859 | .col-xs-6, 860 | .col-xs-7, 861 | .col-xs-8, 862 | .col-xs-9, 863 | .col-xs-10, 864 | .col-xs-11 { 865 | float: left; 866 | } 867 | 868 | .col-xs-1 { 869 | width: 8.333333333333332%; 870 | } 871 | 872 | .col-xs-2 { 873 | width: 16.666666666666664%; 874 | } 875 | 876 | .col-xs-3 { 877 | width: 25%; 878 | } 879 | 880 | .col-xs-4 { 881 | width: 33.33333333333333%; 882 | } 883 | 884 | .col-xs-5 { 885 | width: 41.66666666666667%; 886 | } 887 | 888 | .col-xs-6 { 889 | width: 50%; 890 | } 891 | 892 | .col-xs-7 { 893 | width: 58.333333333333336%; 894 | } 895 | 896 | .col-xs-8 { 897 | width: 66.66666666666666%; 898 | } 899 | 900 | .col-xs-9 { 901 | width: 75%; 902 | } 903 | 904 | .col-xs-10 { 905 | width: 83.33333333333334%; 906 | } 907 | 908 | .col-xs-11 { 909 | width: 91.66666666666666%; 910 | } 911 | 912 | .col-xs-12 { 913 | width: 100%; 914 | } 915 | 916 | @media (min-width: 768px) { 917 | .container { 918 | max-width: 750px; 919 | } 920 | .col-sm-1, 921 | .col-sm-2, 922 | .col-sm-3, 923 | .col-sm-4, 924 | .col-sm-5, 925 | .col-sm-6, 926 | .col-sm-7, 927 | .col-sm-8, 928 | .col-sm-9, 929 | .col-sm-10, 930 | .col-sm-11 { 931 | float: left; 932 | } 933 | .col-sm-1 { 934 | width: 8.333333333333332%; 935 | } 936 | .col-sm-2 { 937 | width: 16.666666666666664%; 938 | } 939 | .col-sm-3 { 940 | width: 25%; 941 | } 942 | .col-sm-4 { 943 | width: 33.33333333333333%; 944 | } 945 | .col-sm-5 { 946 | width: 41.66666666666667%; 947 | } 948 | .col-sm-6 { 949 | width: 50%; 950 | } 951 | .col-sm-7 { 952 | width: 58.333333333333336%; 953 | } 954 | .col-sm-8 { 955 | width: 66.66666666666666%; 956 | } 957 | .col-sm-9 { 958 | width: 75%; 959 | } 960 | .col-sm-10 { 961 | width: 83.33333333333334%; 962 | } 963 | .col-sm-11 { 964 | width: 91.66666666666666%; 965 | } 966 | .col-sm-12 { 967 | width: 100%; 968 | } 969 | .col-sm-push-1 { 970 | left: 8.333333333333332%; 971 | } 972 | .col-sm-push-2 { 973 | left: 16.666666666666664%; 974 | } 975 | .col-sm-push-3 { 976 | left: 25%; 977 | } 978 | .col-sm-push-4 { 979 | left: 33.33333333333333%; 980 | } 981 | .col-sm-push-5 { 982 | left: 41.66666666666667%; 983 | } 984 | .col-sm-push-6 { 985 | left: 50%; 986 | } 987 | .col-sm-push-7 { 988 | left: 58.333333333333336%; 989 | } 990 | .col-sm-push-8 { 991 | left: 66.66666666666666%; 992 | } 993 | .col-sm-push-9 { 994 | left: 75%; 995 | } 996 | .col-sm-push-10 { 997 | left: 83.33333333333334%; 998 | } 999 | .col-sm-push-11 { 1000 | left: 91.66666666666666%; 1001 | } 1002 | .col-sm-pull-1 { 1003 | right: 8.333333333333332%; 1004 | } 1005 | .col-sm-pull-2 { 1006 | right: 16.666666666666664%; 1007 | } 1008 | .col-sm-pull-3 { 1009 | right: 25%; 1010 | } 1011 | .col-sm-pull-4 { 1012 | right: 33.33333333333333%; 1013 | } 1014 | .col-sm-pull-5 { 1015 | right: 41.66666666666667%; 1016 | } 1017 | .col-sm-pull-6 { 1018 | right: 50%; 1019 | } 1020 | .col-sm-pull-7 { 1021 | right: 58.333333333333336%; 1022 | } 1023 | .col-sm-pull-8 { 1024 | right: 66.66666666666666%; 1025 | } 1026 | .col-sm-pull-9 { 1027 | right: 75%; 1028 | } 1029 | .col-sm-pull-10 { 1030 | right: 83.33333333333334%; 1031 | } 1032 | .col-sm-pull-11 { 1033 | right: 91.66666666666666%; 1034 | } 1035 | .col-sm-offset-1 { 1036 | margin-left: 8.333333333333332%; 1037 | } 1038 | .col-sm-offset-2 { 1039 | margin-left: 16.666666666666664%; 1040 | } 1041 | .col-sm-offset-3 { 1042 | margin-left: 25%; 1043 | } 1044 | .col-sm-offset-4 { 1045 | margin-left: 33.33333333333333%; 1046 | } 1047 | .col-sm-offset-5 { 1048 | margin-left: 41.66666666666667%; 1049 | } 1050 | .col-sm-offset-6 { 1051 | margin-left: 50%; 1052 | } 1053 | .col-sm-offset-7 { 1054 | margin-left: 58.333333333333336%; 1055 | } 1056 | .col-sm-offset-8 { 1057 | margin-left: 66.66666666666666%; 1058 | } 1059 | .col-sm-offset-9 { 1060 | margin-left: 75%; 1061 | } 1062 | .col-sm-offset-10 { 1063 | margin-left: 83.33333333333334%; 1064 | } 1065 | .col-sm-offset-11 { 1066 | margin-left: 91.66666666666666%; 1067 | } 1068 | } 1069 | 1070 | @media (min-width: 992px) { 1071 | .container { 1072 | max-width: 970px; 1073 | } 1074 | .col-md-1, 1075 | .col-md-2, 1076 | .col-md-3, 1077 | .col-md-4, 1078 | .col-md-5, 1079 | .col-md-6, 1080 | .col-md-7, 1081 | .col-md-8, 1082 | .col-md-9, 1083 | .col-md-10, 1084 | .col-md-11 { 1085 | float: left; 1086 | } 1087 | .col-md-1 { 1088 | width: 8.333333333333332%; 1089 | } 1090 | .col-md-2 { 1091 | width: 16.666666666666664%; 1092 | } 1093 | .col-md-3 { 1094 | width: 25%; 1095 | } 1096 | .col-md-4 { 1097 | width: 33.33333333333333%; 1098 | } 1099 | .col-md-5 { 1100 | width: 41.66666666666667%; 1101 | } 1102 | .col-md-6 { 1103 | width: 50%; 1104 | } 1105 | .col-md-7 { 1106 | width: 58.333333333333336%; 1107 | } 1108 | .col-md-8 { 1109 | width: 66.66666666666666%; 1110 | } 1111 | .col-md-9 { 1112 | width: 75%; 1113 | } 1114 | .col-md-10 { 1115 | width: 83.33333333333334%; 1116 | } 1117 | .col-md-11 { 1118 | width: 91.66666666666666%; 1119 | } 1120 | .col-md-12 { 1121 | width: 100%; 1122 | } 1123 | .col-md-push-0 { 1124 | left: auto; 1125 | } 1126 | .col-md-push-1 { 1127 | left: 8.333333333333332%; 1128 | } 1129 | .col-md-push-2 { 1130 | left: 16.666666666666664%; 1131 | } 1132 | .col-md-push-3 { 1133 | left: 25%; 1134 | } 1135 | .col-md-push-4 { 1136 | left: 33.33333333333333%; 1137 | } 1138 | .col-md-push-5 { 1139 | left: 41.66666666666667%; 1140 | } 1141 | .col-md-push-6 { 1142 | left: 50%; 1143 | } 1144 | .col-md-push-7 { 1145 | left: 58.333333333333336%; 1146 | } 1147 | .col-md-push-8 { 1148 | left: 66.66666666666666%; 1149 | } 1150 | .col-md-push-9 { 1151 | left: 75%; 1152 | } 1153 | .col-md-push-10 { 1154 | left: 83.33333333333334%; 1155 | } 1156 | .col-md-push-11 { 1157 | left: 91.66666666666666%; 1158 | } 1159 | .col-md-pull-0 { 1160 | right: auto; 1161 | } 1162 | .col-md-pull-1 { 1163 | right: 8.333333333333332%; 1164 | } 1165 | .col-md-pull-2 { 1166 | right: 16.666666666666664%; 1167 | } 1168 | .col-md-pull-3 { 1169 | right: 25%; 1170 | } 1171 | .col-md-pull-4 { 1172 | right: 33.33333333333333%; 1173 | } 1174 | .col-md-pull-5 { 1175 | right: 41.66666666666667%; 1176 | } 1177 | .col-md-pull-6 { 1178 | right: 50%; 1179 | } 1180 | .col-md-pull-7 { 1181 | right: 58.333333333333336%; 1182 | } 1183 | .col-md-pull-8 { 1184 | right: 66.66666666666666%; 1185 | } 1186 | .col-md-pull-9 { 1187 | right: 75%; 1188 | } 1189 | .col-md-pull-10 { 1190 | right: 83.33333333333334%; 1191 | } 1192 | .col-md-pull-11 { 1193 | right: 91.66666666666666%; 1194 | } 1195 | .col-md-offset-0 { 1196 | margin-left: 0; 1197 | } 1198 | .col-md-offset-1 { 1199 | margin-left: 8.333333333333332%; 1200 | } 1201 | .col-md-offset-2 { 1202 | margin-left: 16.666666666666664%; 1203 | } 1204 | .col-md-offset-3 { 1205 | margin-left: 25%; 1206 | } 1207 | .col-md-offset-4 { 1208 | margin-left: 33.33333333333333%; 1209 | } 1210 | .col-md-offset-5 { 1211 | margin-left: 41.66666666666667%; 1212 | } 1213 | .col-md-offset-6 { 1214 | margin-left: 50%; 1215 | } 1216 | .col-md-offset-7 { 1217 | margin-left: 58.333333333333336%; 1218 | } 1219 | .col-md-offset-8 { 1220 | margin-left: 66.66666666666666%; 1221 | } 1222 | .col-md-offset-9 { 1223 | margin-left: 75%; 1224 | } 1225 | .col-md-offset-10 { 1226 | margin-left: 83.33333333333334%; 1227 | } 1228 | .col-md-offset-11 { 1229 | margin-left: 91.66666666666666%; 1230 | } 1231 | } 1232 | 1233 | @media (min-width: 1200px) { 1234 | .container { 1235 | max-width: 1170px; 1236 | } 1237 | .col-lg-1, 1238 | .col-lg-2, 1239 | .col-lg-3, 1240 | .col-lg-4, 1241 | .col-lg-5, 1242 | .col-lg-6, 1243 | .col-lg-7, 1244 | .col-lg-8, 1245 | .col-lg-9, 1246 | .col-lg-10, 1247 | .col-lg-11 { 1248 | float: left; 1249 | } 1250 | .col-lg-1 { 1251 | width: 8.333333333333332%; 1252 | } 1253 | .col-lg-2 { 1254 | width: 16.666666666666664%; 1255 | } 1256 | .col-lg-3 { 1257 | width: 25%; 1258 | } 1259 | .col-lg-4 { 1260 | width: 33.33333333333333%; 1261 | } 1262 | .col-lg-5 { 1263 | width: 41.66666666666667%; 1264 | } 1265 | .col-lg-6 { 1266 | width: 50%; 1267 | } 1268 | .col-lg-7 { 1269 | width: 58.333333333333336%; 1270 | } 1271 | .col-lg-8 { 1272 | width: 66.66666666666666%; 1273 | } 1274 | .col-lg-9 { 1275 | width: 75%; 1276 | } 1277 | .col-lg-10 { 1278 | width: 83.33333333333334%; 1279 | } 1280 | .col-lg-11 { 1281 | width: 91.66666666666666%; 1282 | } 1283 | .col-lg-12 { 1284 | width: 100%; 1285 | } 1286 | .col-lg-push-0 { 1287 | left: auto; 1288 | } 1289 | .col-lg-push-1 { 1290 | left: 8.333333333333332%; 1291 | } 1292 | .col-lg-push-2 { 1293 | left: 16.666666666666664%; 1294 | } 1295 | .col-lg-push-3 { 1296 | left: 25%; 1297 | } 1298 | .col-lg-push-4 { 1299 | left: 33.33333333333333%; 1300 | } 1301 | .col-lg-push-5 { 1302 | left: 41.66666666666667%; 1303 | } 1304 | .col-lg-push-6 { 1305 | left: 50%; 1306 | } 1307 | .col-lg-push-7 { 1308 | left: 58.333333333333336%; 1309 | } 1310 | .col-lg-push-8 { 1311 | left: 66.66666666666666%; 1312 | } 1313 | .col-lg-push-9 { 1314 | left: 75%; 1315 | } 1316 | .col-lg-push-10 { 1317 | left: 83.33333333333334%; 1318 | } 1319 | .col-lg-push-11 { 1320 | left: 91.66666666666666%; 1321 | } 1322 | .col-lg-pull-0 { 1323 | right: auto; 1324 | } 1325 | .col-lg-pull-1 { 1326 | right: 8.333333333333332%; 1327 | } 1328 | .col-lg-pull-2 { 1329 | right: 16.666666666666664%; 1330 | } 1331 | .col-lg-pull-3 { 1332 | right: 25%; 1333 | } 1334 | .col-lg-pull-4 { 1335 | right: 33.33333333333333%; 1336 | } 1337 | .col-lg-pull-5 { 1338 | right: 41.66666666666667%; 1339 | } 1340 | .col-lg-pull-6 { 1341 | right: 50%; 1342 | } 1343 | .col-lg-pull-7 { 1344 | right: 58.333333333333336%; 1345 | } 1346 | .col-lg-pull-8 { 1347 | right: 66.66666666666666%; 1348 | } 1349 | .col-lg-pull-9 { 1350 | right: 75%; 1351 | } 1352 | .col-lg-pull-10 { 1353 | right: 83.33333333333334%; 1354 | } 1355 | .col-lg-pull-11 { 1356 | right: 91.66666666666666%; 1357 | } 1358 | .col-lg-offset-0 { 1359 | margin-left: 0; 1360 | } 1361 | .col-lg-offset-1 { 1362 | margin-left: 8.333333333333332%; 1363 | } 1364 | .col-lg-offset-2 { 1365 | margin-left: 16.666666666666664%; 1366 | } 1367 | .col-lg-offset-3 { 1368 | margin-left: 25%; 1369 | } 1370 | .col-lg-offset-4 { 1371 | margin-left: 33.33333333333333%; 1372 | } 1373 | .col-lg-offset-5 { 1374 | margin-left: 41.66666666666667%; 1375 | } 1376 | .col-lg-offset-6 { 1377 | margin-left: 50%; 1378 | } 1379 | .col-lg-offset-7 { 1380 | margin-left: 58.333333333333336%; 1381 | } 1382 | .col-lg-offset-8 { 1383 | margin-left: 66.66666666666666%; 1384 | } 1385 | .col-lg-offset-9 { 1386 | margin-left: 75%; 1387 | } 1388 | .col-lg-offset-10 { 1389 | margin-left: 83.33333333333334%; 1390 | } 1391 | .col-lg-offset-11 { 1392 | margin-left: 91.66666666666666%; 1393 | } 1394 | } 1395 | 1396 | table { 1397 | max-width: 100%; 1398 | background-color: transparent; 1399 | } 1400 | 1401 | th { 1402 | text-align: left; 1403 | } 1404 | 1405 | .table { 1406 | width: 100%; 1407 | margin-bottom: 20px; 1408 | } 1409 | 1410 | .table thead > tr > th, 1411 | .table tbody > tr > th, 1412 | .table tfoot > tr > th, 1413 | .table thead > tr > td, 1414 | .table tbody > tr > td, 1415 | .table tfoot > tr > td { 1416 | padding: 8px; 1417 | line-height: 1.428571429; 1418 | vertical-align: top; 1419 | border-top: 1px solid #dddddd; 1420 | } 1421 | 1422 | .table thead > tr > th { 1423 | vertical-align: bottom; 1424 | border-bottom: 2px solid #dddddd; 1425 | } 1426 | 1427 | .table caption + thead tr:first-child th, 1428 | .table colgroup + thead tr:first-child th, 1429 | .table thead:first-child tr:first-child th, 1430 | .table caption + thead tr:first-child td, 1431 | .table colgroup + thead tr:first-child td, 1432 | .table thead:first-child tr:first-child td { 1433 | border-top: 0; 1434 | } 1435 | 1436 | .table tbody + tbody { 1437 | border-top: 2px solid #dddddd; 1438 | } 1439 | 1440 | .table .table { 1441 | background-color: #ffffff; 1442 | } 1443 | 1444 | .table-condensed thead > tr > th, 1445 | .table-condensed tbody > tr > th, 1446 | .table-condensed tfoot > tr > th, 1447 | .table-condensed thead > tr > td, 1448 | .table-condensed tbody > tr > td, 1449 | .table-condensed tfoot > tr > td { 1450 | padding: 5px; 1451 | } 1452 | 1453 | .table-bordered { 1454 | border: 1px solid #dddddd; 1455 | } 1456 | 1457 | .table-bordered > thead > tr > th, 1458 | .table-bordered > tbody > tr > th, 1459 | .table-bordered > tfoot > tr > th, 1460 | .table-bordered > thead > tr > td, 1461 | .table-bordered > tbody > tr > td, 1462 | .table-bordered > tfoot > tr > td { 1463 | border: 1px solid #dddddd; 1464 | } 1465 | 1466 | .table-bordered > thead > tr > th, 1467 | .table-bordered > thead > tr > td { 1468 | border-bottom-width: 2px; 1469 | } 1470 | 1471 | .table-striped > tbody > tr:nth-child(odd) > td, 1472 | .table-striped > tbody > tr:nth-child(odd) > th { 1473 | background-color: #f9f9f9; 1474 | } 1475 | 1476 | .table-hover > tbody > tr:hover > td, 1477 | .table-hover > tbody > tr:hover > th { 1478 | background-color: #f5f5f5; 1479 | } 1480 | 1481 | table col[class*="col-"] { 1482 | display: table-column; 1483 | float: none; 1484 | } 1485 | 1486 | table td[class*="col-"], 1487 | table th[class*="col-"] { 1488 | display: table-cell; 1489 | float: none; 1490 | } 1491 | 1492 | .table > thead > tr > td.active, 1493 | .table > tbody > tr > td.active, 1494 | .table > tfoot > tr > td.active, 1495 | .table > thead > tr > th.active, 1496 | .table > tbody > tr > th.active, 1497 | .table > tfoot > tr > th.active, 1498 | .table > thead > tr.active > td, 1499 | .table > tbody > tr.active > td, 1500 | .table > tfoot > tr.active > td, 1501 | .table > thead > tr.active > th, 1502 | .table > tbody > tr.active > th, 1503 | .table > tfoot > tr.active > th { 1504 | background-color: #f5f5f5; 1505 | } 1506 | 1507 | .table > thead > tr > td.success, 1508 | .table > tbody > tr > td.success, 1509 | .table > tfoot > tr > td.success, 1510 | .table > thead > tr > th.success, 1511 | .table > tbody > tr > th.success, 1512 | .table > tfoot > tr > th.success, 1513 | .table > thead > tr.success > td, 1514 | .table > tbody > tr.success > td, 1515 | .table > tfoot > tr.success > td, 1516 | .table > thead > tr.success > th, 1517 | .table > tbody > tr.success > th, 1518 | .table > tfoot > tr.success > th { 1519 | background-color: #dff0d8; 1520 | border-color: #d6e9c6; 1521 | } 1522 | 1523 | .table-hover > tbody > tr > td.success:hover, 1524 | .table-hover > tbody > tr > th.success:hover, 1525 | .table-hover > tbody > tr.success:hover > td { 1526 | background-color: #d0e9c6; 1527 | border-color: #c9e2b3; 1528 | } 1529 | 1530 | .table > thead > tr > td.danger, 1531 | .table > tbody > tr > td.danger, 1532 | .table > tfoot > tr > td.danger, 1533 | .table > thead > tr > th.danger, 1534 | .table > tbody > tr > th.danger, 1535 | .table > tfoot > tr > th.danger, 1536 | .table > thead > tr.danger > td, 1537 | .table > tbody > tr.danger > td, 1538 | .table > tfoot > tr.danger > td, 1539 | .table > thead > tr.danger > th, 1540 | .table > tbody > tr.danger > th, 1541 | .table > tfoot > tr.danger > th { 1542 | background-color: #f2dede; 1543 | border-color: #eed3d7; 1544 | } 1545 | 1546 | .table-hover > tbody > tr > td.danger:hover, 1547 | .table-hover > tbody > tr > th.danger:hover, 1548 | .table-hover > tbody > tr.danger:hover > td { 1549 | background-color: #ebcccc; 1550 | border-color: #e6c1c7; 1551 | } 1552 | 1553 | .table > thead > tr > td.warning, 1554 | .table > tbody > tr > td.warning, 1555 | .table > tfoot > tr > td.warning, 1556 | .table > thead > tr > th.warning, 1557 | .table > tbody > tr > th.warning, 1558 | .table > tfoot > tr > th.warning, 1559 | .table > thead > tr.warning > td, 1560 | .table > tbody > tr.warning > td, 1561 | .table > tfoot > tr.warning > td, 1562 | .table > thead > tr.warning > th, 1563 | .table > tbody > tr.warning > th, 1564 | .table > tfoot > tr.warning > th { 1565 | background-color: #fcf8e3; 1566 | border-color: #fbeed5; 1567 | } 1568 | 1569 | .table-hover > tbody > tr > td.warning:hover, 1570 | .table-hover > tbody > tr > th.warning:hover, 1571 | .table-hover > tbody > tr.warning:hover > td { 1572 | background-color: #faf2cc; 1573 | border-color: #f8e5be; 1574 | } 1575 | 1576 | @media (max-width: 768px) { 1577 | .table-responsive { 1578 | width: 100%; 1579 | margin-bottom: 15px; 1580 | overflow-x: scroll; 1581 | overflow-y: hidden; 1582 | border: 1px solid #dddddd; 1583 | } 1584 | .table-responsive > .table { 1585 | margin-bottom: 0; 1586 | background-color: #fff; 1587 | } 1588 | .table-responsive > .table > thead > tr > th, 1589 | .table-responsive > .table > tbody > tr > th, 1590 | .table-responsive > .table > tfoot > tr > th, 1591 | .table-responsive > .table > thead > tr > td, 1592 | .table-responsive > .table > tbody > tr > td, 1593 | .table-responsive > .table > tfoot > tr > td { 1594 | white-space: nowrap; 1595 | } 1596 | .table-responsive > .table-bordered { 1597 | border: 0; 1598 | } 1599 | .table-responsive > .table-bordered > thead > tr > th:first-child, 1600 | .table-responsive > .table-bordered > tbody > tr > th:first-child, 1601 | .table-responsive > .table-bordered > tfoot > tr > th:first-child, 1602 | .table-responsive > .table-bordered > thead > tr > td:first-child, 1603 | .table-responsive > .table-bordered > tbody > tr > td:first-child, 1604 | .table-responsive > .table-bordered > tfoot > tr > td:first-child { 1605 | border-left: 0; 1606 | } 1607 | .table-responsive > .table-bordered > thead > tr > th:last-child, 1608 | .table-responsive > .table-bordered > tbody > tr > th:last-child, 1609 | .table-responsive > .table-bordered > tfoot > tr > th:last-child, 1610 | .table-responsive > .table-bordered > thead > tr > td:last-child, 1611 | .table-responsive > .table-bordered > tbody > tr > td:last-child, 1612 | .table-responsive > .table-bordered > tfoot > tr > td:last-child { 1613 | border-right: 0; 1614 | } 1615 | .table-responsive > .table-bordered > thead > tr:last-child > th, 1616 | .table-responsive > .table-bordered > tbody > tr:last-child > th, 1617 | .table-responsive > .table-bordered > tfoot > tr:last-child > th, 1618 | .table-responsive > .table-bordered > thead > tr:last-child > td, 1619 | .table-responsive > .table-bordered > tbody > tr:last-child > td, 1620 | .table-responsive > .table-bordered > tfoot > tr:last-child > td { 1621 | border-bottom: 0; 1622 | } 1623 | } 1624 | 1625 | fieldset { 1626 | padding: 0; 1627 | margin: 0; 1628 | border: 0; 1629 | } 1630 | 1631 | legend { 1632 | display: block; 1633 | width: 100%; 1634 | padding: 0; 1635 | margin-bottom: 20px; 1636 | font-size: 21px; 1637 | line-height: inherit; 1638 | color: #333333; 1639 | border: 0; 1640 | border-bottom: 1px solid #e5e5e5; 1641 | } 1642 | 1643 | label { 1644 | display: inline-block; 1645 | margin-bottom: 5px; 1646 | font-weight: bold; 1647 | } 1648 | 1649 | input[type="search"] { 1650 | -webkit-box-sizing: border-box; 1651 | -moz-box-sizing: border-box; 1652 | box-sizing: border-box; 1653 | } 1654 | 1655 | input[type="radio"], 1656 | input[type="checkbox"] { 1657 | margin: 4px 0 0; 1658 | margin-top: 1px \9; 1659 | /* IE8-9 */ 1660 | 1661 | line-height: normal; 1662 | } 1663 | 1664 | input[type="file"] { 1665 | display: block; 1666 | } 1667 | 1668 | select[multiple], 1669 | select[size] { 1670 | height: auto; 1671 | } 1672 | 1673 | select optgroup { 1674 | font-family: inherit; 1675 | font-size: inherit; 1676 | font-style: inherit; 1677 | } 1678 | 1679 | input[type="file"]:focus, 1680 | input[type="radio"]:focus, 1681 | input[type="checkbox"]:focus { 1682 | outline: thin dotted #333; 1683 | outline: 5px auto -webkit-focus-ring-color; 1684 | outline-offset: -2px; 1685 | } 1686 | 1687 | input[type="number"]::-webkit-outer-spin-button, 1688 | input[type="number"]::-webkit-inner-spin-button { 1689 | height: auto; 1690 | } 1691 | 1692 | .form-control:-moz-placeholder { 1693 | color: #999999; 1694 | } 1695 | 1696 | .form-control::-moz-placeholder { 1697 | color: #999999; 1698 | } 1699 | 1700 | .form-control:-ms-input-placeholder { 1701 | color: #999999; 1702 | } 1703 | 1704 | .form-control::-webkit-input-placeholder { 1705 | color: #999999; 1706 | } 1707 | 1708 | .form-control { 1709 | display: block; 1710 | width: 100%; 1711 | height: 34px; 1712 | padding: 6px 12px; 1713 | font-size: 14px; 1714 | line-height: 1.428571429; 1715 | color: #555555; 1716 | vertical-align: middle; 1717 | background-color: #ffffff; 1718 | border: 1px solid #cccccc; 1719 | border-radius: 4px; 1720 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1721 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1722 | -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; 1723 | transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; 1724 | } 1725 | 1726 | .form-control:focus { 1727 | border-color: #66afe9; 1728 | outline: 0; 1729 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); 1730 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); 1731 | } 1732 | 1733 | .form-control[disabled], 1734 | .form-control[readonly], 1735 | fieldset[disabled] .form-control { 1736 | cursor: not-allowed; 1737 | background-color: #eeeeee; 1738 | } 1739 | 1740 | textarea.form-control { 1741 | height: auto; 1742 | } 1743 | 1744 | .form-group { 1745 | margin-bottom: 15px; 1746 | } 1747 | 1748 | .radio, 1749 | .checkbox { 1750 | display: block; 1751 | min-height: 20px; 1752 | padding-left: 20px; 1753 | margin-top: 10px; 1754 | margin-bottom: 10px; 1755 | vertical-align: middle; 1756 | } 1757 | 1758 | .radio label, 1759 | .checkbox label { 1760 | display: inline; 1761 | margin-bottom: 0; 1762 | font-weight: normal; 1763 | cursor: pointer; 1764 | } 1765 | 1766 | .radio input[type="radio"], 1767 | .radio-inline input[type="radio"], 1768 | .checkbox input[type="checkbox"], 1769 | .checkbox-inline input[type="checkbox"] { 1770 | float: left; 1771 | margin-left: -20px; 1772 | } 1773 | 1774 | .radio + .radio, 1775 | .checkbox + .checkbox { 1776 | margin-top: -5px; 1777 | } 1778 | 1779 | .radio-inline, 1780 | .checkbox-inline { 1781 | display: inline-block; 1782 | padding-left: 20px; 1783 | margin-bottom: 0; 1784 | font-weight: normal; 1785 | vertical-align: middle; 1786 | cursor: pointer; 1787 | } 1788 | 1789 | .radio-inline + .radio-inline, 1790 | .checkbox-inline + .checkbox-inline { 1791 | margin-top: 0; 1792 | margin-left: 10px; 1793 | } 1794 | 1795 | input[type="radio"][disabled], 1796 | input[type="checkbox"][disabled], 1797 | .radio[disabled], 1798 | .radio-inline[disabled], 1799 | .checkbox[disabled], 1800 | .checkbox-inline[disabled], 1801 | fieldset[disabled] input[type="radio"], 1802 | fieldset[disabled] input[type="checkbox"], 1803 | fieldset[disabled] .radio, 1804 | fieldset[disabled] .radio-inline, 1805 | fieldset[disabled] .checkbox, 1806 | fieldset[disabled] .checkbox-inline { 1807 | cursor: not-allowed; 1808 | } 1809 | 1810 | .input-sm { 1811 | height: 30px; 1812 | padding: 5px 10px; 1813 | font-size: 12px; 1814 | line-height: 1.5; 1815 | border-radius: 3px; 1816 | } 1817 | 1818 | select.input-sm { 1819 | height: 30px; 1820 | line-height: 30px; 1821 | } 1822 | 1823 | textarea.input-sm { 1824 | height: auto; 1825 | } 1826 | 1827 | .input-lg { 1828 | height: 45px; 1829 | padding: 10px 16px; 1830 | font-size: 18px; 1831 | line-height: 1.33; 1832 | border-radius: 6px; 1833 | } 1834 | 1835 | select.input-lg { 1836 | height: 45px; 1837 | line-height: 45px; 1838 | } 1839 | 1840 | textarea.input-lg { 1841 | height: auto; 1842 | } 1843 | 1844 | .has-warning .help-block, 1845 | .has-warning .control-label { 1846 | color: #c09853; 1847 | } 1848 | 1849 | .has-warning .form-control { 1850 | border-color: #c09853; 1851 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1852 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1853 | } 1854 | 1855 | .has-warning .form-control:focus { 1856 | border-color: #a47e3c; 1857 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; 1858 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; 1859 | } 1860 | 1861 | .has-warning .input-group-addon { 1862 | color: #c09853; 1863 | background-color: #fcf8e3; 1864 | border-color: #c09853; 1865 | } 1866 | 1867 | .has-error .help-block, 1868 | .has-error .control-label { 1869 | color: #b94a48; 1870 | } 1871 | 1872 | .has-error .form-control { 1873 | border-color: #b94a48; 1874 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1875 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1876 | } 1877 | 1878 | .has-error .form-control:focus { 1879 | border-color: #953b39; 1880 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; 1881 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; 1882 | } 1883 | 1884 | .has-error .input-group-addon { 1885 | color: #b94a48; 1886 | background-color: #f2dede; 1887 | border-color: #b94a48; 1888 | } 1889 | 1890 | .has-success .help-block, 1891 | .has-success .control-label { 1892 | color: #468847; 1893 | } 1894 | 1895 | .has-success .form-control { 1896 | border-color: #468847; 1897 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1898 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 1899 | } 1900 | 1901 | .has-success .form-control:focus { 1902 | border-color: #356635; 1903 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; 1904 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; 1905 | } 1906 | 1907 | .has-success .input-group-addon { 1908 | color: #468847; 1909 | background-color: #dff0d8; 1910 | border-color: #468847; 1911 | } 1912 | 1913 | .form-control-static { 1914 | padding-top: 7px; 1915 | margin-bottom: 0; 1916 | } 1917 | 1918 | .help-block { 1919 | display: block; 1920 | margin-top: 5px; 1921 | margin-bottom: 10px; 1922 | color: #737373; 1923 | } 1924 | 1925 | @media (min-width: 768px) { 1926 | .form-inline .form-group { 1927 | display: inline-block; 1928 | margin-bottom: 0; 1929 | vertical-align: middle; 1930 | } 1931 | .form-inline .form-control { 1932 | display: inline-block; 1933 | } 1934 | .form-inline .radio, 1935 | .form-inline .checkbox { 1936 | display: inline-block; 1937 | padding-left: 0; 1938 | margin-top: 0; 1939 | margin-bottom: 0; 1940 | } 1941 | .form-inline .radio input[type="radio"], 1942 | .form-inline .checkbox input[type="checkbox"] { 1943 | float: none; 1944 | margin-left: 0; 1945 | } 1946 | } 1947 | 1948 | .form-horizontal .control-label, 1949 | .form-horizontal .radio, 1950 | .form-horizontal .checkbox, 1951 | .form-horizontal .radio-inline, 1952 | .form-horizontal .checkbox-inline { 1953 | padding-top: 7px; 1954 | margin-top: 0; 1955 | margin-bottom: 0; 1956 | } 1957 | 1958 | .form-horizontal .form-group { 1959 | margin-right: -15px; 1960 | margin-left: -15px; 1961 | } 1962 | 1963 | .form-horizontal .form-group:before, 1964 | .form-horizontal .form-group:after { 1965 | display: table; 1966 | content: " "; 1967 | } 1968 | 1969 | .form-horizontal .form-group:after { 1970 | clear: both; 1971 | } 1972 | 1973 | .form-horizontal .form-group:before, 1974 | .form-horizontal .form-group:after { 1975 | display: table; 1976 | content: " "; 1977 | } 1978 | 1979 | .form-horizontal .form-group:after { 1980 | clear: both; 1981 | } 1982 | 1983 | @media (min-width: 768px) { 1984 | .form-horizontal .control-label { 1985 | text-align: right; 1986 | } 1987 | } 1988 | 1989 | .btn { 1990 | display: inline-block; 1991 | padding: 6px 12px; 1992 | margin-bottom: 0; 1993 | font-size: 14px; 1994 | font-weight: normal; 1995 | line-height: 1.428571429; 1996 | text-align: center; 1997 | white-space: nowrap; 1998 | vertical-align: middle; 1999 | cursor: pointer; 2000 | border: 1px solid transparent; 2001 | border-radius: 4px; 2002 | -webkit-user-select: none; 2003 | -moz-user-select: none; 2004 | -ms-user-select: none; 2005 | -o-user-select: none; 2006 | user-select: none; 2007 | } 2008 | 2009 | .btn:focus { 2010 | outline: thin dotted #333; 2011 | outline: 5px auto -webkit-focus-ring-color; 2012 | outline-offset: -2px; 2013 | } 2014 | 2015 | .btn:hover, 2016 | .btn:focus { 2017 | color: #333333; 2018 | text-decoration: none; 2019 | } 2020 | 2021 | .btn:active, 2022 | .btn.active { 2023 | background-image: none; 2024 | outline: 0; 2025 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 2026 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 2027 | } 2028 | 2029 | .btn.disabled, 2030 | .btn[disabled], 2031 | fieldset[disabled] .btn { 2032 | pointer-events: none; 2033 | cursor: not-allowed; 2034 | opacity: 0.65; 2035 | filter: alpha(opacity=65); 2036 | -webkit-box-shadow: none; 2037 | box-shadow: none; 2038 | } 2039 | 2040 | .btn-default { 2041 | color: #333333; 2042 | background-color: #ffffff; 2043 | border-color: #cccccc; 2044 | } 2045 | 2046 | .btn-default:hover, 2047 | .btn-default:focus, 2048 | .btn-default:active, 2049 | .btn-default.active, 2050 | .open .dropdown-toggle.btn-default { 2051 | color: #333333; 2052 | background-color: #ebebeb; 2053 | border-color: #adadad; 2054 | } 2055 | 2056 | .btn-default:active, 2057 | .btn-default.active, 2058 | .open .dropdown-toggle.btn-default { 2059 | background-image: none; 2060 | } 2061 | 2062 | .btn-default.disabled, 2063 | .btn-default[disabled], 2064 | fieldset[disabled] .btn-default, 2065 | .btn-default.disabled:hover, 2066 | .btn-default[disabled]:hover, 2067 | fieldset[disabled] .btn-default:hover, 2068 | .btn-default.disabled:focus, 2069 | .btn-default[disabled]:focus, 2070 | fieldset[disabled] .btn-default:focus, 2071 | .btn-default.disabled:active, 2072 | .btn-default[disabled]:active, 2073 | fieldset[disabled] .btn-default:active, 2074 | .btn-default.disabled.active, 2075 | .btn-default[disabled].active, 2076 | fieldset[disabled] .btn-default.active { 2077 | background-color: #ffffff; 2078 | border-color: #cccccc; 2079 | } 2080 | 2081 | .btn-primary { 2082 | color: #ffffff; 2083 | background-color: #428bca; 2084 | border-color: #357ebd; 2085 | } 2086 | 2087 | .btn-primary:hover, 2088 | .btn-primary:focus, 2089 | .btn-primary:active, 2090 | .btn-primary.active, 2091 | .open .dropdown-toggle.btn-primary { 2092 | color: #ffffff; 2093 | background-color: #3276b1; 2094 | border-color: #285e8e; 2095 | } 2096 | 2097 | .btn-primary:active, 2098 | .btn-primary.active, 2099 | .open .dropdown-toggle.btn-primary { 2100 | background-image: none; 2101 | } 2102 | 2103 | .btn-primary.disabled, 2104 | .btn-primary[disabled], 2105 | fieldset[disabled] .btn-primary, 2106 | .btn-primary.disabled:hover, 2107 | .btn-primary[disabled]:hover, 2108 | fieldset[disabled] .btn-primary:hover, 2109 | .btn-primary.disabled:focus, 2110 | .btn-primary[disabled]:focus, 2111 | fieldset[disabled] .btn-primary:focus, 2112 | .btn-primary.disabled:active, 2113 | .btn-primary[disabled]:active, 2114 | fieldset[disabled] .btn-primary:active, 2115 | .btn-primary.disabled.active, 2116 | .btn-primary[disabled].active, 2117 | fieldset[disabled] .btn-primary.active { 2118 | background-color: #428bca; 2119 | border-color: #357ebd; 2120 | } 2121 | 2122 | .btn-warning { 2123 | color: #ffffff; 2124 | background-color: #f0ad4e; 2125 | border-color: #eea236; 2126 | } 2127 | 2128 | .btn-warning:hover, 2129 | .btn-warning:focus, 2130 | .btn-warning:active, 2131 | .btn-warning.active, 2132 | .open .dropdown-toggle.btn-warning { 2133 | color: #ffffff; 2134 | background-color: #ed9c28; 2135 | border-color: #d58512; 2136 | } 2137 | 2138 | .btn-warning:active, 2139 | .btn-warning.active, 2140 | .open .dropdown-toggle.btn-warning { 2141 | background-image: none; 2142 | } 2143 | 2144 | .btn-warning.disabled, 2145 | .btn-warning[disabled], 2146 | fieldset[disabled] .btn-warning, 2147 | .btn-warning.disabled:hover, 2148 | .btn-warning[disabled]:hover, 2149 | fieldset[disabled] .btn-warning:hover, 2150 | .btn-warning.disabled:focus, 2151 | .btn-warning[disabled]:focus, 2152 | fieldset[disabled] .btn-warning:focus, 2153 | .btn-warning.disabled:active, 2154 | .btn-warning[disabled]:active, 2155 | fieldset[disabled] .btn-warning:active, 2156 | .btn-warning.disabled.active, 2157 | .btn-warning[disabled].active, 2158 | fieldset[disabled] .btn-warning.active { 2159 | background-color: #f0ad4e; 2160 | border-color: #eea236; 2161 | } 2162 | 2163 | .btn-danger { 2164 | color: #ffffff; 2165 | background-color: #d9534f; 2166 | border-color: #d43f3a; 2167 | } 2168 | 2169 | .btn-danger:hover, 2170 | .btn-danger:focus, 2171 | .btn-danger:active, 2172 | .btn-danger.active, 2173 | .open .dropdown-toggle.btn-danger { 2174 | color: #ffffff; 2175 | background-color: #d2322d; 2176 | border-color: #ac2925; 2177 | } 2178 | 2179 | .btn-danger:active, 2180 | .btn-danger.active, 2181 | .open .dropdown-toggle.btn-danger { 2182 | background-image: none; 2183 | } 2184 | 2185 | .btn-danger.disabled, 2186 | .btn-danger[disabled], 2187 | fieldset[disabled] .btn-danger, 2188 | .btn-danger.disabled:hover, 2189 | .btn-danger[disabled]:hover, 2190 | fieldset[disabled] .btn-danger:hover, 2191 | .btn-danger.disabled:focus, 2192 | .btn-danger[disabled]:focus, 2193 | fieldset[disabled] .btn-danger:focus, 2194 | .btn-danger.disabled:active, 2195 | .btn-danger[disabled]:active, 2196 | fieldset[disabled] .btn-danger:active, 2197 | .btn-danger.disabled.active, 2198 | .btn-danger[disabled].active, 2199 | fieldset[disabled] .btn-danger.active { 2200 | background-color: #d9534f; 2201 | border-color: #d43f3a; 2202 | } 2203 | 2204 | .btn-success { 2205 | color: #ffffff; 2206 | background-color: #5cb85c; 2207 | border-color: #4cae4c; 2208 | } 2209 | 2210 | .btn-success:hover, 2211 | .btn-success:focus, 2212 | .btn-success:active, 2213 | .btn-success.active, 2214 | .open .dropdown-toggle.btn-success { 2215 | color: #ffffff; 2216 | background-color: #47a447; 2217 | border-color: #398439; 2218 | } 2219 | 2220 | .btn-success:active, 2221 | .btn-success.active, 2222 | .open .dropdown-toggle.btn-success { 2223 | background-image: none; 2224 | } 2225 | 2226 | .btn-success.disabled, 2227 | .btn-success[disabled], 2228 | fieldset[disabled] .btn-success, 2229 | .btn-success.disabled:hover, 2230 | .btn-success[disabled]:hover, 2231 | fieldset[disabled] .btn-success:hover, 2232 | .btn-success.disabled:focus, 2233 | .btn-success[disabled]:focus, 2234 | fieldset[disabled] .btn-success:focus, 2235 | .btn-success.disabled:active, 2236 | .btn-success[disabled]:active, 2237 | fieldset[disabled] .btn-success:active, 2238 | .btn-success.disabled.active, 2239 | .btn-success[disabled].active, 2240 | fieldset[disabled] .btn-success.active { 2241 | background-color: #5cb85c; 2242 | border-color: #4cae4c; 2243 | } 2244 | 2245 | .btn-info { 2246 | color: #ffffff; 2247 | background-color: #5bc0de; 2248 | border-color: #46b8da; 2249 | } 2250 | 2251 | .btn-info:hover, 2252 | .btn-info:focus, 2253 | .btn-info:active, 2254 | .btn-info.active, 2255 | .open .dropdown-toggle.btn-info { 2256 | color: #ffffff; 2257 | background-color: #39b3d7; 2258 | border-color: #269abc; 2259 | } 2260 | 2261 | .btn-info:active, 2262 | .btn-info.active, 2263 | .open .dropdown-toggle.btn-info { 2264 | background-image: none; 2265 | } 2266 | 2267 | .btn-info.disabled, 2268 | .btn-info[disabled], 2269 | fieldset[disabled] .btn-info, 2270 | .btn-info.disabled:hover, 2271 | .btn-info[disabled]:hover, 2272 | fieldset[disabled] .btn-info:hover, 2273 | .btn-info.disabled:focus, 2274 | .btn-info[disabled]:focus, 2275 | fieldset[disabled] .btn-info:focus, 2276 | .btn-info.disabled:active, 2277 | .btn-info[disabled]:active, 2278 | fieldset[disabled] .btn-info:active, 2279 | .btn-info.disabled.active, 2280 | .btn-info[disabled].active, 2281 | fieldset[disabled] .btn-info.active { 2282 | background-color: #5bc0de; 2283 | border-color: #46b8da; 2284 | } 2285 | 2286 | .btn-link { 2287 | font-weight: normal; 2288 | color: #428bca; 2289 | cursor: pointer; 2290 | border-radius: 0; 2291 | } 2292 | 2293 | .btn-link, 2294 | .btn-link:active, 2295 | .btn-link[disabled], 2296 | fieldset[disabled] .btn-link { 2297 | background-color: transparent; 2298 | -webkit-box-shadow: none; 2299 | box-shadow: none; 2300 | } 2301 | 2302 | .btn-link, 2303 | .btn-link:hover, 2304 | .btn-link:focus, 2305 | .btn-link:active { 2306 | border-color: transparent; 2307 | } 2308 | 2309 | .btn-link:hover, 2310 | .btn-link:focus { 2311 | color: #2a6496; 2312 | text-decoration: underline; 2313 | background-color: transparent; 2314 | } 2315 | 2316 | .btn-link[disabled]:hover, 2317 | fieldset[disabled] .btn-link:hover, 2318 | .btn-link[disabled]:focus, 2319 | fieldset[disabled] .btn-link:focus { 2320 | color: #999999; 2321 | text-decoration: none; 2322 | } 2323 | 2324 | .btn-lg { 2325 | padding: 10px 16px; 2326 | font-size: 18px; 2327 | line-height: 1.33; 2328 | border-radius: 6px; 2329 | } 2330 | 2331 | .btn-sm, 2332 | .btn-xs { 2333 | padding: 5px 10px; 2334 | font-size: 12px; 2335 | line-height: 1.5; 2336 | border-radius: 3px; 2337 | } 2338 | 2339 | .btn-xs { 2340 | padding: 1px 5px; 2341 | } 2342 | 2343 | .btn-block { 2344 | display: block; 2345 | width: 100%; 2346 | padding-right: 0; 2347 | padding-left: 0; 2348 | } 2349 | 2350 | .btn-block + .btn-block { 2351 | margin-top: 5px; 2352 | } 2353 | 2354 | input[type="submit"].btn-block, 2355 | input[type="reset"].btn-block, 2356 | input[type="button"].btn-block { 2357 | width: 100%; 2358 | } 2359 | 2360 | .fade { 2361 | opacity: 0; 2362 | -webkit-transition: opacity 0.15s linear; 2363 | transition: opacity 0.15s linear; 2364 | } 2365 | 2366 | .fade.in { 2367 | opacity: 1; 2368 | } 2369 | 2370 | .collapse { 2371 | display: none; 2372 | } 2373 | 2374 | .collapse.in { 2375 | display: block; 2376 | } 2377 | 2378 | .collapsing { 2379 | position: relative; 2380 | height: 0; 2381 | overflow: hidden; 2382 | -webkit-transition: height 0.35s ease; 2383 | transition: height 0.35s ease; 2384 | } 2385 | 2386 | @font-face { 2387 | font-family: 'Glyphicons Halflings'; 2388 | src: url('../fonts/glyphicons-halflings-regular.eot'); 2389 | src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); 2390 | } 2391 | 2392 | .glyphicon { 2393 | position: relative; 2394 | top: 1px; 2395 | display: inline-block; 2396 | font-family: 'Glyphicons Halflings'; 2397 | -webkit-font-smoothing: antialiased; 2398 | font-style: normal; 2399 | font-weight: normal; 2400 | line-height: 1; 2401 | } 2402 | 2403 | .glyphicon-asterisk:before { 2404 | content: "\2a"; 2405 | } 2406 | 2407 | .glyphicon-plus:before { 2408 | content: "\2b"; 2409 | } 2410 | 2411 | .glyphicon-euro:before { 2412 | content: "\20ac"; 2413 | } 2414 | 2415 | .glyphicon-minus:before { 2416 | content: "\2212"; 2417 | } 2418 | 2419 | .glyphicon-cloud:before { 2420 | content: "\2601"; 2421 | } 2422 | 2423 | .glyphicon-envelope:before { 2424 | content: "\2709"; 2425 | } 2426 | 2427 | .glyphicon-pencil:before { 2428 | content: "\270f"; 2429 | } 2430 | 2431 | .glyphicon-glass:before { 2432 | content: "\e001"; 2433 | } 2434 | 2435 | .glyphicon-music:before { 2436 | content: "\e002"; 2437 | } 2438 | 2439 | .glyphicon-search:before { 2440 | content: "\e003"; 2441 | } 2442 | 2443 | .glyphicon-heart:before { 2444 | content: "\e005"; 2445 | } 2446 | 2447 | .glyphicon-star:before { 2448 | content: "\e006"; 2449 | } 2450 | 2451 | .glyphicon-star-empty:before { 2452 | content: "\e007"; 2453 | } 2454 | 2455 | .glyphicon-user:before { 2456 | content: "\e008"; 2457 | } 2458 | 2459 | .glyphicon-film:before { 2460 | content: "\e009"; 2461 | } 2462 | 2463 | .glyphicon-th-large:before { 2464 | content: "\e010"; 2465 | } 2466 | 2467 | .glyphicon-th:before { 2468 | content: "\e011"; 2469 | } 2470 | 2471 | .glyphicon-th-list:before { 2472 | content: "\e012"; 2473 | } 2474 | 2475 | .glyphicon-ok:before { 2476 | content: "\e013"; 2477 | } 2478 | 2479 | .glyphicon-remove:before { 2480 | content: "\e014"; 2481 | } 2482 | 2483 | .glyphicon-zoom-in:before { 2484 | content: "\e015"; 2485 | } 2486 | 2487 | .glyphicon-zoom-out:before { 2488 | content: "\e016"; 2489 | } 2490 | 2491 | .glyphicon-off:before { 2492 | content: "\e017"; 2493 | } 2494 | 2495 | .glyphicon-signal:before { 2496 | content: "\e018"; 2497 | } 2498 | 2499 | .glyphicon-cog:before { 2500 | content: "\e019"; 2501 | } 2502 | 2503 | .glyphicon-trash:before { 2504 | content: "\e020"; 2505 | } 2506 | 2507 | .glyphicon-home:before { 2508 | content: "\e021"; 2509 | } 2510 | 2511 | .glyphicon-file:before { 2512 | content: "\e022"; 2513 | } 2514 | 2515 | .glyphicon-time:before { 2516 | content: "\e023"; 2517 | } 2518 | 2519 | .glyphicon-road:before { 2520 | content: "\e024"; 2521 | } 2522 | 2523 | .glyphicon-download-alt:before { 2524 | content: "\e025"; 2525 | } 2526 | 2527 | .glyphicon-download:before { 2528 | content: "\e026"; 2529 | } 2530 | 2531 | .glyphicon-upload:before { 2532 | content: "\e027"; 2533 | } 2534 | 2535 | .glyphicon-inbox:before { 2536 | content: "\e028"; 2537 | } 2538 | 2539 | .glyphicon-play-circle:before { 2540 | content: "\e029"; 2541 | } 2542 | 2543 | .glyphicon-repeat:before { 2544 | content: "\e030"; 2545 | } 2546 | 2547 | .glyphicon-refresh:before { 2548 | content: "\e031"; 2549 | } 2550 | 2551 | .glyphicon-list-alt:before { 2552 | content: "\e032"; 2553 | } 2554 | 2555 | .glyphicon-flag:before { 2556 | content: "\e034"; 2557 | } 2558 | 2559 | .glyphicon-headphones:before { 2560 | content: "\e035"; 2561 | } 2562 | 2563 | .glyphicon-volume-off:before { 2564 | content: "\e036"; 2565 | } 2566 | 2567 | .glyphicon-volume-down:before { 2568 | content: "\e037"; 2569 | } 2570 | 2571 | .glyphicon-volume-up:before { 2572 | content: "\e038"; 2573 | } 2574 | 2575 | .glyphicon-qrcode:before { 2576 | content: "\e039"; 2577 | } 2578 | 2579 | .glyphicon-barcode:before { 2580 | content: "\e040"; 2581 | } 2582 | 2583 | .glyphicon-tag:before { 2584 | content: "\e041"; 2585 | } 2586 | 2587 | .glyphicon-tags:before { 2588 | content: "\e042"; 2589 | } 2590 | 2591 | .glyphicon-book:before { 2592 | content: "\e043"; 2593 | } 2594 | 2595 | .glyphicon-print:before { 2596 | content: "\e045"; 2597 | } 2598 | 2599 | .glyphicon-font:before { 2600 | content: "\e047"; 2601 | } 2602 | 2603 | .glyphicon-bold:before { 2604 | content: "\e048"; 2605 | } 2606 | 2607 | .glyphicon-italic:before { 2608 | content: "\e049"; 2609 | } 2610 | 2611 | .glyphicon-text-height:before { 2612 | content: "\e050"; 2613 | } 2614 | 2615 | .glyphicon-text-width:before { 2616 | content: "\e051"; 2617 | } 2618 | 2619 | .glyphicon-align-left:before { 2620 | content: "\e052"; 2621 | } 2622 | 2623 | .glyphicon-align-center:before { 2624 | content: "\e053"; 2625 | } 2626 | 2627 | .glyphicon-align-right:before { 2628 | content: "\e054"; 2629 | } 2630 | 2631 | .glyphicon-align-justify:before { 2632 | content: "\e055"; 2633 | } 2634 | 2635 | .glyphicon-list:before { 2636 | content: "\e056"; 2637 | } 2638 | 2639 | .glyphicon-indent-left:before { 2640 | content: "\e057"; 2641 | } 2642 | 2643 | .glyphicon-indent-right:before { 2644 | content: "\e058"; 2645 | } 2646 | 2647 | .glyphicon-facetime-video:before { 2648 | content: "\e059"; 2649 | } 2650 | 2651 | .glyphicon-picture:before { 2652 | content: "\e060"; 2653 | } 2654 | 2655 | .glyphicon-map-marker:before { 2656 | content: "\e062"; 2657 | } 2658 | 2659 | .glyphicon-adjust:before { 2660 | content: "\e063"; 2661 | } 2662 | 2663 | .glyphicon-tint:before { 2664 | content: "\e064"; 2665 | } 2666 | 2667 | .glyphicon-edit:before { 2668 | content: "\e065"; 2669 | } 2670 | 2671 | .glyphicon-share:before { 2672 | content: "\e066"; 2673 | } 2674 | 2675 | .glyphicon-check:before { 2676 | content: "\e067"; 2677 | } 2678 | 2679 | .glyphicon-move:before { 2680 | content: "\e068"; 2681 | } 2682 | 2683 | .glyphicon-step-backward:before { 2684 | content: "\e069"; 2685 | } 2686 | 2687 | .glyphicon-fast-backward:before { 2688 | content: "\e070"; 2689 | } 2690 | 2691 | .glyphicon-backward:before { 2692 | content: "\e071"; 2693 | } 2694 | 2695 | .glyphicon-play:before { 2696 | content: "\e072"; 2697 | } 2698 | 2699 | .glyphicon-pause:before { 2700 | content: "\e073"; 2701 | } 2702 | 2703 | .glyphicon-stop:before { 2704 | content: "\e074"; 2705 | } 2706 | 2707 | .glyphicon-forward:before { 2708 | content: "\e075"; 2709 | } 2710 | 2711 | .glyphicon-fast-forward:before { 2712 | content: "\e076"; 2713 | } 2714 | 2715 | .glyphicon-step-forward:before { 2716 | content: "\e077"; 2717 | } 2718 | 2719 | .glyphicon-eject:before { 2720 | content: "\e078"; 2721 | } 2722 | 2723 | .glyphicon-chevron-left:before { 2724 | content: "\e079"; 2725 | } 2726 | 2727 | .glyphicon-chevron-right:before { 2728 | content: "\e080"; 2729 | } 2730 | 2731 | .glyphicon-plus-sign:before { 2732 | content: "\e081"; 2733 | } 2734 | 2735 | .glyphicon-minus-sign:before { 2736 | content: "\e082"; 2737 | } 2738 | 2739 | .glyphicon-remove-sign:before { 2740 | content: "\e083"; 2741 | } 2742 | 2743 | .glyphicon-ok-sign:before { 2744 | content: "\e084"; 2745 | } 2746 | 2747 | .glyphicon-question-sign:before { 2748 | content: "\e085"; 2749 | } 2750 | 2751 | .glyphicon-info-sign:before { 2752 | content: "\e086"; 2753 | } 2754 | 2755 | .glyphicon-screenshot:before { 2756 | content: "\e087"; 2757 | } 2758 | 2759 | .glyphicon-remove-circle:before { 2760 | content: "\e088"; 2761 | } 2762 | 2763 | .glyphicon-ok-circle:before { 2764 | content: "\e089"; 2765 | } 2766 | 2767 | .glyphicon-ban-circle:before { 2768 | content: "\e090"; 2769 | } 2770 | 2771 | .glyphicon-arrow-left:before { 2772 | content: "\e091"; 2773 | } 2774 | 2775 | .glyphicon-arrow-right:before { 2776 | content: "\e092"; 2777 | } 2778 | 2779 | .glyphicon-arrow-up:before { 2780 | content: "\e093"; 2781 | } 2782 | 2783 | .glyphicon-arrow-down:before { 2784 | content: "\e094"; 2785 | } 2786 | 2787 | .glyphicon-share-alt:before { 2788 | content: "\e095"; 2789 | } 2790 | 2791 | .glyphicon-resize-full:before { 2792 | content: "\e096"; 2793 | } 2794 | 2795 | .glyphicon-resize-small:before { 2796 | content: "\e097"; 2797 | } 2798 | 2799 | .glyphicon-exclamation-sign:before { 2800 | content: "\e101"; 2801 | } 2802 | 2803 | .glyphicon-gift:before { 2804 | content: "\e102"; 2805 | } 2806 | 2807 | .glyphicon-leaf:before { 2808 | content: "\e103"; 2809 | } 2810 | 2811 | .glyphicon-eye-open:before { 2812 | content: "\e105"; 2813 | } 2814 | 2815 | .glyphicon-eye-close:before { 2816 | content: "\e106"; 2817 | } 2818 | 2819 | .glyphicon-warning-sign:before { 2820 | content: "\e107"; 2821 | } 2822 | 2823 | .glyphicon-plane:before { 2824 | content: "\e108"; 2825 | } 2826 | 2827 | .glyphicon-random:before { 2828 | content: "\e110"; 2829 | } 2830 | 2831 | .glyphicon-comment:before { 2832 | content: "\e111"; 2833 | } 2834 | 2835 | .glyphicon-magnet:before { 2836 | content: "\e112"; 2837 | } 2838 | 2839 | .glyphicon-chevron-up:before { 2840 | content: "\e113"; 2841 | } 2842 | 2843 | .glyphicon-chevron-down:before { 2844 | content: "\e114"; 2845 | } 2846 | 2847 | .glyphicon-retweet:before { 2848 | content: "\e115"; 2849 | } 2850 | 2851 | .glyphicon-shopping-cart:before { 2852 | content: "\e116"; 2853 | } 2854 | 2855 | .glyphicon-folder-close:before { 2856 | content: "\e117"; 2857 | } 2858 | 2859 | .glyphicon-folder-open:before { 2860 | content: "\e118"; 2861 | } 2862 | 2863 | .glyphicon-resize-vertical:before { 2864 | content: "\e119"; 2865 | } 2866 | 2867 | .glyphicon-resize-horizontal:before { 2868 | content: "\e120"; 2869 | } 2870 | 2871 | .glyphicon-hdd:before { 2872 | content: "\e121"; 2873 | } 2874 | 2875 | .glyphicon-bullhorn:before { 2876 | content: "\e122"; 2877 | } 2878 | 2879 | .glyphicon-certificate:before { 2880 | content: "\e124"; 2881 | } 2882 | 2883 | .glyphicon-thumbs-up:before { 2884 | content: "\e125"; 2885 | } 2886 | 2887 | .glyphicon-thumbs-down:before { 2888 | content: "\e126"; 2889 | } 2890 | 2891 | .glyphicon-hand-right:before { 2892 | content: "\e127"; 2893 | } 2894 | 2895 | .glyphicon-hand-left:before { 2896 | content: "\e128"; 2897 | } 2898 | 2899 | .glyphicon-hand-up:before { 2900 | content: "\e129"; 2901 | } 2902 | 2903 | .glyphicon-hand-down:before { 2904 | content: "\e130"; 2905 | } 2906 | 2907 | .glyphicon-circle-arrow-right:before { 2908 | content: "\e131"; 2909 | } 2910 | 2911 | .glyphicon-circle-arrow-left:before { 2912 | content: "\e132"; 2913 | } 2914 | 2915 | .glyphicon-circle-arrow-up:before { 2916 | content: "\e133"; 2917 | } 2918 | 2919 | .glyphicon-circle-arrow-down:before { 2920 | content: "\e134"; 2921 | } 2922 | 2923 | .glyphicon-globe:before { 2924 | content: "\e135"; 2925 | } 2926 | 2927 | .glyphicon-tasks:before { 2928 | content: "\e137"; 2929 | } 2930 | 2931 | .glyphicon-filter:before { 2932 | content: "\e138"; 2933 | } 2934 | 2935 | .glyphicon-fullscreen:before { 2936 | content: "\e140"; 2937 | } 2938 | 2939 | .glyphicon-dashboard:before { 2940 | content: "\e141"; 2941 | } 2942 | 2943 | .glyphicon-heart-empty:before { 2944 | content: "\e143"; 2945 | } 2946 | 2947 | .glyphicon-link:before { 2948 | content: "\e144"; 2949 | } 2950 | 2951 | .glyphicon-phone:before { 2952 | content: "\e145"; 2953 | } 2954 | 2955 | .glyphicon-usd:before { 2956 | content: "\e148"; 2957 | } 2958 | 2959 | .glyphicon-gbp:before { 2960 | content: "\e149"; 2961 | } 2962 | 2963 | .glyphicon-sort:before { 2964 | content: "\e150"; 2965 | } 2966 | 2967 | .glyphicon-sort-by-alphabet:before { 2968 | content: "\e151"; 2969 | } 2970 | 2971 | .glyphicon-sort-by-alphabet-alt:before { 2972 | content: "\e152"; 2973 | } 2974 | 2975 | .glyphicon-sort-by-order:before { 2976 | content: "\e153"; 2977 | } 2978 | 2979 | .glyphicon-sort-by-order-alt:before { 2980 | content: "\e154"; 2981 | } 2982 | 2983 | .glyphicon-sort-by-attributes:before { 2984 | content: "\e155"; 2985 | } 2986 | 2987 | .glyphicon-sort-by-attributes-alt:before { 2988 | content: "\e156"; 2989 | } 2990 | 2991 | .glyphicon-unchecked:before { 2992 | content: "\e157"; 2993 | } 2994 | 2995 | .glyphicon-expand:before { 2996 | content: "\e158"; 2997 | } 2998 | 2999 | .glyphicon-collapse-down:before { 3000 | content: "\e159"; 3001 | } 3002 | 3003 | .glyphicon-collapse-up:before { 3004 | content: "\e160"; 3005 | } 3006 | 3007 | .glyphicon-log-in:before { 3008 | content: "\e161"; 3009 | } 3010 | 3011 | .glyphicon-flash:before { 3012 | content: "\e162"; 3013 | } 3014 | 3015 | .glyphicon-log-out:before { 3016 | content: "\e163"; 3017 | } 3018 | 3019 | .glyphicon-new-window:before { 3020 | content: "\e164"; 3021 | } 3022 | 3023 | .glyphicon-record:before { 3024 | content: "\e165"; 3025 | } 3026 | 3027 | .glyphicon-save:before { 3028 | content: "\e166"; 3029 | } 3030 | 3031 | .glyphicon-open:before { 3032 | content: "\e167"; 3033 | } 3034 | 3035 | .glyphicon-saved:before { 3036 | content: "\e168"; 3037 | } 3038 | 3039 | .glyphicon-import:before { 3040 | content: "\e169"; 3041 | } 3042 | 3043 | .glyphicon-export:before { 3044 | content: "\e170"; 3045 | } 3046 | 3047 | .glyphicon-send:before { 3048 | content: "\e171"; 3049 | } 3050 | 3051 | .glyphicon-floppy-disk:before { 3052 | content: "\e172"; 3053 | } 3054 | 3055 | .glyphicon-floppy-saved:before { 3056 | content: "\e173"; 3057 | } 3058 | 3059 | .glyphicon-floppy-remove:before { 3060 | content: "\e174"; 3061 | } 3062 | 3063 | .glyphicon-floppy-save:before { 3064 | content: "\e175"; 3065 | } 3066 | 3067 | .glyphicon-floppy-open:before { 3068 | content: "\e176"; 3069 | } 3070 | 3071 | .glyphicon-credit-card:before { 3072 | content: "\e177"; 3073 | } 3074 | 3075 | .glyphicon-transfer:before { 3076 | content: "\e178"; 3077 | } 3078 | 3079 | .glyphicon-cutlery:before { 3080 | content: "\e179"; 3081 | } 3082 | 3083 | .glyphicon-header:before { 3084 | content: "\e180"; 3085 | } 3086 | 3087 | .glyphicon-compressed:before { 3088 | content: "\e181"; 3089 | } 3090 | 3091 | .glyphicon-earphone:before { 3092 | content: "\e182"; 3093 | } 3094 | 3095 | .glyphicon-phone-alt:before { 3096 | content: "\e183"; 3097 | } 3098 | 3099 | .glyphicon-tower:before { 3100 | content: "\e184"; 3101 | } 3102 | 3103 | .glyphicon-stats:before { 3104 | content: "\e185"; 3105 | } 3106 | 3107 | .glyphicon-sd-video:before { 3108 | content: "\e186"; 3109 | } 3110 | 3111 | .glyphicon-hd-video:before { 3112 | content: "\e187"; 3113 | } 3114 | 3115 | .glyphicon-subtitles:before { 3116 | content: "\e188"; 3117 | } 3118 | 3119 | .glyphicon-sound-stereo:before { 3120 | content: "\e189"; 3121 | } 3122 | 3123 | .glyphicon-sound-dolby:before { 3124 | content: "\e190"; 3125 | } 3126 | 3127 | .glyphicon-sound-5-1:before { 3128 | content: "\e191"; 3129 | } 3130 | 3131 | .glyphicon-sound-6-1:before { 3132 | content: "\e192"; 3133 | } 3134 | 3135 | .glyphicon-sound-7-1:before { 3136 | content: "\e193"; 3137 | } 3138 | 3139 | .glyphicon-copyright-mark:before { 3140 | content: "\e194"; 3141 | } 3142 | 3143 | .glyphicon-registration-mark:before { 3144 | content: "\e195"; 3145 | } 3146 | 3147 | .glyphicon-cloud-download:before { 3148 | content: "\e197"; 3149 | } 3150 | 3151 | .glyphicon-cloud-upload:before { 3152 | content: "\e198"; 3153 | } 3154 | 3155 | .glyphicon-tree-conifer:before { 3156 | content: "\e199"; 3157 | } 3158 | 3159 | .glyphicon-tree-deciduous:before { 3160 | content: "\e200"; 3161 | } 3162 | 3163 | .glyphicon-briefcase:before { 3164 | content: "\1f4bc"; 3165 | } 3166 | 3167 | .glyphicon-calendar:before { 3168 | content: "\1f4c5"; 3169 | } 3170 | 3171 | .glyphicon-pushpin:before { 3172 | content: "\1f4cc"; 3173 | } 3174 | 3175 | .glyphicon-paperclip:before { 3176 | content: "\1f4ce"; 3177 | } 3178 | 3179 | .glyphicon-camera:before { 3180 | content: "\1f4f7"; 3181 | } 3182 | 3183 | .glyphicon-lock:before { 3184 | content: "\1f512"; 3185 | } 3186 | 3187 | .glyphicon-bell:before { 3188 | content: "\1f514"; 3189 | } 3190 | 3191 | .glyphicon-bookmark:before { 3192 | content: "\1f516"; 3193 | } 3194 | 3195 | .glyphicon-fire:before { 3196 | content: "\1f525"; 3197 | } 3198 | 3199 | .glyphicon-wrench:before { 3200 | content: "\1f527"; 3201 | } 3202 | 3203 | .caret { 3204 | display: inline-block; 3205 | width: 0; 3206 | height: 0; 3207 | margin-left: 2px; 3208 | vertical-align: middle; 3209 | border-top: 4px solid #000000; 3210 | border-right: 4px solid transparent; 3211 | border-bottom: 0 dotted; 3212 | border-left: 4px solid transparent; 3213 | content: ""; 3214 | } 3215 | 3216 | .dropdown { 3217 | position: relative; 3218 | } 3219 | 3220 | .dropdown-toggle:focus { 3221 | outline: 0; 3222 | } 3223 | 3224 | .dropdown-menu { 3225 | position: absolute; 3226 | top: 100%; 3227 | left: 0; 3228 | z-index: 1000; 3229 | display: none; 3230 | float: left; 3231 | min-width: 160px; 3232 | padding: 5px 0; 3233 | margin: 2px 0 0; 3234 | font-size: 14px; 3235 | list-style: none; 3236 | background-color: #ffffff; 3237 | border: 1px solid #cccccc; 3238 | border: 1px solid rgba(0, 0, 0, 0.15); 3239 | border-radius: 4px; 3240 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); 3241 | box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); 3242 | background-clip: padding-box; 3243 | } 3244 | 3245 | .dropdown-menu.pull-right { 3246 | right: 0; 3247 | left: auto; 3248 | } 3249 | 3250 | .dropdown-menu .divider { 3251 | height: 1px; 3252 | margin: 9px 0; 3253 | overflow: hidden; 3254 | background-color: #e5e5e5; 3255 | } 3256 | 3257 | .dropdown-menu > li > a { 3258 | display: block; 3259 | padding: 3px 20px; 3260 | clear: both; 3261 | font-weight: normal; 3262 | line-height: 1.428571429; 3263 | color: #333333; 3264 | white-space: nowrap; 3265 | } 3266 | 3267 | .dropdown-menu > li > a:hover, 3268 | .dropdown-menu > li > a:focus { 3269 | color: #ffffff; 3270 | text-decoration: none; 3271 | background-color: #428bca; 3272 | } 3273 | 3274 | .dropdown-menu > .active > a, 3275 | .dropdown-menu > .active > a:hover, 3276 | .dropdown-menu > .active > a:focus { 3277 | color: #ffffff; 3278 | text-decoration: none; 3279 | background-color: #428bca; 3280 | outline: 0; 3281 | } 3282 | 3283 | .dropdown-menu > .disabled > a, 3284 | .dropdown-menu > .disabled > a:hover, 3285 | .dropdown-menu > .disabled > a:focus { 3286 | color: #999999; 3287 | } 3288 | 3289 | .dropdown-menu > .disabled > a:hover, 3290 | .dropdown-menu > .disabled > a:focus { 3291 | text-decoration: none; 3292 | cursor: not-allowed; 3293 | background-color: transparent; 3294 | background-image: none; 3295 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 3296 | } 3297 | 3298 | .open > .dropdown-menu { 3299 | display: block; 3300 | } 3301 | 3302 | .open > a { 3303 | outline: 0; 3304 | } 3305 | 3306 | .dropdown-header { 3307 | display: block; 3308 | padding: 3px 20px; 3309 | font-size: 12px; 3310 | line-height: 1.428571429; 3311 | color: #999999; 3312 | } 3313 | 3314 | .dropdown-backdrop { 3315 | position: fixed; 3316 | top: 0; 3317 | right: 0; 3318 | bottom: 0; 3319 | left: 0; 3320 | z-index: 990; 3321 | } 3322 | 3323 | .pull-right > .dropdown-menu { 3324 | right: 0; 3325 | left: auto; 3326 | } 3327 | 3328 | .dropup .caret, 3329 | .navbar-fixed-bottom .dropdown .caret { 3330 | border-top: 0 dotted; 3331 | border-bottom: 4px solid #000000; 3332 | content: ""; 3333 | } 3334 | 3335 | .dropup .dropdown-menu, 3336 | .navbar-fixed-bottom .dropdown .dropdown-menu { 3337 | top: auto; 3338 | bottom: 100%; 3339 | margin-bottom: 1px; 3340 | } 3341 | 3342 | @media (min-width: 768px) { 3343 | .navbar-right .dropdown-menu { 3344 | right: 0; 3345 | left: auto; 3346 | } 3347 | } 3348 | 3349 | .btn-default .caret { 3350 | border-top-color: #333333; 3351 | } 3352 | 3353 | .btn-primary .caret, 3354 | .btn-success .caret, 3355 | .btn-warning .caret, 3356 | .btn-danger .caret, 3357 | .btn-info .caret { 3358 | border-top-color: #fff; 3359 | } 3360 | 3361 | .dropup .btn-default .caret { 3362 | border-bottom-color: #333333; 3363 | } 3364 | 3365 | .dropup .btn-primary .caret, 3366 | .dropup .btn-success .caret, 3367 | .dropup .btn-warning .caret, 3368 | .dropup .btn-danger .caret, 3369 | .dropup .btn-info .caret { 3370 | border-bottom-color: #fff; 3371 | } 3372 | 3373 | .btn-group, 3374 | .btn-group-vertical { 3375 | position: relative; 3376 | display: inline-block; 3377 | vertical-align: middle; 3378 | } 3379 | 3380 | .btn-group > .btn, 3381 | .btn-group-vertical > .btn { 3382 | position: relative; 3383 | float: left; 3384 | } 3385 | 3386 | .btn-group > .btn:hover, 3387 | .btn-group-vertical > .btn:hover, 3388 | .btn-group > .btn:focus, 3389 | .btn-group-vertical > .btn:focus, 3390 | .btn-group > .btn:active, 3391 | .btn-group-vertical > .btn:active, 3392 | .btn-group > .btn.active, 3393 | .btn-group-vertical > .btn.active { 3394 | z-index: 2; 3395 | } 3396 | 3397 | .btn-group > .btn:focus, 3398 | .btn-group-vertical > .btn:focus { 3399 | outline: none; 3400 | } 3401 | 3402 | .btn-group .btn + .btn, 3403 | .btn-group .btn + .btn-group, 3404 | .btn-group .btn-group + .btn, 3405 | .btn-group .btn-group + .btn-group { 3406 | margin-left: -1px; 3407 | } 3408 | 3409 | .btn-toolbar:before, 3410 | .btn-toolbar:after { 3411 | display: table; 3412 | content: " "; 3413 | } 3414 | 3415 | .btn-toolbar:after { 3416 | clear: both; 3417 | } 3418 | 3419 | .btn-toolbar:before, 3420 | .btn-toolbar:after { 3421 | display: table; 3422 | content: " "; 3423 | } 3424 | 3425 | .btn-toolbar:after { 3426 | clear: both; 3427 | } 3428 | 3429 | .btn-toolbar .btn-group { 3430 | float: left; 3431 | } 3432 | 3433 | .btn-toolbar > .btn + .btn, 3434 | .btn-toolbar > .btn-group + .btn, 3435 | .btn-toolbar > .btn + .btn-group, 3436 | .btn-toolbar > .btn-group + .btn-group { 3437 | margin-left: 5px; 3438 | } 3439 | 3440 | .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { 3441 | border-radius: 0; 3442 | } 3443 | 3444 | .btn-group > .btn:first-child { 3445 | margin-left: 0; 3446 | } 3447 | 3448 | .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { 3449 | border-top-right-radius: 0; 3450 | border-bottom-right-radius: 0; 3451 | } 3452 | 3453 | .btn-group > .btn:last-child:not(:first-child), 3454 | .btn-group > .dropdown-toggle:not(:first-child) { 3455 | border-bottom-left-radius: 0; 3456 | border-top-left-radius: 0; 3457 | } 3458 | 3459 | .btn-group > .btn-group { 3460 | float: left; 3461 | } 3462 | 3463 | .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { 3464 | border-radius: 0; 3465 | } 3466 | 3467 | .btn-group > .btn-group:first-child > .btn:last-child, 3468 | .btn-group > .btn-group:first-child > .dropdown-toggle { 3469 | border-top-right-radius: 0; 3470 | border-bottom-right-radius: 0; 3471 | } 3472 | 3473 | .btn-group > .btn-group:last-child > .btn:first-child { 3474 | border-bottom-left-radius: 0; 3475 | border-top-left-radius: 0; 3476 | } 3477 | 3478 | .btn-group .dropdown-toggle:active, 3479 | .btn-group.open .dropdown-toggle { 3480 | outline: 0; 3481 | } 3482 | 3483 | .btn-group-xs > .btn { 3484 | padding: 5px 10px; 3485 | padding: 1px 5px; 3486 | font-size: 12px; 3487 | line-height: 1.5; 3488 | border-radius: 3px; 3489 | } 3490 | 3491 | .btn-group-sm > .btn { 3492 | padding: 5px 10px; 3493 | font-size: 12px; 3494 | line-height: 1.5; 3495 | border-radius: 3px; 3496 | } 3497 | 3498 | .btn-group-lg > .btn { 3499 | padding: 10px 16px; 3500 | font-size: 18px; 3501 | line-height: 1.33; 3502 | border-radius: 6px; 3503 | } 3504 | 3505 | .btn-group > .btn + .dropdown-toggle { 3506 | padding-right: 8px; 3507 | padding-left: 8px; 3508 | } 3509 | 3510 | .btn-group > .btn-lg + .dropdown-toggle { 3511 | padding-right: 12px; 3512 | padding-left: 12px; 3513 | } 3514 | 3515 | .btn-group.open .dropdown-toggle { 3516 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 3517 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 3518 | } 3519 | 3520 | .btn .caret { 3521 | margin-left: 0; 3522 | } 3523 | 3524 | .btn-lg .caret { 3525 | border-width: 5px 5px 0; 3526 | border-bottom-width: 0; 3527 | } 3528 | 3529 | .dropup .btn-lg .caret { 3530 | border-width: 0 5px 5px; 3531 | } 3532 | 3533 | .btn-group-vertical > .btn, 3534 | .btn-group-vertical > .btn-group { 3535 | display: block; 3536 | float: none; 3537 | width: 100%; 3538 | max-width: 100%; 3539 | } 3540 | 3541 | .btn-group-vertical > .btn-group:before, 3542 | .btn-group-vertical > .btn-group:after { 3543 | display: table; 3544 | content: " "; 3545 | } 3546 | 3547 | .btn-group-vertical > .btn-group:after { 3548 | clear: both; 3549 | } 3550 | 3551 | .btn-group-vertical > .btn-group:before, 3552 | .btn-group-vertical > .btn-group:after { 3553 | display: table; 3554 | content: " "; 3555 | } 3556 | 3557 | .btn-group-vertical > .btn-group:after { 3558 | clear: both; 3559 | } 3560 | 3561 | .btn-group-vertical > .btn-group > .btn { 3562 | float: none; 3563 | } 3564 | 3565 | .btn-group-vertical > .btn + .btn, 3566 | .btn-group-vertical > .btn + .btn-group, 3567 | .btn-group-vertical > .btn-group + .btn, 3568 | .btn-group-vertical > .btn-group + .btn-group { 3569 | margin-top: -1px; 3570 | margin-left: 0; 3571 | } 3572 | 3573 | .btn-group-vertical > .btn:not(:first-child):not(:last-child) { 3574 | border-radius: 0; 3575 | } 3576 | 3577 | .btn-group-vertical > .btn:first-child:not(:last-child) { 3578 | border-top-right-radius: 4px; 3579 | border-bottom-right-radius: 0; 3580 | border-bottom-left-radius: 0; 3581 | } 3582 | 3583 | .btn-group-vertical > .btn:last-child:not(:first-child) { 3584 | border-top-right-radius: 0; 3585 | border-bottom-left-radius: 4px; 3586 | border-top-left-radius: 0; 3587 | } 3588 | 3589 | .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { 3590 | border-radius: 0; 3591 | } 3592 | 3593 | .btn-group-vertical > .btn-group:first-child > .btn:last-child, 3594 | .btn-group-vertical > .btn-group:first-child > .dropdown-toggle { 3595 | border-bottom-right-radius: 0; 3596 | border-bottom-left-radius: 0; 3597 | } 3598 | 3599 | .btn-group-vertical > .btn-group:last-child > .btn:first-child { 3600 | border-top-right-radius: 0; 3601 | border-top-left-radius: 0; 3602 | } 3603 | 3604 | .btn-group-justified { 3605 | display: table; 3606 | width: 100%; 3607 | border-collapse: separate; 3608 | table-layout: fixed; 3609 | } 3610 | 3611 | .btn-group-justified .btn { 3612 | display: table-cell; 3613 | float: none; 3614 | width: 1%; 3615 | } 3616 | 3617 | [data-toggle="buttons"] > .btn > input[type="radio"], 3618 | [data-toggle="buttons"] > .btn > input[type="checkbox"] { 3619 | display: none; 3620 | } 3621 | 3622 | .input-group { 3623 | position: relative; 3624 | display: table; 3625 | border-collapse: separate; 3626 | } 3627 | 3628 | .input-group.col { 3629 | float: none; 3630 | padding-right: 0; 3631 | padding-left: 0; 3632 | } 3633 | 3634 | .input-group .form-control { 3635 | width: 100%; 3636 | margin-bottom: 0; 3637 | } 3638 | 3639 | .input-group-lg > .form-control, 3640 | .input-group-lg > .input-group-addon, 3641 | .input-group-lg > .input-group-btn > .btn { 3642 | height: 45px; 3643 | padding: 10px 16px; 3644 | font-size: 18px; 3645 | line-height: 1.33; 3646 | border-radius: 6px; 3647 | } 3648 | 3649 | select.input-group-lg > .form-control, 3650 | select.input-group-lg > .input-group-addon, 3651 | select.input-group-lg > .input-group-btn > .btn { 3652 | height: 45px; 3653 | line-height: 45px; 3654 | } 3655 | 3656 | textarea.input-group-lg > .form-control, 3657 | textarea.input-group-lg > .input-group-addon, 3658 | textarea.input-group-lg > .input-group-btn > .btn { 3659 | height: auto; 3660 | } 3661 | 3662 | .input-group-sm > .form-control, 3663 | .input-group-sm > .input-group-addon, 3664 | .input-group-sm > .input-group-btn > .btn { 3665 | height: 30px; 3666 | padding: 5px 10px; 3667 | font-size: 12px; 3668 | line-height: 1.5; 3669 | border-radius: 3px; 3670 | } 3671 | 3672 | select.input-group-sm > .form-control, 3673 | select.input-group-sm > .input-group-addon, 3674 | select.input-group-sm > .input-group-btn > .btn { 3675 | height: 30px; 3676 | line-height: 30px; 3677 | } 3678 | 3679 | textarea.input-group-sm > .form-control, 3680 | textarea.input-group-sm > .input-group-addon, 3681 | textarea.input-group-sm > .input-group-btn > .btn { 3682 | height: auto; 3683 | } 3684 | 3685 | .input-group-addon, 3686 | .input-group-btn, 3687 | .input-group .form-control { 3688 | display: table-cell; 3689 | } 3690 | 3691 | .input-group-addon:not(:first-child):not(:last-child), 3692 | .input-group-btn:not(:first-child):not(:last-child), 3693 | .input-group .form-control:not(:first-child):not(:last-child) { 3694 | border-radius: 0; 3695 | } 3696 | 3697 | .input-group-addon, 3698 | .input-group-btn { 3699 | width: 1%; 3700 | white-space: nowrap; 3701 | vertical-align: middle; 3702 | } 3703 | 3704 | .input-group-addon { 3705 | padding: 6px 12px; 3706 | font-size: 14px; 3707 | font-weight: normal; 3708 | line-height: 1; 3709 | text-align: center; 3710 | background-color: #eeeeee; 3711 | border: 1px solid #cccccc; 3712 | border-radius: 4px; 3713 | } 3714 | 3715 | .input-group-addon.input-sm { 3716 | padding: 5px 10px; 3717 | font-size: 12px; 3718 | border-radius: 3px; 3719 | } 3720 | 3721 | .input-group-addon.input-lg { 3722 | padding: 10px 16px; 3723 | font-size: 18px; 3724 | border-radius: 6px; 3725 | } 3726 | 3727 | .input-group-addon input[type="radio"], 3728 | .input-group-addon input[type="checkbox"] { 3729 | margin-top: 0; 3730 | } 3731 | 3732 | .input-group .form-control:first-child, 3733 | .input-group-addon:first-child, 3734 | .input-group-btn:first-child > .btn, 3735 | .input-group-btn:first-child > .dropdown-toggle, 3736 | .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { 3737 | border-top-right-radius: 0; 3738 | border-bottom-right-radius: 0; 3739 | } 3740 | 3741 | .input-group-addon:first-child { 3742 | border-right: 0; 3743 | } 3744 | 3745 | .input-group .form-control:last-child, 3746 | .input-group-addon:last-child, 3747 | .input-group-btn:last-child > .btn, 3748 | .input-group-btn:last-child > .dropdown-toggle, 3749 | .input-group-btn:first-child > .btn:not(:first-child) { 3750 | border-bottom-left-radius: 0; 3751 | border-top-left-radius: 0; 3752 | } 3753 | 3754 | .input-group-addon:last-child { 3755 | border-left: 0; 3756 | } 3757 | 3758 | .input-group-btn { 3759 | position: relative; 3760 | white-space: nowrap; 3761 | } 3762 | 3763 | .input-group-btn > .btn { 3764 | position: relative; 3765 | } 3766 | 3767 | .input-group-btn > .btn + .btn { 3768 | margin-left: -4px; 3769 | } 3770 | 3771 | .input-group-btn > .btn:hover, 3772 | .input-group-btn > .btn:active { 3773 | z-index: 2; 3774 | } 3775 | 3776 | .nav { 3777 | padding-left: 0; 3778 | margin-bottom: 0; 3779 | list-style: none; 3780 | } 3781 | 3782 | .nav:before, 3783 | .nav:after { 3784 | display: table; 3785 | content: " "; 3786 | } 3787 | 3788 | .nav:after { 3789 | clear: both; 3790 | } 3791 | 3792 | .nav:before, 3793 | .nav:after { 3794 | display: table; 3795 | content: " "; 3796 | } 3797 | 3798 | .nav:after { 3799 | clear: both; 3800 | } 3801 | 3802 | .nav > li { 3803 | position: relative; 3804 | display: block; 3805 | } 3806 | 3807 | .nav > li > a { 3808 | position: relative; 3809 | display: block; 3810 | padding: 10px 15px; 3811 | } 3812 | 3813 | .nav > li > a:hover, 3814 | .nav > li > a:focus { 3815 | text-decoration: none; 3816 | background-color: #eeeeee; 3817 | } 3818 | 3819 | .nav > li.disabled > a { 3820 | color: #999999; 3821 | } 3822 | 3823 | .nav > li.disabled > a:hover, 3824 | .nav > li.disabled > a:focus { 3825 | color: #999999; 3826 | text-decoration: none; 3827 | cursor: not-allowed; 3828 | background-color: transparent; 3829 | } 3830 | 3831 | .nav .open > a, 3832 | .nav .open > a:hover, 3833 | .nav .open > a:focus { 3834 | background-color: #eeeeee; 3835 | border-color: #428bca; 3836 | } 3837 | 3838 | .nav .nav-divider { 3839 | height: 1px; 3840 | margin: 9px 0; 3841 | overflow: hidden; 3842 | background-color: #e5e5e5; 3843 | } 3844 | 3845 | .nav > li > a > img { 3846 | max-width: none; 3847 | } 3848 | 3849 | .nav-tabs { 3850 | border-bottom: 1px solid #dddddd; 3851 | } 3852 | 3853 | .nav-tabs > li { 3854 | float: left; 3855 | margin-bottom: -1px; 3856 | } 3857 | 3858 | .nav-tabs > li > a { 3859 | margin-right: 2px; 3860 | line-height: 1.428571429; 3861 | border: 1px solid transparent; 3862 | border-radius: 4px 4px 0 0; 3863 | } 3864 | 3865 | .nav-tabs > li > a:hover { 3866 | border-color: #eeeeee #eeeeee #dddddd; 3867 | } 3868 | 3869 | .nav-tabs > li.active > a, 3870 | .nav-tabs > li.active > a:hover, 3871 | .nav-tabs > li.active > a:focus { 3872 | color: #555555; 3873 | cursor: default; 3874 | background-color: #ffffff; 3875 | border: 1px solid #dddddd; 3876 | border-bottom-color: transparent; 3877 | } 3878 | 3879 | .nav-tabs.nav-justified { 3880 | width: 100%; 3881 | border-bottom: 0; 3882 | } 3883 | 3884 | .nav-tabs.nav-justified > li { 3885 | float: none; 3886 | } 3887 | 3888 | .nav-tabs.nav-justified > li > a { 3889 | text-align: center; 3890 | } 3891 | 3892 | @media (min-width: 768px) { 3893 | .nav-tabs.nav-justified > li { 3894 | display: table-cell; 3895 | width: 1%; 3896 | } 3897 | } 3898 | 3899 | .nav-tabs.nav-justified > li > a { 3900 | margin-right: 0; 3901 | border-bottom: 1px solid #dddddd; 3902 | } 3903 | 3904 | .nav-tabs.nav-justified > .active > a { 3905 | border-bottom-color: #ffffff; 3906 | } 3907 | 3908 | .nav-pills > li { 3909 | float: left; 3910 | } 3911 | 3912 | .nav-pills > li > a { 3913 | border-radius: 5px; 3914 | } 3915 | 3916 | .nav-pills > li + li { 3917 | margin-left: 2px; 3918 | } 3919 | 3920 | .nav-pills > li.active > a, 3921 | .nav-pills > li.active > a:hover, 3922 | .nav-pills > li.active > a:focus { 3923 | color: #ffffff; 3924 | background-color: #428bca; 3925 | } 3926 | 3927 | .nav-stacked > li { 3928 | float: none; 3929 | } 3930 | 3931 | .nav-stacked > li + li { 3932 | margin-top: 2px; 3933 | margin-left: 0; 3934 | } 3935 | 3936 | .nav-justified { 3937 | width: 100%; 3938 | } 3939 | 3940 | .nav-justified > li { 3941 | float: none; 3942 | } 3943 | 3944 | .nav-justified > li > a { 3945 | text-align: center; 3946 | } 3947 | 3948 | @media (min-width: 768px) { 3949 | .nav-justified > li { 3950 | display: table-cell; 3951 | width: 1%; 3952 | } 3953 | } 3954 | 3955 | .nav-tabs-justified { 3956 | border-bottom: 0; 3957 | } 3958 | 3959 | .nav-tabs-justified > li > a { 3960 | margin-right: 0; 3961 | border-bottom: 1px solid #dddddd; 3962 | } 3963 | 3964 | .nav-tabs-justified > .active > a { 3965 | border-bottom-color: #ffffff; 3966 | } 3967 | 3968 | .tabbable:before, 3969 | .tabbable:after { 3970 | display: table; 3971 | content: " "; 3972 | } 3973 | 3974 | .tabbable:after { 3975 | clear: both; 3976 | } 3977 | 3978 | .tabbable:before, 3979 | .tabbable:after { 3980 | display: table; 3981 | content: " "; 3982 | } 3983 | 3984 | .tabbable:after { 3985 | clear: both; 3986 | } 3987 | 3988 | .tab-content > .tab-pane, 3989 | .pill-content > .pill-pane { 3990 | display: none; 3991 | } 3992 | 3993 | .tab-content > .active, 3994 | .pill-content > .active { 3995 | display: block; 3996 | } 3997 | 3998 | .nav .caret { 3999 | border-top-color: #428bca; 4000 | border-bottom-color: #428bca; 4001 | } 4002 | 4003 | .nav a:hover .caret { 4004 | border-top-color: #2a6496; 4005 | border-bottom-color: #2a6496; 4006 | } 4007 | 4008 | .nav-tabs .dropdown-menu { 4009 | margin-top: -1px; 4010 | border-top-right-radius: 0; 4011 | border-top-left-radius: 0; 4012 | } 4013 | 4014 | .navbar { 4015 | position: relative; 4016 | z-index: 1000; 4017 | min-height: 50px; 4018 | margin-bottom: 20px; 4019 | border: 1px solid transparent; 4020 | } 4021 | 4022 | .navbar:before, 4023 | .navbar:after { 4024 | display: table; 4025 | content: " "; 4026 | } 4027 | 4028 | .navbar:after { 4029 | clear: both; 4030 | } 4031 | 4032 | .navbar:before, 4033 | .navbar:after { 4034 | display: table; 4035 | content: " "; 4036 | } 4037 | 4038 | .navbar:after { 4039 | clear: both; 4040 | } 4041 | 4042 | @media (min-width: 768px) { 4043 | .navbar { 4044 | border-radius: 4px; 4045 | } 4046 | } 4047 | 4048 | .navbar-header:before, 4049 | .navbar-header:after { 4050 | display: table; 4051 | content: " "; 4052 | } 4053 | 4054 | .navbar-header:after { 4055 | clear: both; 4056 | } 4057 | 4058 | .navbar-header:before, 4059 | .navbar-header:after { 4060 | display: table; 4061 | content: " "; 4062 | } 4063 | 4064 | .navbar-header:after { 4065 | clear: both; 4066 | } 4067 | 4068 | @media (min-width: 768px) { 4069 | .navbar-header { 4070 | float: left; 4071 | } 4072 | } 4073 | 4074 | .navbar-collapse { 4075 | max-height: 340px; 4076 | padding-right: 15px; 4077 | padding-left: 15px; 4078 | overflow-x: visible; 4079 | border-top: 1px solid transparent; 4080 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); 4081 | -webkit-overflow-scrolling: touch; 4082 | } 4083 | 4084 | .navbar-collapse:before, 4085 | .navbar-collapse:after { 4086 | display: table; 4087 | content: " "; 4088 | } 4089 | 4090 | .navbar-collapse:after { 4091 | clear: both; 4092 | } 4093 | 4094 | .navbar-collapse:before, 4095 | .navbar-collapse:after { 4096 | display: table; 4097 | content: " "; 4098 | } 4099 | 4100 | .navbar-collapse:after { 4101 | clear: both; 4102 | } 4103 | 4104 | .navbar-collapse.in { 4105 | overflow-y: auto; 4106 | } 4107 | 4108 | @media (min-width: 768px) { 4109 | .navbar-collapse { 4110 | width: auto; 4111 | border-top: 0; 4112 | box-shadow: none; 4113 | } 4114 | .navbar-collapse.collapse { 4115 | display: block !important; 4116 | height: auto !important; 4117 | padding-bottom: 0; 4118 | overflow: visible !important; 4119 | } 4120 | .navbar-collapse.in { 4121 | overflow-y: visible; 4122 | } 4123 | .navbar-collapse .navbar-nav.navbar-left:first-child { 4124 | margin-left: -15px; 4125 | } 4126 | .navbar-collapse .navbar-nav.navbar-right:last-child { 4127 | margin-right: -15px; 4128 | } 4129 | .navbar-collapse .navbar-text:last-child { 4130 | margin-right: 0; 4131 | } 4132 | } 4133 | 4134 | .container > .navbar-header, 4135 | .container > .navbar-collapse { 4136 | margin-right: -15px; 4137 | margin-left: -15px; 4138 | } 4139 | 4140 | @media (min-width: 768px) { 4141 | .container > .navbar-header, 4142 | .container > .navbar-collapse { 4143 | margin-right: 0; 4144 | margin-left: 0; 4145 | } 4146 | } 4147 | 4148 | .navbar-static-top { 4149 | border-width: 0 0 1px; 4150 | } 4151 | 4152 | @media (min-width: 768px) { 4153 | .navbar-static-top { 4154 | border-radius: 0; 4155 | } 4156 | } 4157 | 4158 | .navbar-fixed-top, 4159 | .navbar-fixed-bottom { 4160 | position: fixed; 4161 | right: 0; 4162 | left: 0; 4163 | border-width: 0 0 1px; 4164 | } 4165 | 4166 | @media (min-width: 768px) { 4167 | .navbar-fixed-top, 4168 | .navbar-fixed-bottom { 4169 | border-radius: 0; 4170 | } 4171 | } 4172 | 4173 | .navbar-fixed-top { 4174 | top: 0; 4175 | z-index: 1030; 4176 | } 4177 | 4178 | .navbar-fixed-bottom { 4179 | bottom: 0; 4180 | margin-bottom: 0; 4181 | } 4182 | 4183 | .navbar-brand { 4184 | float: left; 4185 | padding: 15px 15px; 4186 | font-size: 18px; 4187 | line-height: 20px; 4188 | } 4189 | 4190 | .navbar-brand:hover, 4191 | .navbar-brand:focus { 4192 | text-decoration: none; 4193 | } 4194 | 4195 | @media (min-width: 768px) { 4196 | .navbar > .container .navbar-brand { 4197 | margin-left: -15px; 4198 | } 4199 | } 4200 | 4201 | .navbar-toggle { 4202 | position: relative; 4203 | float: right; 4204 | padding: 9px 10px; 4205 | margin-top: 8px; 4206 | margin-right: 15px; 4207 | margin-bottom: 8px; 4208 | background-color: transparent; 4209 | border: 1px solid transparent; 4210 | border-radius: 4px; 4211 | } 4212 | 4213 | .navbar-toggle .icon-bar { 4214 | display: block; 4215 | width: 22px; 4216 | height: 2px; 4217 | border-radius: 1px; 4218 | } 4219 | 4220 | .navbar-toggle .icon-bar + .icon-bar { 4221 | margin-top: 4px; 4222 | } 4223 | 4224 | @media (min-width: 768px) { 4225 | .navbar-toggle { 4226 | display: none; 4227 | } 4228 | } 4229 | 4230 | .navbar-nav { 4231 | margin: 7.5px -15px; 4232 | } 4233 | 4234 | .navbar-nav > li > a { 4235 | padding-top: 10px; 4236 | padding-bottom: 10px; 4237 | line-height: 20px; 4238 | } 4239 | 4240 | @media (max-width: 767px) { 4241 | .navbar-nav .open .dropdown-menu { 4242 | position: static; 4243 | float: none; 4244 | width: auto; 4245 | margin-top: 0; 4246 | background-color: transparent; 4247 | border: 0; 4248 | box-shadow: none; 4249 | } 4250 | .navbar-nav .open .dropdown-menu > li > a, 4251 | .navbar-nav .open .dropdown-menu .dropdown-header { 4252 | padding: 5px 15px 5px 25px; 4253 | } 4254 | .navbar-nav .open .dropdown-menu > li > a { 4255 | line-height: 20px; 4256 | } 4257 | .navbar-nav .open .dropdown-menu > li > a:hover, 4258 | .navbar-nav .open .dropdown-menu > li > a:focus { 4259 | background-image: none; 4260 | } 4261 | } 4262 | 4263 | @media (min-width: 768px) { 4264 | .navbar-nav { 4265 | float: left; 4266 | margin: 0; 4267 | } 4268 | .navbar-nav > li { 4269 | float: left; 4270 | } 4271 | .navbar-nav > li > a { 4272 | padding-top: 15px; 4273 | padding-bottom: 15px; 4274 | } 4275 | } 4276 | 4277 | @media (min-width: 768px) { 4278 | .navbar-left { 4279 | float: left !important; 4280 | } 4281 | .navbar-right { 4282 | float: right !important; 4283 | } 4284 | } 4285 | 4286 | .navbar-form { 4287 | padding: 10px 15px; 4288 | margin-top: 8px; 4289 | margin-right: -15px; 4290 | margin-bottom: 8px; 4291 | margin-left: -15px; 4292 | border-top: 1px solid transparent; 4293 | border-bottom: 1px solid transparent; 4294 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 4295 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 4296 | } 4297 | 4298 | @media (min-width: 768px) { 4299 | .navbar-form .form-group { 4300 | display: inline-block; 4301 | margin-bottom: 0; 4302 | vertical-align: middle; 4303 | } 4304 | .navbar-form .form-control { 4305 | display: inline-block; 4306 | } 4307 | .navbar-form .radio, 4308 | .navbar-form .checkbox { 4309 | display: inline-block; 4310 | padding-left: 0; 4311 | margin-top: 0; 4312 | margin-bottom: 0; 4313 | } 4314 | .navbar-form .radio input[type="radio"], 4315 | .navbar-form .checkbox input[type="checkbox"] { 4316 | float: none; 4317 | margin-left: 0; 4318 | } 4319 | } 4320 | 4321 | @media (max-width: 767px) { 4322 | .navbar-form .form-group { 4323 | margin-bottom: 5px; 4324 | } 4325 | } 4326 | 4327 | @media (min-width: 768px) { 4328 | .navbar-form { 4329 | width: auto; 4330 | padding-top: 0; 4331 | padding-bottom: 0; 4332 | margin-right: 0; 4333 | margin-left: 0; 4334 | border: 0; 4335 | -webkit-box-shadow: none; 4336 | box-shadow: none; 4337 | } 4338 | } 4339 | 4340 | .navbar-nav > li > .dropdown-menu { 4341 | margin-top: 0; 4342 | border-top-right-radius: 0; 4343 | border-top-left-radius: 0; 4344 | } 4345 | 4346 | .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { 4347 | border-bottom-right-radius: 0; 4348 | border-bottom-left-radius: 0; 4349 | } 4350 | 4351 | .navbar-nav.pull-right > li > .dropdown-menu, 4352 | .navbar-nav > li > .dropdown-menu.pull-right { 4353 | right: 0; 4354 | left: auto; 4355 | } 4356 | 4357 | .navbar-btn { 4358 | margin-top: 8px; 4359 | margin-bottom: 8px; 4360 | } 4361 | 4362 | .navbar-text { 4363 | float: left; 4364 | margin-top: 15px; 4365 | margin-bottom: 15px; 4366 | } 4367 | 4368 | @media (min-width: 768px) { 4369 | .navbar-text { 4370 | margin-right: 15px; 4371 | margin-left: 15px; 4372 | } 4373 | } 4374 | 4375 | .navbar-default { 4376 | background-color: #f8f8f8; 4377 | border-color: #e7e7e7; 4378 | } 4379 | 4380 | .navbar-default .navbar-brand { 4381 | color: #777777; 4382 | } 4383 | 4384 | .navbar-default .navbar-brand:hover, 4385 | .navbar-default .navbar-brand:focus { 4386 | color: #5e5e5e; 4387 | background-color: transparent; 4388 | } 4389 | 4390 | .navbar-default .navbar-text { 4391 | color: #777777; 4392 | } 4393 | 4394 | .navbar-default .navbar-nav > li > a { 4395 | color: #777777; 4396 | } 4397 | 4398 | .navbar-default .navbar-nav > li > a:hover, 4399 | .navbar-default .navbar-nav > li > a:focus { 4400 | color: #333333; 4401 | background-color: transparent; 4402 | } 4403 | 4404 | .navbar-default .navbar-nav > .active > a, 4405 | .navbar-default .navbar-nav > .active > a:hover, 4406 | .navbar-default .navbar-nav > .active > a:focus { 4407 | color: #555555; 4408 | background-color: #e7e7e7; 4409 | } 4410 | 4411 | .navbar-default .navbar-nav > .disabled > a, 4412 | .navbar-default .navbar-nav > .disabled > a:hover, 4413 | .navbar-default .navbar-nav > .disabled > a:focus { 4414 | color: #cccccc; 4415 | background-color: transparent; 4416 | } 4417 | 4418 | .navbar-default .navbar-toggle { 4419 | border-color: #dddddd; 4420 | } 4421 | 4422 | .navbar-default .navbar-toggle:hover, 4423 | .navbar-default .navbar-toggle:focus { 4424 | background-color: #dddddd; 4425 | } 4426 | 4427 | .navbar-default .navbar-toggle .icon-bar { 4428 | background-color: #cccccc; 4429 | } 4430 | 4431 | .navbar-default .navbar-collapse, 4432 | .navbar-default .navbar-form { 4433 | border-color: #e6e6e6; 4434 | } 4435 | 4436 | .navbar-default .navbar-nav > .dropdown > a:hover .caret, 4437 | .navbar-default .navbar-nav > .dropdown > a:focus .caret { 4438 | border-top-color: #333333; 4439 | border-bottom-color: #333333; 4440 | } 4441 | 4442 | .navbar-default .navbar-nav > .open > a, 4443 | .navbar-default .navbar-nav > .open > a:hover, 4444 | .navbar-default .navbar-nav > .open > a:focus { 4445 | color: #555555; 4446 | background-color: #e7e7e7; 4447 | } 4448 | 4449 | .navbar-default .navbar-nav > .open > a .caret, 4450 | .navbar-default .navbar-nav > .open > a:hover .caret, 4451 | .navbar-default .navbar-nav > .open > a:focus .caret { 4452 | border-top-color: #555555; 4453 | border-bottom-color: #555555; 4454 | } 4455 | 4456 | .navbar-default .navbar-nav > .dropdown > a .caret { 4457 | border-top-color: #777777; 4458 | border-bottom-color: #777777; 4459 | } 4460 | 4461 | @media (max-width: 767px) { 4462 | .navbar-default .navbar-nav .open .dropdown-menu > li > a { 4463 | color: #777777; 4464 | } 4465 | .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, 4466 | .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { 4467 | color: #333333; 4468 | background-color: transparent; 4469 | } 4470 | .navbar-default .navbar-nav .open .dropdown-menu > .active > a, 4471 | .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, 4472 | .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { 4473 | color: #555555; 4474 | background-color: #e7e7e7; 4475 | } 4476 | .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, 4477 | .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, 4478 | .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { 4479 | color: #cccccc; 4480 | background-color: transparent; 4481 | } 4482 | } 4483 | 4484 | .navbar-default .navbar-link { 4485 | color: #777777; 4486 | } 4487 | 4488 | .navbar-default .navbar-link:hover { 4489 | color: #333333; 4490 | } 4491 | 4492 | .navbar-inverse { 4493 | background-color: #222222; 4494 | border-color: #080808; 4495 | } 4496 | 4497 | .navbar-inverse .navbar-brand { 4498 | color: #999999; 4499 | } 4500 | 4501 | .navbar-inverse .navbar-brand:hover, 4502 | .navbar-inverse .navbar-brand:focus { 4503 | color: #ffffff; 4504 | background-color: transparent; 4505 | } 4506 | 4507 | .navbar-inverse .navbar-text { 4508 | color: #999999; 4509 | } 4510 | 4511 | .navbar-inverse .navbar-nav > li > a { 4512 | color: #999999; 4513 | } 4514 | 4515 | .navbar-inverse .navbar-nav > li > a:hover, 4516 | .navbar-inverse .navbar-nav > li > a:focus { 4517 | color: #ffffff; 4518 | background-color: transparent; 4519 | } 4520 | 4521 | .navbar-inverse .navbar-nav > .active > a, 4522 | .navbar-inverse .navbar-nav > .active > a:hover, 4523 | .navbar-inverse .navbar-nav > .active > a:focus { 4524 | color: #ffffff; 4525 | background-color: #080808; 4526 | } 4527 | 4528 | .navbar-inverse .navbar-nav > .disabled > a, 4529 | .navbar-inverse .navbar-nav > .disabled > a:hover, 4530 | .navbar-inverse .navbar-nav > .disabled > a:focus { 4531 | color: #444444; 4532 | background-color: transparent; 4533 | } 4534 | 4535 | .navbar-inverse .navbar-toggle { 4536 | border-color: #333333; 4537 | } 4538 | 4539 | .navbar-inverse .navbar-toggle:hover, 4540 | .navbar-inverse .navbar-toggle:focus { 4541 | background-color: #333333; 4542 | } 4543 | 4544 | .navbar-inverse .navbar-toggle .icon-bar { 4545 | background-color: #ffffff; 4546 | } 4547 | 4548 | .navbar-inverse .navbar-collapse, 4549 | .navbar-inverse .navbar-form { 4550 | border-color: #101010; 4551 | } 4552 | 4553 | .navbar-inverse .navbar-nav > .open > a, 4554 | .navbar-inverse .navbar-nav > .open > a:hover, 4555 | .navbar-inverse .navbar-nav > .open > a:focus { 4556 | color: #ffffff; 4557 | background-color: #080808; 4558 | } 4559 | 4560 | .navbar-inverse .navbar-nav > .dropdown > a:hover .caret { 4561 | border-top-color: #ffffff; 4562 | border-bottom-color: #ffffff; 4563 | } 4564 | 4565 | .navbar-inverse .navbar-nav > .dropdown > a .caret { 4566 | border-top-color: #999999; 4567 | border-bottom-color: #999999; 4568 | } 4569 | 4570 | .navbar-inverse .navbar-nav > .open > a .caret, 4571 | .navbar-inverse .navbar-nav > .open > a:hover .caret, 4572 | .navbar-inverse .navbar-nav > .open > a:focus .caret { 4573 | border-top-color: #ffffff; 4574 | border-bottom-color: #ffffff; 4575 | } 4576 | 4577 | @media (max-width: 767px) { 4578 | .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { 4579 | border-color: #080808; 4580 | } 4581 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { 4582 | color: #999999; 4583 | } 4584 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, 4585 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { 4586 | color: #ffffff; 4587 | background-color: transparent; 4588 | } 4589 | .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, 4590 | .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, 4591 | .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { 4592 | color: #ffffff; 4593 | background-color: #080808; 4594 | } 4595 | .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, 4596 | .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, 4597 | .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { 4598 | color: #444444; 4599 | background-color: transparent; 4600 | } 4601 | } 4602 | 4603 | .navbar-inverse .navbar-link { 4604 | color: #999999; 4605 | } 4606 | 4607 | .navbar-inverse .navbar-link:hover { 4608 | color: #ffffff; 4609 | } 4610 | 4611 | .breadcrumb { 4612 | padding: 8px 15px; 4613 | margin-bottom: 20px; 4614 | list-style: none; 4615 | background-color: #f5f5f5; 4616 | border-radius: 4px; 4617 | } 4618 | 4619 | .breadcrumb > li { 4620 | display: inline-block; 4621 | } 4622 | 4623 | .breadcrumb > li + li:before { 4624 | padding: 0 5px; 4625 | color: #cccccc; 4626 | content: "/\00a0"; 4627 | } 4628 | 4629 | .breadcrumb > .active { 4630 | color: #999999; 4631 | } 4632 | 4633 | .pagination { 4634 | display: inline-block; 4635 | padding-left: 0; 4636 | margin: 20px 0; 4637 | border-radius: 4px; 4638 | } 4639 | 4640 | .pagination > li { 4641 | display: inline; 4642 | } 4643 | 4644 | .pagination > li > a, 4645 | .pagination > li > span { 4646 | position: relative; 4647 | float: left; 4648 | padding: 6px 12px; 4649 | margin-left: -1px; 4650 | line-height: 1.428571429; 4651 | text-decoration: none; 4652 | background-color: #ffffff; 4653 | border: 1px solid #dddddd; 4654 | } 4655 | 4656 | .pagination > li:first-child > a, 4657 | .pagination > li:first-child > span { 4658 | margin-left: 0; 4659 | border-bottom-left-radius: 4px; 4660 | border-top-left-radius: 4px; 4661 | } 4662 | 4663 | .pagination > li:last-child > a, 4664 | .pagination > li:last-child > span { 4665 | border-top-right-radius: 4px; 4666 | border-bottom-right-radius: 4px; 4667 | } 4668 | 4669 | .pagination > li > a:hover, 4670 | .pagination > li > span:hover, 4671 | .pagination > li > a:focus, 4672 | .pagination > li > span:focus { 4673 | background-color: #eeeeee; 4674 | } 4675 | 4676 | .pagination > .active > a, 4677 | .pagination > .active > span, 4678 | .pagination > .active > a:hover, 4679 | .pagination > .active > span:hover, 4680 | .pagination > .active > a:focus, 4681 | .pagination > .active > span:focus { 4682 | z-index: 2; 4683 | color: #ffffff; 4684 | cursor: default; 4685 | background-color: #428bca; 4686 | border-color: #428bca; 4687 | } 4688 | 4689 | .pagination > .disabled > span, 4690 | .pagination > .disabled > a, 4691 | .pagination > .disabled > a:hover, 4692 | .pagination > .disabled > a:focus { 4693 | color: #999999; 4694 | cursor: not-allowed; 4695 | background-color: #ffffff; 4696 | border-color: #dddddd; 4697 | } 4698 | 4699 | .pagination-lg > li > a, 4700 | .pagination-lg > li > span { 4701 | padding: 10px 16px; 4702 | font-size: 18px; 4703 | } 4704 | 4705 | .pagination-lg > li:first-child > a, 4706 | .pagination-lg > li:first-child > span { 4707 | border-bottom-left-radius: 6px; 4708 | border-top-left-radius: 6px; 4709 | } 4710 | 4711 | .pagination-lg > li:last-child > a, 4712 | .pagination-lg > li:last-child > span { 4713 | border-top-right-radius: 6px; 4714 | border-bottom-right-radius: 6px; 4715 | } 4716 | 4717 | .pagination-sm > li > a, 4718 | .pagination-sm > li > span { 4719 | padding: 5px 10px; 4720 | font-size: 12px; 4721 | } 4722 | 4723 | .pagination-sm > li:first-child > a, 4724 | .pagination-sm > li:first-child > span { 4725 | border-bottom-left-radius: 3px; 4726 | border-top-left-radius: 3px; 4727 | } 4728 | 4729 | .pagination-sm > li:last-child > a, 4730 | .pagination-sm > li:last-child > span { 4731 | border-top-right-radius: 3px; 4732 | border-bottom-right-radius: 3px; 4733 | } 4734 | 4735 | .pager { 4736 | padding-left: 0; 4737 | margin: 20px 0; 4738 | text-align: center; 4739 | list-style: none; 4740 | } 4741 | 4742 | .pager:before, 4743 | .pager:after { 4744 | display: table; 4745 | content: " "; 4746 | } 4747 | 4748 | .pager:after { 4749 | clear: both; 4750 | } 4751 | 4752 | .pager:before, 4753 | .pager:after { 4754 | display: table; 4755 | content: " "; 4756 | } 4757 | 4758 | .pager:after { 4759 | clear: both; 4760 | } 4761 | 4762 | .pager li { 4763 | display: inline; 4764 | } 4765 | 4766 | .pager li > a, 4767 | .pager li > span { 4768 | display: inline-block; 4769 | padding: 5px 14px; 4770 | background-color: #ffffff; 4771 | border: 1px solid #dddddd; 4772 | border-radius: 15px; 4773 | } 4774 | 4775 | .pager li > a:hover, 4776 | .pager li > a:focus { 4777 | text-decoration: none; 4778 | background-color: #eeeeee; 4779 | } 4780 | 4781 | .pager .next > a, 4782 | .pager .next > span { 4783 | float: right; 4784 | } 4785 | 4786 | .pager .previous > a, 4787 | .pager .previous > span { 4788 | float: left; 4789 | } 4790 | 4791 | .pager .disabled > a, 4792 | .pager .disabled > a:hover, 4793 | .pager .disabled > a:focus, 4794 | .pager .disabled > span { 4795 | color: #999999; 4796 | cursor: not-allowed; 4797 | background-color: #ffffff; 4798 | } 4799 | 4800 | .label { 4801 | display: inline; 4802 | padding: .2em .6em .3em; 4803 | font-size: 75%; 4804 | font-weight: bold; 4805 | line-height: 1; 4806 | color: #ffffff; 4807 | text-align: center; 4808 | white-space: nowrap; 4809 | vertical-align: baseline; 4810 | border-radius: .25em; 4811 | } 4812 | 4813 | .label[href]:hover, 4814 | .label[href]:focus { 4815 | color: #ffffff; 4816 | text-decoration: none; 4817 | cursor: pointer; 4818 | } 4819 | 4820 | .label:empty { 4821 | display: none; 4822 | } 4823 | 4824 | .label-default { 4825 | background-color: #999999; 4826 | } 4827 | 4828 | .label-default[href]:hover, 4829 | .label-default[href]:focus { 4830 | background-color: #808080; 4831 | } 4832 | 4833 | .label-primary { 4834 | background-color: #428bca; 4835 | } 4836 | 4837 | .label-primary[href]:hover, 4838 | .label-primary[href]:focus { 4839 | background-color: #3071a9; 4840 | } 4841 | 4842 | .label-success { 4843 | background-color: #5cb85c; 4844 | } 4845 | 4846 | .label-success[href]:hover, 4847 | .label-success[href]:focus { 4848 | background-color: #449d44; 4849 | } 4850 | 4851 | .label-info { 4852 | background-color: #5bc0de; 4853 | } 4854 | 4855 | .label-info[href]:hover, 4856 | .label-info[href]:focus { 4857 | background-color: #31b0d5; 4858 | } 4859 | 4860 | .label-warning { 4861 | background-color: #f0ad4e; 4862 | } 4863 | 4864 | .label-warning[href]:hover, 4865 | .label-warning[href]:focus { 4866 | background-color: #ec971f; 4867 | } 4868 | 4869 | .label-danger { 4870 | background-color: #d9534f; 4871 | } 4872 | 4873 | .label-danger[href]:hover, 4874 | .label-danger[href]:focus { 4875 | background-color: #c9302c; 4876 | } 4877 | 4878 | .badge { 4879 | display: inline-block; 4880 | min-width: 10px; 4881 | padding: 3px 7px; 4882 | font-size: 12px; 4883 | font-weight: bold; 4884 | line-height: 1; 4885 | color: #ffffff; 4886 | text-align: center; 4887 | white-space: nowrap; 4888 | vertical-align: baseline; 4889 | background-color: #999999; 4890 | border-radius: 10px; 4891 | } 4892 | 4893 | .badge:empty { 4894 | display: none; 4895 | } 4896 | 4897 | a.badge:hover, 4898 | a.badge:focus { 4899 | color: #ffffff; 4900 | text-decoration: none; 4901 | cursor: pointer; 4902 | } 4903 | 4904 | .btn .badge { 4905 | position: relative; 4906 | top: -1px; 4907 | } 4908 | 4909 | a.list-group-item.active > .badge, 4910 | .nav-pills > .active > a > .badge { 4911 | color: #428bca; 4912 | background-color: #ffffff; 4913 | } 4914 | 4915 | .nav-pills > li > a > .badge { 4916 | margin-left: 3px; 4917 | } 4918 | 4919 | .jumbotron { 4920 | padding: 30px; 4921 | margin-bottom: 30px; 4922 | font-size: 21px; 4923 | font-weight: 200; 4924 | line-height: 2.1428571435; 4925 | color: inherit; 4926 | background-color: #eeeeee; 4927 | } 4928 | 4929 | .jumbotron h1 { 4930 | line-height: 1; 4931 | color: inherit; 4932 | } 4933 | 4934 | .jumbotron p { 4935 | line-height: 1.4; 4936 | } 4937 | 4938 | .container .jumbotron { 4939 | border-radius: 6px; 4940 | } 4941 | 4942 | @media screen and (min-width: 768px) { 4943 | .jumbotron { 4944 | padding-top: 48px; 4945 | padding-bottom: 48px; 4946 | } 4947 | .container .jumbotron { 4948 | padding-right: 60px; 4949 | padding-left: 60px; 4950 | } 4951 | .jumbotron h1 { 4952 | font-size: 63px; 4953 | } 4954 | } 4955 | 4956 | .thumbnail { 4957 | display: inline-block; 4958 | display: block; 4959 | height: auto; 4960 | max-width: 100%; 4961 | padding: 4px; 4962 | line-height: 1.428571429; 4963 | background-color: #ffffff; 4964 | border: 1px solid #dddddd; 4965 | border-radius: 4px; 4966 | -webkit-transition: all 0.2s ease-in-out; 4967 | transition: all 0.2s ease-in-out; 4968 | } 4969 | 4970 | .thumbnail > img { 4971 | display: block; 4972 | height: auto; 4973 | max-width: 100%; 4974 | } 4975 | 4976 | a.thumbnail:hover, 4977 | a.thumbnail:focus { 4978 | border-color: #428bca; 4979 | } 4980 | 4981 | .thumbnail > img { 4982 | margin-right: auto; 4983 | margin-left: auto; 4984 | } 4985 | 4986 | .thumbnail .caption { 4987 | padding: 9px; 4988 | color: #333333; 4989 | } 4990 | 4991 | .alert { 4992 | padding: 15px; 4993 | margin-bottom: 20px; 4994 | border: 1px solid transparent; 4995 | border-radius: 4px; 4996 | } 4997 | 4998 | .alert h4 { 4999 | margin-top: 0; 5000 | color: inherit; 5001 | } 5002 | 5003 | .alert .alert-link { 5004 | font-weight: bold; 5005 | } 5006 | 5007 | .alert > p, 5008 | .alert > ul { 5009 | margin-bottom: 0; 5010 | } 5011 | 5012 | .alert > p + p { 5013 | margin-top: 5px; 5014 | } 5015 | 5016 | .alert-dismissable { 5017 | padding-right: 35px; 5018 | } 5019 | 5020 | .alert-dismissable .close { 5021 | position: relative; 5022 | top: -2px; 5023 | right: -21px; 5024 | color: inherit; 5025 | } 5026 | 5027 | .alert-success { 5028 | color: #468847; 5029 | background-color: #dff0d8; 5030 | border-color: #d6e9c6; 5031 | } 5032 | 5033 | .alert-success hr { 5034 | border-top-color: #c9e2b3; 5035 | } 5036 | 5037 | .alert-success .alert-link { 5038 | color: #356635; 5039 | } 5040 | 5041 | .alert-info { 5042 | color: #3a87ad; 5043 | background-color: #d9edf7; 5044 | border-color: #bce8f1; 5045 | } 5046 | 5047 | .alert-info hr { 5048 | border-top-color: #a6e1ec; 5049 | } 5050 | 5051 | .alert-info .alert-link { 5052 | color: #2d6987; 5053 | } 5054 | 5055 | .alert-warning { 5056 | color: #c09853; 5057 | background-color: #fcf8e3; 5058 | border-color: #fbeed5; 5059 | } 5060 | 5061 | .alert-warning hr { 5062 | border-top-color: #f8e5be; 5063 | } 5064 | 5065 | .alert-warning .alert-link { 5066 | color: #a47e3c; 5067 | } 5068 | 5069 | .alert-danger { 5070 | color: #b94a48; 5071 | background-color: #f2dede; 5072 | border-color: #eed3d7; 5073 | } 5074 | 5075 | .alert-danger hr { 5076 | border-top-color: #e6c1c7; 5077 | } 5078 | 5079 | .alert-danger .alert-link { 5080 | color: #953b39; 5081 | } 5082 | 5083 | @-webkit-keyframes progress-bar-stripes { 5084 | from { 5085 | background-position: 40px 0; 5086 | } 5087 | to { 5088 | background-position: 0 0; 5089 | } 5090 | } 5091 | 5092 | @-moz-keyframes progress-bar-stripes { 5093 | from { 5094 | background-position: 40px 0; 5095 | } 5096 | to { 5097 | background-position: 0 0; 5098 | } 5099 | } 5100 | 5101 | @-o-keyframes progress-bar-stripes { 5102 | from { 5103 | background-position: 0 0; 5104 | } 5105 | to { 5106 | background-position: 40px 0; 5107 | } 5108 | } 5109 | 5110 | @keyframes progress-bar-stripes { 5111 | from { 5112 | background-position: 40px 0; 5113 | } 5114 | to { 5115 | background-position: 0 0; 5116 | } 5117 | } 5118 | 5119 | .progress { 5120 | height: 20px; 5121 | margin-bottom: 20px; 5122 | overflow: hidden; 5123 | background-color: #f5f5f5; 5124 | border-radius: 4px; 5125 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); 5126 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); 5127 | } 5128 | 5129 | .progress-bar { 5130 | float: left; 5131 | width: 0; 5132 | height: 100%; 5133 | font-size: 12px; 5134 | color: #ffffff; 5135 | text-align: center; 5136 | background-color: #428bca; 5137 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); 5138 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); 5139 | -webkit-transition: width 0.6s ease; 5140 | transition: width 0.6s ease; 5141 | } 5142 | 5143 | .progress-striped .progress-bar { 5144 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 5145 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5146 | background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5147 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5148 | background-size: 40px 40px; 5149 | } 5150 | 5151 | .progress.active .progress-bar { 5152 | -webkit-animation: progress-bar-stripes 2s linear infinite; 5153 | -moz-animation: progress-bar-stripes 2s linear infinite; 5154 | -ms-animation: progress-bar-stripes 2s linear infinite; 5155 | -o-animation: progress-bar-stripes 2s linear infinite; 5156 | animation: progress-bar-stripes 2s linear infinite; 5157 | } 5158 | 5159 | .progress-bar-success { 5160 | background-color: #5cb85c; 5161 | } 5162 | 5163 | .progress-striped .progress-bar-success { 5164 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 5165 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5166 | background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5167 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5168 | } 5169 | 5170 | .progress-bar-info { 5171 | background-color: #5bc0de; 5172 | } 5173 | 5174 | .progress-striped .progress-bar-info { 5175 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 5176 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5177 | background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5178 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5179 | } 5180 | 5181 | .progress-bar-warning { 5182 | background-color: #f0ad4e; 5183 | } 5184 | 5185 | .progress-striped .progress-bar-warning { 5186 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 5187 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5188 | background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5189 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5190 | } 5191 | 5192 | .progress-bar-danger { 5193 | background-color: #d9534f; 5194 | } 5195 | 5196 | .progress-striped .progress-bar-danger { 5197 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 5198 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5199 | background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5200 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 5201 | } 5202 | 5203 | .media, 5204 | .media-body { 5205 | overflow: hidden; 5206 | zoom: 1; 5207 | } 5208 | 5209 | .media, 5210 | .media .media { 5211 | margin-top: 15px; 5212 | } 5213 | 5214 | .media:first-child { 5215 | margin-top: 0; 5216 | } 5217 | 5218 | .media-object { 5219 | display: block; 5220 | } 5221 | 5222 | .media-heading { 5223 | margin: 0 0 5px; 5224 | } 5225 | 5226 | .media > .pull-left { 5227 | margin-right: 10px; 5228 | } 5229 | 5230 | .media > .pull-right { 5231 | margin-left: 10px; 5232 | } 5233 | 5234 | .media-list { 5235 | padding-left: 0; 5236 | list-style: none; 5237 | } 5238 | 5239 | .list-group { 5240 | padding-left: 0; 5241 | margin-bottom: 20px; 5242 | } 5243 | 5244 | .list-group-item { 5245 | position: relative; 5246 | display: block; 5247 | padding: 10px 15px; 5248 | margin-bottom: -1px; 5249 | background-color: #ffffff; 5250 | border: 1px solid #dddddd; 5251 | } 5252 | 5253 | .list-group-item:first-child { 5254 | border-top-right-radius: 4px; 5255 | border-top-left-radius: 4px; 5256 | } 5257 | 5258 | .list-group-item:last-child { 5259 | margin-bottom: 0; 5260 | border-bottom-right-radius: 4px; 5261 | border-bottom-left-radius: 4px; 5262 | } 5263 | 5264 | .list-group-item > .badge { 5265 | float: right; 5266 | } 5267 | 5268 | .list-group-item > .badge + .badge { 5269 | margin-right: 5px; 5270 | } 5271 | 5272 | a.list-group-item { 5273 | color: #555555; 5274 | } 5275 | 5276 | a.list-group-item .list-group-item-heading { 5277 | color: #333333; 5278 | } 5279 | 5280 | a.list-group-item:hover, 5281 | a.list-group-item:focus { 5282 | text-decoration: none; 5283 | background-color: #f5f5f5; 5284 | } 5285 | 5286 | .list-group-item.active, 5287 | .list-group-item.active:hover, 5288 | .list-group-item.active:focus { 5289 | z-index: 2; 5290 | color: #ffffff; 5291 | background-color: #428bca; 5292 | border-color: #428bca; 5293 | } 5294 | 5295 | .list-group-item.active .list-group-item-heading, 5296 | .list-group-item.active:hover .list-group-item-heading, 5297 | .list-group-item.active:focus .list-group-item-heading { 5298 | color: inherit; 5299 | } 5300 | 5301 | .list-group-item.active .list-group-item-text, 5302 | .list-group-item.active:hover .list-group-item-text, 5303 | .list-group-item.active:focus .list-group-item-text { 5304 | color: #e1edf7; 5305 | } 5306 | 5307 | .list-group-item-heading { 5308 | margin-top: 0; 5309 | margin-bottom: 5px; 5310 | } 5311 | 5312 | .list-group-item-text { 5313 | margin-bottom: 0; 5314 | line-height: 1.3; 5315 | } 5316 | 5317 | .panel { 5318 | margin-bottom: 20px; 5319 | background-color: #ffffff; 5320 | border: 1px solid transparent; 5321 | border-radius: 4px; 5322 | -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); 5323 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); 5324 | } 5325 | 5326 | .panel-body { 5327 | padding: 15px; 5328 | } 5329 | 5330 | .panel-body:before, 5331 | .panel-body:after { 5332 | display: table; 5333 | content: " "; 5334 | } 5335 | 5336 | .panel-body:after { 5337 | clear: both; 5338 | } 5339 | 5340 | .panel-body:before, 5341 | .panel-body:after { 5342 | display: table; 5343 | content: " "; 5344 | } 5345 | 5346 | .panel-body:after { 5347 | clear: both; 5348 | } 5349 | 5350 | .panel > .list-group { 5351 | margin-bottom: 0; 5352 | } 5353 | 5354 | .panel > .list-group .list-group-item { 5355 | border-width: 1px 0; 5356 | } 5357 | 5358 | .panel > .list-group .list-group-item:first-child { 5359 | border-top-right-radius: 0; 5360 | border-top-left-radius: 0; 5361 | } 5362 | 5363 | .panel > .list-group .list-group-item:last-child { 5364 | border-bottom: 0; 5365 | } 5366 | 5367 | .panel-heading + .list-group .list-group-item:first-child { 5368 | border-top-width: 0; 5369 | } 5370 | 5371 | .panel > .table { 5372 | margin-bottom: 0; 5373 | } 5374 | 5375 | .panel > .panel-body + .table { 5376 | border-top: 1px solid #dddddd; 5377 | } 5378 | 5379 | .panel-heading { 5380 | padding: 10px 15px; 5381 | border-bottom: 1px solid transparent; 5382 | border-top-right-radius: 3px; 5383 | border-top-left-radius: 3px; 5384 | } 5385 | 5386 | .panel-title { 5387 | margin-top: 0; 5388 | margin-bottom: 0; 5389 | font-size: 16px; 5390 | } 5391 | 5392 | .panel-title > a { 5393 | color: inherit; 5394 | } 5395 | 5396 | .panel-footer { 5397 | padding: 10px 15px; 5398 | background-color: #f5f5f5; 5399 | border-top: 1px solid #dddddd; 5400 | border-bottom-right-radius: 3px; 5401 | border-bottom-left-radius: 3px; 5402 | } 5403 | 5404 | .panel-group .panel { 5405 | margin-bottom: 0; 5406 | overflow: hidden; 5407 | border-radius: 4px; 5408 | } 5409 | 5410 | .panel-group .panel + .panel { 5411 | margin-top: 5px; 5412 | } 5413 | 5414 | .panel-group .panel-heading { 5415 | border-bottom: 0; 5416 | } 5417 | 5418 | .panel-group .panel-heading + .panel-collapse .panel-body { 5419 | border-top: 1px solid #dddddd; 5420 | } 5421 | 5422 | .panel-group .panel-footer { 5423 | border-top: 0; 5424 | } 5425 | 5426 | .panel-group .panel-footer + .panel-collapse .panel-body { 5427 | border-bottom: 1px solid #dddddd; 5428 | } 5429 | 5430 | .panel-default { 5431 | border-color: #dddddd; 5432 | } 5433 | 5434 | .panel-default > .panel-heading { 5435 | color: #333333; 5436 | background-color: #f5f5f5; 5437 | border-color: #dddddd; 5438 | } 5439 | 5440 | .panel-default > .panel-heading + .panel-collapse .panel-body { 5441 | border-top-color: #dddddd; 5442 | } 5443 | 5444 | .panel-default > .panel-footer + .panel-collapse .panel-body { 5445 | border-bottom-color: #dddddd; 5446 | } 5447 | 5448 | .panel-primary { 5449 | border-color: #428bca; 5450 | } 5451 | 5452 | .panel-primary > .panel-heading { 5453 | color: #ffffff; 5454 | background-color: #428bca; 5455 | border-color: #428bca; 5456 | } 5457 | 5458 | .panel-primary > .panel-heading + .panel-collapse .panel-body { 5459 | border-top-color: #428bca; 5460 | } 5461 | 5462 | .panel-primary > .panel-footer + .panel-collapse .panel-body { 5463 | border-bottom-color: #428bca; 5464 | } 5465 | 5466 | .panel-success { 5467 | border-color: #d6e9c6; 5468 | } 5469 | 5470 | .panel-success > .panel-heading { 5471 | color: #468847; 5472 | background-color: #dff0d8; 5473 | border-color: #d6e9c6; 5474 | } 5475 | 5476 | .panel-success > .panel-heading + .panel-collapse .panel-body { 5477 | border-top-color: #d6e9c6; 5478 | } 5479 | 5480 | .panel-success > .panel-footer + .panel-collapse .panel-body { 5481 | border-bottom-color: #d6e9c6; 5482 | } 5483 | 5484 | .panel-warning { 5485 | border-color: #fbeed5; 5486 | } 5487 | 5488 | .panel-warning > .panel-heading { 5489 | color: #c09853; 5490 | background-color: #fcf8e3; 5491 | border-color: #fbeed5; 5492 | } 5493 | 5494 | .panel-warning > .panel-heading + .panel-collapse .panel-body { 5495 | border-top-color: #fbeed5; 5496 | } 5497 | 5498 | .panel-warning > .panel-footer + .panel-collapse .panel-body { 5499 | border-bottom-color: #fbeed5; 5500 | } 5501 | 5502 | .panel-danger { 5503 | border-color: #eed3d7; 5504 | } 5505 | 5506 | .panel-danger > .panel-heading { 5507 | color: #b94a48; 5508 | background-color: #f2dede; 5509 | border-color: #eed3d7; 5510 | } 5511 | 5512 | .panel-danger > .panel-heading + .panel-collapse .panel-body { 5513 | border-top-color: #eed3d7; 5514 | } 5515 | 5516 | .panel-danger > .panel-footer + .panel-collapse .panel-body { 5517 | border-bottom-color: #eed3d7; 5518 | } 5519 | 5520 | .panel-info { 5521 | border-color: #bce8f1; 5522 | } 5523 | 5524 | .panel-info > .panel-heading { 5525 | color: #3a87ad; 5526 | background-color: #d9edf7; 5527 | border-color: #bce8f1; 5528 | } 5529 | 5530 | .panel-info > .panel-heading + .panel-collapse .panel-body { 5531 | border-top-color: #bce8f1; 5532 | } 5533 | 5534 | .panel-info > .panel-footer + .panel-collapse .panel-body { 5535 | border-bottom-color: #bce8f1; 5536 | } 5537 | 5538 | .well { 5539 | min-height: 20px; 5540 | padding: 19px; 5541 | margin-bottom: 20px; 5542 | background-color: #f5f5f5; 5543 | border: 1px solid #e3e3e3; 5544 | border-radius: 4px; 5545 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); 5546 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); 5547 | } 5548 | 5549 | .well blockquote { 5550 | border-color: #ddd; 5551 | border-color: rgba(0, 0, 0, 0.15); 5552 | } 5553 | 5554 | .well-lg { 5555 | padding: 24px; 5556 | border-radius: 6px; 5557 | } 5558 | 5559 | .well-sm { 5560 | padding: 9px; 5561 | border-radius: 3px; 5562 | } 5563 | 5564 | .close { 5565 | float: right; 5566 | font-size: 21px; 5567 | font-weight: bold; 5568 | line-height: 1; 5569 | color: #000000; 5570 | text-shadow: 0 1px 0 #ffffff; 5571 | opacity: 0.2; 5572 | filter: alpha(opacity=20); 5573 | } 5574 | 5575 | .close:hover, 5576 | .close:focus { 5577 | color: #000000; 5578 | text-decoration: none; 5579 | cursor: pointer; 5580 | opacity: 0.5; 5581 | filter: alpha(opacity=50); 5582 | } 5583 | 5584 | button.close { 5585 | padding: 0; 5586 | cursor: pointer; 5587 | background: transparent; 5588 | border: 0; 5589 | -webkit-appearance: none; 5590 | } 5591 | 5592 | .modal-open { 5593 | overflow: hidden; 5594 | } 5595 | 5596 | body.modal-open, 5597 | .modal-open .navbar-fixed-top, 5598 | .modal-open .navbar-fixed-bottom { 5599 | margin-right: 15px; 5600 | } 5601 | 5602 | .modal { 5603 | position: fixed; 5604 | top: 0; 5605 | right: 0; 5606 | bottom: 0; 5607 | left: 0; 5608 | z-index: 1040; 5609 | display: none; 5610 | overflow: auto; 5611 | overflow-y: scroll; 5612 | } 5613 | 5614 | .modal.fade .modal-dialog { 5615 | -webkit-transform: translate(0, -25%); 5616 | -ms-transform: translate(0, -25%); 5617 | transform: translate(0, -25%); 5618 | -webkit-transition: -webkit-transform 0.3s ease-out; 5619 | -moz-transition: -moz-transform 0.3s ease-out; 5620 | -o-transition: -o-transform 0.3s ease-out; 5621 | transition: transform 0.3s ease-out; 5622 | } 5623 | 5624 | .modal.in .modal-dialog { 5625 | -webkit-transform: translate(0, 0); 5626 | -ms-transform: translate(0, 0); 5627 | transform: translate(0, 0); 5628 | } 5629 | 5630 | .modal-dialog { 5631 | z-index: 1050; 5632 | width: auto; 5633 | padding: 10px; 5634 | margin-right: auto; 5635 | margin-left: auto; 5636 | } 5637 | 5638 | .modal-content { 5639 | position: relative; 5640 | background-color: #ffffff; 5641 | border: 1px solid #999999; 5642 | border: 1px solid rgba(0, 0, 0, 0.2); 5643 | border-radius: 6px; 5644 | outline: none; 5645 | -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); 5646 | box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); 5647 | background-clip: padding-box; 5648 | } 5649 | 5650 | .modal-backdrop { 5651 | position: fixed; 5652 | top: 0; 5653 | right: 0; 5654 | bottom: 0; 5655 | left: 0; 5656 | z-index: 1030; 5657 | background-color: #000000; 5658 | } 5659 | 5660 | .modal-backdrop.fade { 5661 | opacity: 0; 5662 | filter: alpha(opacity=0); 5663 | } 5664 | 5665 | .modal-backdrop.in { 5666 | opacity: 0.5; 5667 | filter: alpha(opacity=50); 5668 | } 5669 | 5670 | .modal-header { 5671 | min-height: 16.428571429px; 5672 | padding: 15px; 5673 | border-bottom: 1px solid #e5e5e5; 5674 | } 5675 | 5676 | .modal-header .close { 5677 | margin-top: -2px; 5678 | } 5679 | 5680 | .modal-title { 5681 | margin: 0; 5682 | line-height: 1.428571429; 5683 | } 5684 | 5685 | .modal-body { 5686 | position: relative; 5687 | padding: 20px; 5688 | } 5689 | 5690 | .modal-footer { 5691 | padding: 19px 20px 20px; 5692 | margin-top: 15px; 5693 | text-align: right; 5694 | border-top: 1px solid #e5e5e5; 5695 | } 5696 | 5697 | .modal-footer:before, 5698 | .modal-footer:after { 5699 | display: table; 5700 | content: " "; 5701 | } 5702 | 5703 | .modal-footer:after { 5704 | clear: both; 5705 | } 5706 | 5707 | .modal-footer:before, 5708 | .modal-footer:after { 5709 | display: table; 5710 | content: " "; 5711 | } 5712 | 5713 | .modal-footer:after { 5714 | clear: both; 5715 | } 5716 | 5717 | .modal-footer .btn + .btn { 5718 | margin-bottom: 0; 5719 | margin-left: 5px; 5720 | } 5721 | 5722 | .modal-footer .btn-group .btn + .btn { 5723 | margin-left: -1px; 5724 | } 5725 | 5726 | .modal-footer .btn-block + .btn-block { 5727 | margin-left: 0; 5728 | } 5729 | 5730 | @media screen and (min-width: 768px) { 5731 | .modal-dialog { 5732 | right: auto; 5733 | left: 50%; 5734 | width: 600px; 5735 | padding-top: 30px; 5736 | padding-bottom: 30px; 5737 | } 5738 | .modal-content { 5739 | -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); 5740 | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); 5741 | } 5742 | } 5743 | 5744 | .tooltip { 5745 | position: absolute; 5746 | z-index: 1030; 5747 | display: block; 5748 | font-size: 12px; 5749 | line-height: 1.4; 5750 | opacity: 0; 5751 | filter: alpha(opacity=0); 5752 | visibility: visible; 5753 | } 5754 | 5755 | .tooltip.in { 5756 | opacity: 0.9; 5757 | filter: alpha(opacity=90); 5758 | } 5759 | 5760 | .tooltip.top { 5761 | padding: 5px 0; 5762 | margin-top: -3px; 5763 | } 5764 | 5765 | .tooltip.right { 5766 | padding: 0 5px; 5767 | margin-left: 3px; 5768 | } 5769 | 5770 | .tooltip.bottom { 5771 | padding: 5px 0; 5772 | margin-top: 3px; 5773 | } 5774 | 5775 | .tooltip.left { 5776 | padding: 0 5px; 5777 | margin-left: -3px; 5778 | } 5779 | 5780 | .tooltip-inner { 5781 | max-width: 200px; 5782 | padding: 3px 8px; 5783 | color: #ffffff; 5784 | text-align: center; 5785 | text-decoration: none; 5786 | background-color: #000000; 5787 | border-radius: 4px; 5788 | } 5789 | 5790 | .tooltip-arrow { 5791 | position: absolute; 5792 | width: 0; 5793 | height: 0; 5794 | border-color: transparent; 5795 | border-style: solid; 5796 | } 5797 | 5798 | .tooltip.top .tooltip-arrow { 5799 | bottom: 0; 5800 | left: 50%; 5801 | margin-left: -5px; 5802 | border-top-color: #000000; 5803 | border-width: 5px 5px 0; 5804 | } 5805 | 5806 | .tooltip.top-left .tooltip-arrow { 5807 | bottom: 0; 5808 | left: 5px; 5809 | border-top-color: #000000; 5810 | border-width: 5px 5px 0; 5811 | } 5812 | 5813 | .tooltip.top-right .tooltip-arrow { 5814 | right: 5px; 5815 | bottom: 0; 5816 | border-top-color: #000000; 5817 | border-width: 5px 5px 0; 5818 | } 5819 | 5820 | .tooltip.right .tooltip-arrow { 5821 | top: 50%; 5822 | left: 0; 5823 | margin-top: -5px; 5824 | border-right-color: #000000; 5825 | border-width: 5px 5px 5px 0; 5826 | } 5827 | 5828 | .tooltip.left .tooltip-arrow { 5829 | top: 50%; 5830 | right: 0; 5831 | margin-top: -5px; 5832 | border-left-color: #000000; 5833 | border-width: 5px 0 5px 5px; 5834 | } 5835 | 5836 | .tooltip.bottom .tooltip-arrow { 5837 | top: 0; 5838 | left: 50%; 5839 | margin-left: -5px; 5840 | border-bottom-color: #000000; 5841 | border-width: 0 5px 5px; 5842 | } 5843 | 5844 | .tooltip.bottom-left .tooltip-arrow { 5845 | top: 0; 5846 | left: 5px; 5847 | border-bottom-color: #000000; 5848 | border-width: 0 5px 5px; 5849 | } 5850 | 5851 | .tooltip.bottom-right .tooltip-arrow { 5852 | top: 0; 5853 | right: 5px; 5854 | border-bottom-color: #000000; 5855 | border-width: 0 5px 5px; 5856 | } 5857 | 5858 | .popover { 5859 | position: absolute; 5860 | top: 0; 5861 | left: 0; 5862 | z-index: 1010; 5863 | display: none; 5864 | max-width: 276px; 5865 | padding: 1px; 5866 | text-align: left; 5867 | white-space: normal; 5868 | background-color: #ffffff; 5869 | border: 1px solid #cccccc; 5870 | border: 1px solid rgba(0, 0, 0, 0.2); 5871 | border-radius: 6px; 5872 | -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 5873 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 5874 | background-clip: padding-box; 5875 | } 5876 | 5877 | .popover.top { 5878 | margin-top: -10px; 5879 | } 5880 | 5881 | .popover.right { 5882 | margin-left: 10px; 5883 | } 5884 | 5885 | .popover.bottom { 5886 | margin-top: 10px; 5887 | } 5888 | 5889 | .popover.left { 5890 | margin-left: -10px; 5891 | } 5892 | 5893 | .popover-title { 5894 | padding: 8px 14px; 5895 | margin: 0; 5896 | font-size: 14px; 5897 | font-weight: normal; 5898 | line-height: 18px; 5899 | background-color: #f7f7f7; 5900 | border-bottom: 1px solid #ebebeb; 5901 | border-radius: 5px 5px 0 0; 5902 | } 5903 | 5904 | .popover-content { 5905 | padding: 9px 14px; 5906 | } 5907 | 5908 | .popover .arrow, 5909 | .popover .arrow:after { 5910 | position: absolute; 5911 | display: block; 5912 | width: 0; 5913 | height: 0; 5914 | border-color: transparent; 5915 | border-style: solid; 5916 | } 5917 | 5918 | .popover .arrow { 5919 | border-width: 11px; 5920 | } 5921 | 5922 | .popover .arrow:after { 5923 | border-width: 10px; 5924 | content: ""; 5925 | } 5926 | 5927 | .popover.top .arrow { 5928 | bottom: -11px; 5929 | left: 50%; 5930 | margin-left: -11px; 5931 | border-top-color: #999999; 5932 | border-top-color: rgba(0, 0, 0, 0.25); 5933 | border-bottom-width: 0; 5934 | } 5935 | 5936 | .popover.top .arrow:after { 5937 | bottom: 1px; 5938 | margin-left: -10px; 5939 | border-top-color: #ffffff; 5940 | border-bottom-width: 0; 5941 | content: " "; 5942 | } 5943 | 5944 | .popover.right .arrow { 5945 | top: 50%; 5946 | left: -11px; 5947 | margin-top: -11px; 5948 | border-right-color: #999999; 5949 | border-right-color: rgba(0, 0, 0, 0.25); 5950 | border-left-width: 0; 5951 | } 5952 | 5953 | .popover.right .arrow:after { 5954 | bottom: -10px; 5955 | left: 1px; 5956 | border-right-color: #ffffff; 5957 | border-left-width: 0; 5958 | content: " "; 5959 | } 5960 | 5961 | .popover.bottom .arrow { 5962 | top: -11px; 5963 | left: 50%; 5964 | margin-left: -11px; 5965 | border-bottom-color: #999999; 5966 | border-bottom-color: rgba(0, 0, 0, 0.25); 5967 | border-top-width: 0; 5968 | } 5969 | 5970 | .popover.bottom .arrow:after { 5971 | top: 1px; 5972 | margin-left: -10px; 5973 | border-bottom-color: #ffffff; 5974 | border-top-width: 0; 5975 | content: " "; 5976 | } 5977 | 5978 | .popover.left .arrow { 5979 | top: 50%; 5980 | right: -11px; 5981 | margin-top: -11px; 5982 | border-left-color: #999999; 5983 | border-left-color: rgba(0, 0, 0, 0.25); 5984 | border-right-width: 0; 5985 | } 5986 | 5987 | .popover.left .arrow:after { 5988 | right: 1px; 5989 | bottom: -10px; 5990 | border-left-color: #ffffff; 5991 | border-right-width: 0; 5992 | content: " "; 5993 | } 5994 | 5995 | .carousel { 5996 | position: relative; 5997 | } 5998 | 5999 | .carousel-inner { 6000 | position: relative; 6001 | width: 100%; 6002 | overflow: hidden; 6003 | } 6004 | 6005 | .carousel-inner > .item { 6006 | position: relative; 6007 | display: none; 6008 | -webkit-transition: 0.6s ease-in-out left; 6009 | transition: 0.6s ease-in-out left; 6010 | } 6011 | 6012 | .carousel-inner > .item > img, 6013 | .carousel-inner > .item > a > img { 6014 | display: block; 6015 | height: auto; 6016 | max-width: 100%; 6017 | line-height: 1; 6018 | } 6019 | 6020 | .carousel-inner > .active, 6021 | .carousel-inner > .next, 6022 | .carousel-inner > .prev { 6023 | display: block; 6024 | } 6025 | 6026 | .carousel-inner > .active { 6027 | left: 0; 6028 | } 6029 | 6030 | .carousel-inner > .next, 6031 | .carousel-inner > .prev { 6032 | position: absolute; 6033 | top: 0; 6034 | width: 100%; 6035 | } 6036 | 6037 | .carousel-inner > .next { 6038 | left: 100%; 6039 | } 6040 | 6041 | .carousel-inner > .prev { 6042 | left: -100%; 6043 | } 6044 | 6045 | .carousel-inner > .next.left, 6046 | .carousel-inner > .prev.right { 6047 | left: 0; 6048 | } 6049 | 6050 | .carousel-inner > .active.left { 6051 | left: -100%; 6052 | } 6053 | 6054 | .carousel-inner > .active.right { 6055 | left: 100%; 6056 | } 6057 | 6058 | .carousel-control { 6059 | position: absolute; 6060 | top: 0; 6061 | bottom: 0; 6062 | left: 0; 6063 | width: 15%; 6064 | font-size: 20px; 6065 | color: #ffffff; 6066 | text-align: center; 6067 | text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); 6068 | opacity: 0.5; 6069 | filter: alpha(opacity=50); 6070 | } 6071 | 6072 | .carousel-control.left { 6073 | background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); 6074 | background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); 6075 | background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); 6076 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); 6077 | background-repeat: repeat-x; 6078 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); 6079 | } 6080 | 6081 | .carousel-control.right { 6082 | right: 0; 6083 | left: auto; 6084 | background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); 6085 | background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); 6086 | background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); 6087 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); 6088 | background-repeat: repeat-x; 6089 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); 6090 | } 6091 | 6092 | .carousel-control:hover, 6093 | .carousel-control:focus { 6094 | color: #ffffff; 6095 | text-decoration: none; 6096 | opacity: 0.9; 6097 | filter: alpha(opacity=90); 6098 | } 6099 | 6100 | .carousel-control .icon-prev, 6101 | .carousel-control .icon-next, 6102 | .carousel-control .glyphicon-chevron-left, 6103 | .carousel-control .glyphicon-chevron-right { 6104 | position: absolute; 6105 | top: 50%; 6106 | left: 50%; 6107 | z-index: 5; 6108 | display: inline-block; 6109 | } 6110 | 6111 | .carousel-control .icon-prev, 6112 | .carousel-control .icon-next { 6113 | width: 20px; 6114 | height: 20px; 6115 | margin-top: -10px; 6116 | margin-left: -10px; 6117 | font-family: serif; 6118 | } 6119 | 6120 | .carousel-control .icon-prev:before { 6121 | content: '\2039'; 6122 | } 6123 | 6124 | .carousel-control .icon-next:before { 6125 | content: '\203a'; 6126 | } 6127 | 6128 | .carousel-indicators { 6129 | position: absolute; 6130 | bottom: 10px; 6131 | left: 50%; 6132 | z-index: 15; 6133 | width: 60%; 6134 | padding-left: 0; 6135 | margin-left: -30%; 6136 | text-align: center; 6137 | list-style: none; 6138 | } 6139 | 6140 | .carousel-indicators li { 6141 | display: inline-block; 6142 | width: 10px; 6143 | height: 10px; 6144 | margin: 1px; 6145 | text-indent: -999px; 6146 | cursor: pointer; 6147 | border: 1px solid #ffffff; 6148 | border-radius: 10px; 6149 | } 6150 | 6151 | .carousel-indicators .active { 6152 | width: 12px; 6153 | height: 12px; 6154 | margin: 0; 6155 | background-color: #ffffff; 6156 | } 6157 | 6158 | .carousel-caption { 6159 | position: absolute; 6160 | right: 15%; 6161 | bottom: 20px; 6162 | left: 15%; 6163 | z-index: 10; 6164 | padding-top: 20px; 6165 | padding-bottom: 20px; 6166 | color: #ffffff; 6167 | text-align: center; 6168 | text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); 6169 | } 6170 | 6171 | .carousel-caption .btn { 6172 | text-shadow: none; 6173 | } 6174 | 6175 | @media screen and (min-width: 768px) { 6176 | .carousel-control .icon-prev, 6177 | .carousel-control .icon-next { 6178 | width: 30px; 6179 | height: 30px; 6180 | margin-top: -15px; 6181 | margin-left: -15px; 6182 | font-size: 30px; 6183 | } 6184 | .carousel-caption { 6185 | right: 20%; 6186 | left: 20%; 6187 | padding-bottom: 30px; 6188 | } 6189 | .carousel-indicators { 6190 | bottom: 20px; 6191 | } 6192 | } 6193 | 6194 | .clearfix:before, 6195 | .clearfix:after { 6196 | display: table; 6197 | content: " "; 6198 | } 6199 | 6200 | .clearfix:after { 6201 | clear: both; 6202 | } 6203 | 6204 | .pull-right { 6205 | float: right !important; 6206 | } 6207 | 6208 | .pull-left { 6209 | float: left !important; 6210 | } 6211 | 6212 | .hide { 6213 | display: none !important; 6214 | } 6215 | 6216 | .show { 6217 | display: block !important; 6218 | } 6219 | 6220 | .invisible { 6221 | visibility: hidden; 6222 | } 6223 | 6224 | .text-hide { 6225 | font: 0/0 a; 6226 | color: transparent; 6227 | text-shadow: none; 6228 | background-color: transparent; 6229 | border: 0; 6230 | } 6231 | 6232 | .affix { 6233 | position: fixed; 6234 | } 6235 | 6236 | @-ms-viewport { 6237 | width: device-width; 6238 | } 6239 | 6240 | @media screen and (max-width: 400px) { 6241 | @-ms-viewport { 6242 | width: 320px; 6243 | } 6244 | } 6245 | 6246 | .hidden { 6247 | display: none !important; 6248 | visibility: hidden !important; 6249 | } 6250 | 6251 | .visible-xs { 6252 | display: none !important; 6253 | } 6254 | 6255 | tr.visible-xs { 6256 | display: none !important; 6257 | } 6258 | 6259 | th.visible-xs, 6260 | td.visible-xs { 6261 | display: none !important; 6262 | } 6263 | 6264 | @media (max-width: 767px) { 6265 | .visible-xs { 6266 | display: block !important; 6267 | } 6268 | tr.visible-xs { 6269 | display: table-row !important; 6270 | } 6271 | th.visible-xs, 6272 | td.visible-xs { 6273 | display: table-cell !important; 6274 | } 6275 | } 6276 | 6277 | @media (min-width: 768px) and (max-width: 991px) { 6278 | .visible-xs.visible-sm { 6279 | display: block !important; 6280 | } 6281 | tr.visible-xs.visible-sm { 6282 | display: table-row !important; 6283 | } 6284 | th.visible-xs.visible-sm, 6285 | td.visible-xs.visible-sm { 6286 | display: table-cell !important; 6287 | } 6288 | } 6289 | 6290 | @media (min-width: 992px) and (max-width: 1199px) { 6291 | .visible-xs.visible-md { 6292 | display: block !important; 6293 | } 6294 | tr.visible-xs.visible-md { 6295 | display: table-row !important; 6296 | } 6297 | th.visible-xs.visible-md, 6298 | td.visible-xs.visible-md { 6299 | display: table-cell !important; 6300 | } 6301 | } 6302 | 6303 | @media (min-width: 1200px) { 6304 | .visible-xs.visible-lg { 6305 | display: block !important; 6306 | } 6307 | tr.visible-xs.visible-lg { 6308 | display: table-row !important; 6309 | } 6310 | th.visible-xs.visible-lg, 6311 | td.visible-xs.visible-lg { 6312 | display: table-cell !important; 6313 | } 6314 | } 6315 | 6316 | .visible-sm { 6317 | display: none !important; 6318 | } 6319 | 6320 | tr.visible-sm { 6321 | display: none !important; 6322 | } 6323 | 6324 | th.visible-sm, 6325 | td.visible-sm { 6326 | display: none !important; 6327 | } 6328 | 6329 | @media (max-width: 767px) { 6330 | .visible-sm.visible-xs { 6331 | display: block !important; 6332 | } 6333 | tr.visible-sm.visible-xs { 6334 | display: table-row !important; 6335 | } 6336 | th.visible-sm.visible-xs, 6337 | td.visible-sm.visible-xs { 6338 | display: table-cell !important; 6339 | } 6340 | } 6341 | 6342 | @media (min-width: 768px) and (max-width: 991px) { 6343 | .visible-sm { 6344 | display: block !important; 6345 | } 6346 | tr.visible-sm { 6347 | display: table-row !important; 6348 | } 6349 | th.visible-sm, 6350 | td.visible-sm { 6351 | display: table-cell !important; 6352 | } 6353 | } 6354 | 6355 | @media (min-width: 992px) and (max-width: 1199px) { 6356 | .visible-sm.visible-md { 6357 | display: block !important; 6358 | } 6359 | tr.visible-sm.visible-md { 6360 | display: table-row !important; 6361 | } 6362 | th.visible-sm.visible-md, 6363 | td.visible-sm.visible-md { 6364 | display: table-cell !important; 6365 | } 6366 | } 6367 | 6368 | @media (min-width: 1200px) { 6369 | .visible-sm.visible-lg { 6370 | display: block !important; 6371 | } 6372 | tr.visible-sm.visible-lg { 6373 | display: table-row !important; 6374 | } 6375 | th.visible-sm.visible-lg, 6376 | td.visible-sm.visible-lg { 6377 | display: table-cell !important; 6378 | } 6379 | } 6380 | 6381 | .visible-md { 6382 | display: none !important; 6383 | } 6384 | 6385 | tr.visible-md { 6386 | display: none !important; 6387 | } 6388 | 6389 | th.visible-md, 6390 | td.visible-md { 6391 | display: none !important; 6392 | } 6393 | 6394 | @media (max-width: 767px) { 6395 | .visible-md.visible-xs { 6396 | display: block !important; 6397 | } 6398 | tr.visible-md.visible-xs { 6399 | display: table-row !important; 6400 | } 6401 | th.visible-md.visible-xs, 6402 | td.visible-md.visible-xs { 6403 | display: table-cell !important; 6404 | } 6405 | } 6406 | 6407 | @media (min-width: 768px) and (max-width: 991px) { 6408 | .visible-md.visible-sm { 6409 | display: block !important; 6410 | } 6411 | tr.visible-md.visible-sm { 6412 | display: table-row !important; 6413 | } 6414 | th.visible-md.visible-sm, 6415 | td.visible-md.visible-sm { 6416 | display: table-cell !important; 6417 | } 6418 | } 6419 | 6420 | @media (min-width: 992px) and (max-width: 1199px) { 6421 | .visible-md { 6422 | display: block !important; 6423 | } 6424 | tr.visible-md { 6425 | display: table-row !important; 6426 | } 6427 | th.visible-md, 6428 | td.visible-md { 6429 | display: table-cell !important; 6430 | } 6431 | } 6432 | 6433 | @media (min-width: 1200px) { 6434 | .visible-md.visible-lg { 6435 | display: block !important; 6436 | } 6437 | tr.visible-md.visible-lg { 6438 | display: table-row !important; 6439 | } 6440 | th.visible-md.visible-lg, 6441 | td.visible-md.visible-lg { 6442 | display: table-cell !important; 6443 | } 6444 | } 6445 | 6446 | .visible-lg { 6447 | display: none !important; 6448 | } 6449 | 6450 | tr.visible-lg { 6451 | display: none !important; 6452 | } 6453 | 6454 | th.visible-lg, 6455 | td.visible-lg { 6456 | display: none !important; 6457 | } 6458 | 6459 | @media (max-width: 767px) { 6460 | .visible-lg.visible-xs { 6461 | display: block !important; 6462 | } 6463 | tr.visible-lg.visible-xs { 6464 | display: table-row !important; 6465 | } 6466 | th.visible-lg.visible-xs, 6467 | td.visible-lg.visible-xs { 6468 | display: table-cell !important; 6469 | } 6470 | } 6471 | 6472 | @media (min-width: 768px) and (max-width: 991px) { 6473 | .visible-lg.visible-sm { 6474 | display: block !important; 6475 | } 6476 | tr.visible-lg.visible-sm { 6477 | display: table-row !important; 6478 | } 6479 | th.visible-lg.visible-sm, 6480 | td.visible-lg.visible-sm { 6481 | display: table-cell !important; 6482 | } 6483 | } 6484 | 6485 | @media (min-width: 992px) and (max-width: 1199px) { 6486 | .visible-lg.visible-md { 6487 | display: block !important; 6488 | } 6489 | tr.visible-lg.visible-md { 6490 | display: table-row !important; 6491 | } 6492 | th.visible-lg.visible-md, 6493 | td.visible-lg.visible-md { 6494 | display: table-cell !important; 6495 | } 6496 | } 6497 | 6498 | @media (min-width: 1200px) { 6499 | .visible-lg { 6500 | display: block !important; 6501 | } 6502 | tr.visible-lg { 6503 | display: table-row !important; 6504 | } 6505 | th.visible-lg, 6506 | td.visible-lg { 6507 | display: table-cell !important; 6508 | } 6509 | } 6510 | 6511 | .hidden-xs { 6512 | display: block !important; 6513 | } 6514 | 6515 | tr.hidden-xs { 6516 | display: table-row !important; 6517 | } 6518 | 6519 | th.hidden-xs, 6520 | td.hidden-xs { 6521 | display: table-cell !important; 6522 | } 6523 | 6524 | @media (max-width: 767px) { 6525 | .hidden-xs { 6526 | display: none !important; 6527 | } 6528 | tr.hidden-xs { 6529 | display: none !important; 6530 | } 6531 | th.hidden-xs, 6532 | td.hidden-xs { 6533 | display: none !important; 6534 | } 6535 | } 6536 | 6537 | @media (min-width: 768px) and (max-width: 991px) { 6538 | .hidden-xs.hidden-sm { 6539 | display: none !important; 6540 | } 6541 | tr.hidden-xs.hidden-sm { 6542 | display: none !important; 6543 | } 6544 | th.hidden-xs.hidden-sm, 6545 | td.hidden-xs.hidden-sm { 6546 | display: none !important; 6547 | } 6548 | } 6549 | 6550 | @media (min-width: 992px) and (max-width: 1199px) { 6551 | .hidden-xs.hidden-md { 6552 | display: none !important; 6553 | } 6554 | tr.hidden-xs.hidden-md { 6555 | display: none !important; 6556 | } 6557 | th.hidden-xs.hidden-md, 6558 | td.hidden-xs.hidden-md { 6559 | display: none !important; 6560 | } 6561 | } 6562 | 6563 | @media (min-width: 1200px) { 6564 | .hidden-xs.hidden-lg { 6565 | display: none !important; 6566 | } 6567 | tr.hidden-xs.hidden-lg { 6568 | display: none !important; 6569 | } 6570 | th.hidden-xs.hidden-lg, 6571 | td.hidden-xs.hidden-lg { 6572 | display: none !important; 6573 | } 6574 | } 6575 | 6576 | .hidden-sm { 6577 | display: block !important; 6578 | } 6579 | 6580 | tr.hidden-sm { 6581 | display: table-row !important; 6582 | } 6583 | 6584 | th.hidden-sm, 6585 | td.hidden-sm { 6586 | display: table-cell !important; 6587 | } 6588 | 6589 | @media (max-width: 767px) { 6590 | .hidden-sm.hidden-xs { 6591 | display: none !important; 6592 | } 6593 | tr.hidden-sm.hidden-xs { 6594 | display: none !important; 6595 | } 6596 | th.hidden-sm.hidden-xs, 6597 | td.hidden-sm.hidden-xs { 6598 | display: none !important; 6599 | } 6600 | } 6601 | 6602 | @media (min-width: 768px) and (max-width: 991px) { 6603 | .hidden-sm { 6604 | display: none !important; 6605 | } 6606 | tr.hidden-sm { 6607 | display: none !important; 6608 | } 6609 | th.hidden-sm, 6610 | td.hidden-sm { 6611 | display: none !important; 6612 | } 6613 | } 6614 | 6615 | @media (min-width: 992px) and (max-width: 1199px) { 6616 | .hidden-sm.hidden-md { 6617 | display: none !important; 6618 | } 6619 | tr.hidden-sm.hidden-md { 6620 | display: none !important; 6621 | } 6622 | th.hidden-sm.hidden-md, 6623 | td.hidden-sm.hidden-md { 6624 | display: none !important; 6625 | } 6626 | } 6627 | 6628 | @media (min-width: 1200px) { 6629 | .hidden-sm.hidden-lg { 6630 | display: none !important; 6631 | } 6632 | tr.hidden-sm.hidden-lg { 6633 | display: none !important; 6634 | } 6635 | th.hidden-sm.hidden-lg, 6636 | td.hidden-sm.hidden-lg { 6637 | display: none !important; 6638 | } 6639 | } 6640 | 6641 | .hidden-md { 6642 | display: block !important; 6643 | } 6644 | 6645 | tr.hidden-md { 6646 | display: table-row !important; 6647 | } 6648 | 6649 | th.hidden-md, 6650 | td.hidden-md { 6651 | display: table-cell !important; 6652 | } 6653 | 6654 | @media (max-width: 767px) { 6655 | .hidden-md.hidden-xs { 6656 | display: none !important; 6657 | } 6658 | tr.hidden-md.hidden-xs { 6659 | display: none !important; 6660 | } 6661 | th.hidden-md.hidden-xs, 6662 | td.hidden-md.hidden-xs { 6663 | display: none !important; 6664 | } 6665 | } 6666 | 6667 | @media (min-width: 768px) and (max-width: 991px) { 6668 | .hidden-md.hidden-sm { 6669 | display: none !important; 6670 | } 6671 | tr.hidden-md.hidden-sm { 6672 | display: none !important; 6673 | } 6674 | th.hidden-md.hidden-sm, 6675 | td.hidden-md.hidden-sm { 6676 | display: none !important; 6677 | } 6678 | } 6679 | 6680 | @media (min-width: 992px) and (max-width: 1199px) { 6681 | .hidden-md { 6682 | display: none !important; 6683 | } 6684 | tr.hidden-md { 6685 | display: none !important; 6686 | } 6687 | th.hidden-md, 6688 | td.hidden-md { 6689 | display: none !important; 6690 | } 6691 | } 6692 | 6693 | @media (min-width: 1200px) { 6694 | .hidden-md.hidden-lg { 6695 | display: none !important; 6696 | } 6697 | tr.hidden-md.hidden-lg { 6698 | display: none !important; 6699 | } 6700 | th.hidden-md.hidden-lg, 6701 | td.hidden-md.hidden-lg { 6702 | display: none !important; 6703 | } 6704 | } 6705 | 6706 | .hidden-lg { 6707 | display: block !important; 6708 | } 6709 | 6710 | tr.hidden-lg { 6711 | display: table-row !important; 6712 | } 6713 | 6714 | th.hidden-lg, 6715 | td.hidden-lg { 6716 | display: table-cell !important; 6717 | } 6718 | 6719 | @media (max-width: 767px) { 6720 | .hidden-lg.hidden-xs { 6721 | display: none !important; 6722 | } 6723 | tr.hidden-lg.hidden-xs { 6724 | display: none !important; 6725 | } 6726 | th.hidden-lg.hidden-xs, 6727 | td.hidden-lg.hidden-xs { 6728 | display: none !important; 6729 | } 6730 | } 6731 | 6732 | @media (min-width: 768px) and (max-width: 991px) { 6733 | .hidden-lg.hidden-sm { 6734 | display: none !important; 6735 | } 6736 | tr.hidden-lg.hidden-sm { 6737 | display: none !important; 6738 | } 6739 | th.hidden-lg.hidden-sm, 6740 | td.hidden-lg.hidden-sm { 6741 | display: none !important; 6742 | } 6743 | } 6744 | 6745 | @media (min-width: 992px) and (max-width: 1199px) { 6746 | .hidden-lg.hidden-md { 6747 | display: none !important; 6748 | } 6749 | tr.hidden-lg.hidden-md { 6750 | display: none !important; 6751 | } 6752 | th.hidden-lg.hidden-md, 6753 | td.hidden-lg.hidden-md { 6754 | display: none !important; 6755 | } 6756 | } 6757 | 6758 | @media (min-width: 1200px) { 6759 | .hidden-lg { 6760 | display: none !important; 6761 | } 6762 | tr.hidden-lg { 6763 | display: none !important; 6764 | } 6765 | th.hidden-lg, 6766 | td.hidden-lg { 6767 | display: none !important; 6768 | } 6769 | } 6770 | 6771 | .visible-print { 6772 | display: none !important; 6773 | } 6774 | 6775 | tr.visible-print { 6776 | display: none !important; 6777 | } 6778 | 6779 | th.visible-print, 6780 | td.visible-print { 6781 | display: none !important; 6782 | } 6783 | 6784 | @media print { 6785 | .visible-print { 6786 | display: block !important; 6787 | } 6788 | tr.visible-print { 6789 | display: table-row !important; 6790 | } 6791 | th.visible-print, 6792 | td.visible-print { 6793 | display: table-cell !important; 6794 | } 6795 | .hidden-print { 6796 | display: none !important; 6797 | } 6798 | tr.hidden-print { 6799 | display: none !important; 6800 | } 6801 | th.hidden-print, 6802 | td.hidden-print { 6803 | display: none !important; 6804 | } 6805 | } -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require "hyperloop" 4 | run Hyperloop::Application.new(File.dirname(__FILE__)) 5 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/current-time.coffee: -------------------------------------------------------------------------------- 1 | $(document).on "click", ".js-update-current-time", -> 2 | $(".js-current-time").html(new Date().toString()) 3 | false 4 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/index.html.erb: -------------------------------------------------------------------------------- 1 | can't leave rap alone the game needs me 2 | 3 |

This is your root view!

4 | 5 |

It's accessible by making a request to <%= name.capitalize %>'s root path from your browser.

6 | 7 | <%%= render "partial" %> 8 | 9 |

Proof that CoffeeScript works:

10 | 11 |

The current time is: unknown. Update

12 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/main.scss: -------------------------------------------------------------------------------- 1 | nav { 2 | background-color: #ddd; 3 | 4 | li { 5 | background-color: #bbb; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /lib/hyperloop/generators/site/socool.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakeboxer/hyperloop/a817238f54b2c2523ec6ab32f3203aa0dc7266c9/lib/hyperloop/generators/site/socool.jpg -------------------------------------------------------------------------------- /lib/hyperloop/response.rb: -------------------------------------------------------------------------------- 1 | require "rack" 2 | 3 | module Hyperloop 4 | class Response < Rack::Response 5 | def initialize(*) 6 | super 7 | headers["Content-Type"] ||= "text/html" 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /lib/hyperloop/version.rb: -------------------------------------------------------------------------------- 1 | module Hyperloop 2 | VERSION = "0.0.4" 3 | end 4 | -------------------------------------------------------------------------------- /lib/hyperloop/view.rb: -------------------------------------------------------------------------------- 1 | require "erb" 2 | require "tilt" 3 | 4 | module Hyperloop 5 | class View 6 | def initialize(view_registry, full_path, layout_path=nil) 7 | @view_registry = view_registry 8 | @full_path = full_path 9 | @data = File.read(@full_path) 10 | 11 | # Only load layout data if all of these things are true: 12 | # 13 | # 1. We're not in a partial 14 | # 2. A layout path was provided 15 | # 3. There's a file at the provided layout path 16 | if !partial? && layout_path && File.file?(layout_path) 17 | @layout_data = File.read(layout_path) 18 | end 19 | end 20 | 21 | # Public: The format of the view. Derived from the view's extension. 22 | # 23 | # Returns a string. 24 | def format 25 | @format ||= File.extname(@full_path)[1..-1].intern 26 | end 27 | 28 | # Public: The name of the view. Derived from the view's filename without 29 | # any extensions or leading underscores. Not guaranteed to be unique amongst 30 | # other views in an app. 31 | # 32 | # Returns a string. 33 | def name 34 | @name ||= filename.split(".").first.sub(/^_/, "") 35 | end 36 | 37 | # Public: Is this view a partial? 38 | # 39 | # Returns a boolean. 40 | def partial? 41 | @partial ||= filename.start_with?("_") 42 | end 43 | 44 | # Public: Render the view. 45 | # 46 | # request - Rack request object that the view is being rendered in response 47 | # to. 48 | # 49 | # Returns a string. 50 | def render(request) 51 | case format 52 | when :html 53 | @data 54 | when :erb 55 | scope = Scope.new(request, @view_registry) 56 | view_html = Tilt["erb"].new { @data }.render(scope) 57 | 58 | if @layout_data 59 | layout_template = Tilt["erb"].new { @layout_data } 60 | layout_template.render(scope) { view_html } 61 | else 62 | view_html 63 | end 64 | end 65 | end 66 | 67 | private 68 | 69 | def filename 70 | @filename ||= File.basename(@full_path) 71 | end 72 | end 73 | end 74 | -------------------------------------------------------------------------------- /lib/hyperloop/view/registry.rb: -------------------------------------------------------------------------------- 1 | module Hyperloop 2 | class View 3 | class Registry 4 | def initialize(root) 5 | views_root = File.join([root, "app/views"].compact) 6 | layout_path = views_root + "/layouts/application.html.erb" 7 | 8 | # Get all the view paths. These look like: 9 | # 10 | # some/path/app/views/whatever.html.erb 11 | # some/path/app/views/subdir/whatever.html.erb 12 | # some/path/app/views/subdir/_partial.html.erb 13 | view_paths = Dir.glob(views_root + "/**/*").reject {|fn| File.directory?(fn)} 14 | view_paths -= [layout_path] 15 | 16 | @template_views = {} 17 | @partial_views = {} 18 | 19 | view_paths.each do |path| 20 | view = View.new(self, path, layout_path) 21 | 22 | # The path under app/views. This will be something like: 23 | # 24 | # /whatever.html.erb 25 | # /subdir/whatever.html.erb 26 | # /subdir/_partial.html.erb 27 | relative_path = path.sub(views_root, "") 28 | 29 | # The path under app/views without a file extension (and without the 30 | # starting _ for partials). This will be something like: 31 | # 32 | # /whatever 33 | # /subdir/whatever 34 | # /subdir/partial 35 | request_dir = File.dirname(relative_path) 36 | request_path = File.join(request_dir, view.name) 37 | 38 | if view.partial? 39 | # Chop off the leading forward slash for partials. 40 | @partial_views[request_path.sub(/^\//, "")] = view 41 | else 42 | @template_views[request_path] = view 43 | @template_views[request_dir] = view if view.name == "index" 44 | end 45 | end 46 | end 47 | 48 | # Public: Get the template view for the specified path. 49 | # 50 | # path - Relative path for the view. Should start under the app/views 51 | # directory and not include file extensions. Should start with a forward 52 | # slash. 53 | # 54 | # Example: 55 | # 56 | # Assuming there's a file at path/to/yoursite/app/views/subdir/whatever.html.erb 57 | # 58 | # bad: registry.find_template_view("/app/views/subdir/whatever.html.erb") 59 | # bad: registry.find_template_view("/subdir/whatever.html.erb") 60 | # bad: registry.find_template_view("subdir/whatever") 61 | # good: registry.find_template_view("/subdir/whatever") 62 | # 63 | # Returns a Hyperloop::View or nil if no view was found. 64 | def find_template_view(path) 65 | @template_views[path] 66 | end 67 | 68 | # Public: Get the partial view for the specified path. 69 | # 70 | # path - Relative path for the view. Should start under the app/views 71 | # directory and not include file extensions, leading underscores, or 72 | # leading forward slashes. 73 | # 74 | # Example: 75 | # 76 | # Assuming there's a file at path/to/yoursite/app/views/subdir/_partial.html.erb 77 | # 78 | # bad: registry.find_partial_view("app/views/subdir/_partial.html.erb") 79 | # bad: registry.find_partial_view("subdir/_partial.html.erb") 80 | # bad: registry.find_partial_view("subdir/_partial") 81 | # bad: registry.find_partial_view("/subdir/partial") 82 | # good: registry.find_partial_view("subdir/partial") 83 | # 84 | # Returns a Hyperloop::View or nil if no view was found. 85 | def find_partial_view(path) 86 | @partial_views[path] 87 | end 88 | end 89 | end 90 | end 91 | -------------------------------------------------------------------------------- /lib/hyperloop/view/scope.rb: -------------------------------------------------------------------------------- 1 | require "tilt" 2 | 3 | module Hyperloop 4 | class View 5 | class Scope 6 | attr_reader :request 7 | 8 | def initialize(request, view_registry) 9 | @request = request 10 | @view_registry = view_registry 11 | end 12 | 13 | # Public: Render the specified partial. 14 | # 15 | # path - Path to look for the partial at. 16 | # 17 | # Returns a string. 18 | def render(path) 19 | @view_registry.find_partial_view(path).render(request) 20 | end 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /spec/application_spec.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path("../spec_helper", __FILE__) 2 | 3 | describe Hyperloop::Application do 4 | describe "with a flat views directory" do 5 | before :each do 6 | @app = Hyperloop::Application.new(prepare_fixture(:simple)) 7 | end 8 | 9 | it "responds successfully to a request for root" do 10 | response = mock_request(@app).get("/") 11 | 12 | expect(response).to be_ok 13 | expect(response.content_type).to eql("text/html") 14 | expect(text_in(response.body, "h1")).to eql("Simple") 15 | end 16 | 17 | it "responds successfully to a request for a different page" do 18 | response = mock_request(@app).get("/about") 19 | 20 | expect(response).to be_ok 21 | expect(text_in(response.body, "h1")).to eql("About") 22 | end 23 | 24 | it "responds successfully to a request with a trailing slash" do 25 | response = mock_request(@app).get("/about/") 26 | 27 | expect(response).to be_ok 28 | expect(text_in(response.body, "h1")).to eql("About") 29 | end 30 | 31 | it "404s on a request for a nonexistent page" do 32 | response = mock_request(@app).get("/nonexistent") 33 | 34 | expect(response).to be_not_found 35 | end 36 | end 37 | 38 | describe "with subdirectories" do 39 | before :each do 40 | @app = Hyperloop::Application.new(prepare_fixture(:subdirectories)) 41 | end 42 | 43 | it "responds successfully to a request for the subdirectory root" do 44 | response = mock_request(@app).get("/subdir1") 45 | 46 | expect(response).to be_ok 47 | expect(text_in(response.body, "h1")).to eql("Subdirectory Index") 48 | end 49 | 50 | it "responds successfully to a request for a different page in the subdirectory" do 51 | response = mock_request(@app).get("/subdir1/kanye") 52 | 53 | expect(response).to be_ok 54 | expect(text_in(response.body, "h1")).to eql("Hurry up with my damn croissant") 55 | end 56 | end 57 | 58 | describe "with ERB" do 59 | before :each do 60 | @app = Hyperloop::Application.new(prepare_fixture(:erb)) 61 | end 62 | 63 | it "renders embedded Ruby in the root page" do 64 | response = mock_request(@app).get("/") 65 | 66 | expect(response).to be_ok 67 | expect(text_in(response.body, "h1")).to eql("WE ARE USING ERB") 68 | end 69 | end 70 | 71 | describe "with a layout" do 72 | before :each do 73 | @app = Hyperloop::Application.new(prepare_fixture(:layouts)) 74 | end 75 | 76 | it "renders the root view within the layout" do 77 | response = mock_request(@app).get("/") 78 | 79 | expect(response).to be_ok 80 | expect(text_in(response.body, "h1")).to eql("Layout Header") 81 | expect(text_in(response.body, "h2")).to eql("This is the root page!") 82 | end 83 | 84 | it "renders subdirectory views within the layout" do 85 | response = mock_request(@app).get("/subdir") 86 | 87 | expect(response).to be_ok 88 | expect(text_in(response.body, "h1")).to eql("Layout Header") 89 | expect(text_in(response.body, "h2")).to eql("This is a page in a subdirectory!") 90 | end 91 | end 92 | 93 | describe "with assets" do 94 | before :each do 95 | @app = Hyperloop::Application.new(prepare_fixture(:assets)) 96 | end 97 | 98 | it "responds successfully to a request for root" do 99 | response = mock_request(@app).get("/") 100 | 101 | expect(response).to be_ok 102 | expect(text_in(response.body, "h1")).to eql("This app has so many assets") 103 | end 104 | 105 | it "responds successfully to a request for the css app bundle" do 106 | response = mock_request(@app).get("/assets/stylesheets/app.css") 107 | 108 | expect(response).to be_ok 109 | expect(response.content_type).to eql("text/css") 110 | expect(response.body).to match(/display: ?block/) 111 | end 112 | 113 | it "responds successfully to a request for the javascript app bundle" do 114 | response = mock_request(@app).get("/assets/javascripts/app.js") 115 | 116 | expect(response).to be_ok 117 | expect(response.content_type).to eql("application/javascript") 118 | expect(response.body).to match(/alert\("such javascript wow"\)/) 119 | end 120 | 121 | it "responds successfully to a request for a vendored css file" do 122 | response = mock_request(@app).get("/assets/stylesheets/vendored.css") 123 | 124 | expect(response).to be_ok 125 | expect(response.content_type).to eql("text/css") 126 | expect(response.body).to match(/margin: ?0/) 127 | end 128 | 129 | it "responds successfully to a request for a vendored javascript bundle" do 130 | response = mock_request(@app).get("/assets/javascripts/vendored.js") 131 | 132 | expect(response).to be_ok 133 | expect(response.content_type).to eql("application/javascript") 134 | expect(response.body).to match(/alert\("i am vendored"\)/) 135 | end 136 | 137 | it "responds successfully to a request for a gif" do 138 | response = mock_request(@app).get("/assets/images/my-gif.gif") 139 | 140 | expect(response).to be_ok 141 | expect(response.content_type).to eql("image/gif") 142 | expect(Digest::SHA1.hexdigest(response.body)).to eql("bcbc6e6fc1eb77b2ca676e17425df93a56495bb2") 143 | end 144 | 145 | it "responds successfully to a request for a jpg" do 146 | response = mock_request(@app).get("/assets/images/my-jpg.jpg") 147 | 148 | expect(response).to be_ok 149 | expect(response.content_type).to eql("image/jpeg") 150 | expect(Digest::SHA1.hexdigest(response.body)).to eql("ae6a26b513d6648446da1395ee73e9cf32c8c668") 151 | end 152 | 153 | it "responds successfully to a request for a png" do 154 | response = mock_request(@app).get("/assets/images/my-png.png") 155 | 156 | expect(response).to be_ok 157 | expect(response.content_type).to eql("image/png") 158 | expect(Digest::SHA1.hexdigest(response.body)).to eql("adf65c25a8e3e39c49ecf581433278d7eac4d1a2") 159 | end 160 | 161 | it "404s on a request for an asset without namespacing by type" do 162 | response = mock_request(@app).get("/assets/app.js") 163 | expect(response).to be_not_found 164 | end 165 | 166 | it "404s on a request for an asset namespaced by the wrong type" do 167 | response = mock_request(@app).get("/assets/stylesheets/app.js") 168 | expect(response).to be_not_found 169 | end 170 | 171 | it "404s on a request for an asset namespaced by an unknown type" do 172 | response = mock_request(@app).get("/assets/shouldfail/shouldfail.css") 173 | expect(response).to be_not_found 174 | end 175 | 176 | it "404s on a request for a nonexistent asset" do 177 | response = mock_request(@app).get("/assets/javascripts/nonexistent.js") 178 | 179 | expect(response).to be_not_found 180 | end 181 | end 182 | 183 | describe "live reloading" do 184 | context "with assets" do 185 | before :each do 186 | @root = prepare_fixture(:assets) 187 | @app = Hyperloop::Application.new(@root) 188 | end 189 | 190 | it "reloads changed assets" do 191 | # On the first request, stylesheet should have `display: block` and not 192 | # `display: inline`. 193 | response = mock_request(@app).get("/assets/stylesheets/app.css") 194 | expect(response).to be_ok 195 | expect(response.body).to match(/display: ?block/) 196 | expect(response.body).not_to match(/display: ?inline/) 197 | 198 | change_fixture(@root, "app/assets/stylesheets/my-styles.scss", 199 | :pattern => "display: block", 200 | :replacement => "display: inline" 201 | ) 202 | 203 | # On the second request, stylesheet should have `display: inline` and not 204 | # `display: block`. 205 | response = mock_request(@app).get("/assets/stylesheets/app.css") 206 | expect(response).to be_ok 207 | expect(response.body).to match(/display: ?inline/) 208 | expect(response.body).not_to match(/display: ?block/) 209 | end 210 | end 211 | 212 | context "with views" do 213 | before :each do 214 | @root = prepare_fixture(:partials) 215 | @app = Hyperloop::Application.new(@root) 216 | end 217 | 218 | it "reloads changed layouts" do 219 | # On the first request, text should not be "Changed" 220 | response = mock_request(@app).get("/") 221 | expect(response).to be_ok 222 | expect(text_in(response.body, "title")).not_to eql("Changed") 223 | 224 | change_fixture(@root, "app/views/layouts/application.html.erb", 225 | :pattern => /<title>[^<]*<\/title>/, 226 | :replacement => "<title>Changed" 227 | ) 228 | 229 | # On the second request, text should be "Changed" 230 | response = mock_request(@app).get("/") 231 | expect(response).to be_ok 232 | expect(text_in(response.body, "title")).to eql("Changed") 233 | end 234 | 235 | it "reloads changed partials" do 236 | # On the first request, <p> text should not be "Changed" 237 | response = mock_request(@app).get("/") 238 | expect(response).to be_ok 239 | expect(text_in(response.body, "p.spec-in-partial")).not_to eql("Changed") 240 | 241 | change_fixture(@root, "app/views/subdir/_partial.html.erb", 242 | :pattern => /<p class="spec-in-partial">[^<]*<\/p>/, 243 | :replacement => "<p class=\"spec-in-partial\">Changed</p>" 244 | ) 245 | 246 | # On the second request, <p> text should be "Changed" 247 | response = mock_request(@app).get("/") 248 | expect(response).to be_ok 249 | expect(text_in(response.body, "p.spec-in-partial")).to eql("Changed") 250 | end 251 | 252 | it "reloads changed views" do 253 | # On the first request, <h2> text should not be "Changed" 254 | response = mock_request(@app).get("/") 255 | expect(response).to be_ok 256 | expect(text_in(response.body, "h2")).not_to eql("Changed") 257 | 258 | change_fixture(@root, "app/views/index.html.erb", 259 | :pattern => /<h2>[^<]*<\/h2>/, 260 | :replacement => "<h2>Changed</h2>" 261 | ) 262 | 263 | # On the second request, <h2> text should be "Changed" 264 | response = mock_request(@app).get("/") 265 | expect(response).to be_ok 266 | expect(text_in(response.body, "h2")).to eql("Changed") 267 | end 268 | end 269 | 270 | context "in production" do 271 | before :each do 272 | set_rack_env :production 273 | end 274 | 275 | after :each do 276 | reset_rack_env 277 | end 278 | 279 | it "doesn't reload changed views" do 280 | root = prepare_fixture(:erb) 281 | app = Hyperloop::Application.new(root) 282 | 283 | # On the first request, <title> text should be "ERB" 284 | response = mock_request(app).get("/") 285 | expect(response).to be_ok 286 | expect(text_in(response.body, "title")).to eql("ERB") 287 | 288 | change_fixture(root, "app/views/index.html.erb", 289 | :pattern => "<title>ERB", 290 | :replacement => "Changed" 291 | ) 292 | 293 | # On the second request, text should still be "ERB" 294 | response = mock_request(app).get("/") 295 | expect(response).to be_ok 296 | expect(text_in(response.body, "title")).to eql("ERB") 297 | end 298 | end 299 | end 300 | end 301 | -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/images/my-gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakeboxer/hyperloop/a817238f54b2c2523ec6ab32f3203aa0dc7266c9/spec/fixtures/assets/app/assets/images/my-gif.gif -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/images/my-jpg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakeboxer/hyperloop/a817238f54b2c2523ec6ab32f3203aa0dc7266c9/spec/fixtures/assets/app/assets/images/my-jpg.jpg -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/images/my-png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakeboxer/hyperloop/a817238f54b2c2523ec6ab32f3203aa0dc7266c9/spec/fixtures/assets/app/assets/images/my-png.png -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/javascripts/app.js: -------------------------------------------------------------------------------- 1 | //= require_tree 2 | -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/javascripts/my-scripts.coffee: -------------------------------------------------------------------------------- 1 | alert "such javascript wow" 2 | -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/shouldfail/shouldfail.css: -------------------------------------------------------------------------------- 1 | div { 2 | display: none; 3 | } 4 | -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/stylesheets/app.css: -------------------------------------------------------------------------------- 1 | //= require_tree 2 | -------------------------------------------------------------------------------- /spec/fixtures/assets/app/assets/stylesheets/my-styles.scss: -------------------------------------------------------------------------------- 1 | div { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /spec/fixtures/assets/app/views/index.html.erb: -------------------------------------------------------------------------------- 1 | <h2>This is the root page for the app with assets!</h2> 2 | 3 | <p>How u doin. Check out these images in 3 different formats.</p> 4 | 5 | <img src="/assets/my-gif.gif" alt="My GIF"> 6 | <img src="/assets/my-jpg.jpg" alt="My JPEG"> 7 | <img src="/assets/my-png.png" alt="My PNG"> 8 | -------------------------------------------------------------------------------- /spec/fixtures/assets/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html> 2 | <html> 3 | <head> 4 | <title>App With Assets 5 | 6 | 7 | 8 | 9 | 10 | 11 |

This app has so many assets

12 | 13 | <%= yield %> 14 | 15 | 16 | -------------------------------------------------------------------------------- /spec/fixtures/assets/vendor/assets/javascripts/vendored.js: -------------------------------------------------------------------------------- 1 | alert("i am vendored"); 2 | -------------------------------------------------------------------------------- /spec/fixtures/assets/vendor/assets/stylesheets/vendored.css: -------------------------------------------------------------------------------- 1 | div { 2 | margin: 0; 3 | } 4 | -------------------------------------------------------------------------------- /spec/fixtures/erb/app/views/about.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ERB 5 | 6 | 7 | 8 |

I was born on <%= Time.utc(1985, 12, 21).strftime('%B %e') %>

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/fixtures/erb/app/views/index.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ERB 5 | 6 | 7 | 8 |

<%= "we are using erb".upcase %>

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/fixtures/layouts/app/views/index.html.erb: -------------------------------------------------------------------------------- 1 |

This is the root page!

2 | 3 |

Sup.

4 | -------------------------------------------------------------------------------- /spec/fixtures/layouts/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | App With Layouts 5 | 6 | 7 | 8 |

Layout Header

9 | 10 | <%= yield %> 11 | 12 | 13 | -------------------------------------------------------------------------------- /spec/fixtures/layouts/app/views/subdir/index.html.erb: -------------------------------------------------------------------------------- 1 |

This is a page in a subdirectory!

2 | 3 |

How u doin.

4 | -------------------------------------------------------------------------------- /spec/fixtures/partials/app/views/index.html.erb: -------------------------------------------------------------------------------- 1 |

This part of the root page is not in a partial!

2 | 3 | <%= render "subdir/partial" %> 4 | -------------------------------------------------------------------------------- /spec/fixtures/partials/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | App With Partials 5 | 6 | 7 | 8 |

Partials work in this app

9 | 10 | <%= yield %> 11 | 12 | 13 | -------------------------------------------------------------------------------- /spec/fixtures/partials/app/views/subdir/_partial.html.erb: -------------------------------------------------------------------------------- 1 |

This is coming from a partial.

2 | -------------------------------------------------------------------------------- /spec/fixtures/partials/app/views/subdir/index.html.erb: -------------------------------------------------------------------------------- 1 |

This is a page in a subdirectory!

2 | 3 |

How u doin.

4 | -------------------------------------------------------------------------------- /spec/fixtures/partials/app/views/subdir/nonroot.html.erb: -------------------------------------------------------------------------------- 1 |

This is not the root!

2 | 3 |

But it's still cool.

4 | -------------------------------------------------------------------------------- /spec/fixtures/simple/app/views/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | About 5 | 6 | 7 | 8 |

About

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/fixtures/simple/app/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Simple 5 | 6 | 7 | 8 |

Simple

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/fixtures/subdirectories/app/views/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | About 5 | 6 | 7 | 8 |

About

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/fixtures/subdirectories/app/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Simple 5 | 6 | 7 | 8 |

Simple

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/fixtures/subdirectories/app/views/subdir1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Subdirectory Index 5 | 6 | 7 | 8 |

Subdirectory Index

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/fixtures/subdirectories/app/views/subdir1/kanye.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Kanye West 5 | 6 | 7 | 8 |

Hurry up with my damn croissant

9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/response_spec.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path("../spec_helper", __FILE__) 2 | 3 | describe Hyperloop::Response do 4 | it "has a body" do 5 | response = Hyperloop::Response.new("irrelevant") 6 | expect(response.body).not_to be_empty 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require "nokogiri" 2 | require "pry" 3 | 4 | require "hyperloop" 5 | 6 | module Helpers 7 | # Public: Clean up all prepared fixtures. 8 | # 9 | # Returns nothing. 10 | def cleanup_fixtures 11 | tmp_fixtures_dir = File.join("tmp", "spec", "fixtures") 12 | FileUtils.rm_rf(tmp_fixtures_dir) 13 | end 14 | 15 | # Public: Change the contents of a file in a fixture. 16 | # 17 | # fixture_path - Path to the fixture containing the file we want to change. 18 | # file_path - Path (relative to fixture_path) of the file we want to 19 | # change. 20 | # options - Hash containing the following keys: 21 | # :pattern - (Required) Regexp or String to find in the 22 | # file. Only the first occurrence will be 23 | # matched. 24 | # :replacement - (Required) String to replace the found pattern 25 | # with. 26 | # 27 | # Examples: 28 | # 29 | # change_fixture("tmp/spec/fixtures/erb", "app/views/index.html.erb", 30 | # :pattern => "ERB", 31 | # :replacement => "Changed" 32 | # ) 33 | # 34 | # change_fixture("tmp/spec/fixtures/erb", "app/views/index.html.erb", 35 | # :pattern => /[^<]*<\/title>/, 36 | # :replacement => "<title>Changed" 37 | # ) 38 | # 39 | # Returns nothing. 40 | def change_fixture(fixture_path, file_path, options = {}) 41 | pattern = options[:pattern] 42 | replacement = options[:replacement] 43 | 44 | raise ArgumentError, "change_fixture must include a :pattern option" unless pattern 45 | raise ArgumentError, "change_fixture must include a :replacement option" unless replacement 46 | 47 | File.open(File.join(fixture_path, file_path), "r+") do |f| 48 | data = f.read.sub(pattern, replacement) 49 | f.rewind 50 | f.write(data) 51 | end 52 | end 53 | 54 | def html(str) 55 | Nokogiri::HTML(str) 56 | end 57 | 58 | def mock_view_registry 59 | @mock_view_registry ||= double("Hyperloop::View::Registry", 60 | :find_partial_view => nil, 61 | :find_template_view => nil 62 | ) 63 | end 64 | 65 | # Public: Prepare a fixture with the specified name. 66 | # 67 | # name - Symbol name of the fixture to prepare. The name passed here will be 68 | # looked up in the spec/fixtures directory. 69 | # 70 | # Note: 71 | # 72 | # This method exists along with change_fixture and cleanup_fixtures. If 73 | # these get used a lot more or more fixture-related functionality is added, 74 | # it may make sense to extract a Fixture class and move these methods into 75 | # it. 76 | # 77 | # Returns a string filepath representing the new location of the prepared 78 | # fixture. 79 | def prepare_fixture(name) 80 | root = File.join("spec", "fixtures", name.to_s) 81 | contents = File.join(root, ".") 82 | tmp_root = File.join("tmp", root) 83 | 84 | # Delete and recreate the tmp/spec/fixtures/:name directory, then copy the 85 | # fixture into it. 86 | FileUtils.rm_rf(tmp_root) 87 | FileUtils.mkdir_p(tmp_root) 88 | FileUtils.cp_r(contents, tmp_root) 89 | 90 | tmp_root 91 | end 92 | 93 | # Public: Set the RACK_ENV environment variable back to whatever it was when 94 | # the spec started running. If RACK_ENV wasn't set before the spec started 95 | # running, it will be deleted. 96 | # 97 | # Returns nothing. 98 | def reset_rack_env 99 | if defined?(@old_rack_env) 100 | ENV["RACK_ENV"] = @old_rack_env 101 | else 102 | ENV.delete("RACK_ENV") 103 | end 104 | end 105 | 106 | # Public: Set the RACK_ENV environment variable to the specified value. 107 | # 108 | # name - Symbol environment name to set RACK_ENV to. Should be :development, 109 | # :test, or :production. 110 | # 111 | # Returns nothing. 112 | def set_rack_env(name) 113 | @old_rack_env = ENV["RACK_ENV"] if ENV.key?("RACK_ENV") 114 | ENV["RACK_ENV"] = name.to_s 115 | end 116 | 117 | def text_in(html_str, selector) 118 | node = html(html_str).at_css(selector) 119 | node && node.text 120 | end 121 | 122 | def mock_app 123 | @mock_app ||= double("rack app", :call => Hyperloop::Response.new.finish ) 124 | end 125 | 126 | def mock_request(app = nil) 127 | Rack::MockRequest.new(app || mock_app) 128 | end 129 | end 130 | 131 | ENV["RACK_ENV"] ||= "test" 132 | 133 | RSpec.configure do |c| 134 | c.include(Helpers) 135 | 136 | c.after :all do 137 | cleanup_fixtures 138 | end 139 | end 140 | -------------------------------------------------------------------------------- /spec/view/registry_spec.rb: -------------------------------------------------------------------------------- 1 | describe Hyperloop::View::Registry do 2 | before :each do 3 | @registry = Hyperloop::View::Registry.new("spec/fixtures/partials/") 4 | end 5 | 6 | describe "#find_template_view" do 7 | it "finds the root view" do 8 | expect(@registry.find_template_view("/").name).to eql("index") 9 | end 10 | 11 | it "finds a root view in a subdirectory" do 12 | expect(@registry.find_template_view("/subdir").name).to eql("index") 13 | end 14 | 15 | it "finds a non-root view in a subdirectory" do 16 | expect(@registry.find_template_view("/subdir/nonroot").name).to eql("nonroot") 17 | end 18 | 19 | it "doesn't find partials" do 20 | expect(@registry.find_template_view("/subdir/partial")).to be_nil 21 | expect(@registry.find_template_view("/subdir/_partial")).to be_nil 22 | expect(@registry.find_template_view("subdir/partial")).to be_nil 23 | expect(@registry.find_template_view("subdir/_partial")).to be_nil 24 | end 25 | 26 | it "doesn't find layouts" do 27 | expect(@registry.find_template_view("/layouts/application")).to be_nil 28 | end 29 | end 30 | 31 | describe "#find_partial_view" do 32 | it "finds partials" do 33 | expect(@registry.find_partial_view("subdir/partial").name).to eql("partial") 34 | end 35 | 36 | it "doesn't find partials if the filename in the path is prefixed with an underscore" do 37 | expect(@registry.find_partial_view("subdir/_partial")).to be_nil 38 | end 39 | 40 | it "doesn't find partials if the path is prefixed with a forward slash" do 41 | expect(@registry.find_partial_view("/subdir/partial")).to be_nil 42 | end 43 | 44 | it "doesn't find template views" do 45 | expect(@registry.find_partial_view("/")).to be_nil 46 | expect(@registry.find_partial_view("/subdir")).to be_nil 47 | expect(@registry.find_partial_view("/subdir/nonroot")).to be_nil 48 | expect(@registry.find_partial_view("subdir/nonroot")).to be_nil 49 | end 50 | 51 | it "doesn't find layouts" do 52 | expect(@registry.find_partial_view("/subdir/layouts/application")).to be_nil 53 | expect(@registry.find_partial_view("subdir/layouts/application")).to be_nil 54 | end 55 | end 56 | end 57 | -------------------------------------------------------------------------------- /spec/view/scope_spec.rb: -------------------------------------------------------------------------------- 1 | describe Hyperloop::View::Scope do 2 | before :each do 3 | view_registry = Hyperloop::View::Registry.new("spec/fixtures/partials/") 4 | @request = mock_request 5 | @scope = Hyperloop::View::Scope.new(@request, view_registry) 6 | end 7 | 8 | describe "#request" do 9 | it "is the request that the scope will be used in response to" do 10 | expect(@scope.request).to eql(@request) 11 | end 12 | end 13 | 14 | describe "#render" do 15 | it "renders the specified partial" do 16 | html = @scope.render("subdir/partial") 17 | 18 | expect(text_in(html, "p")).to eql("This is coming from a partial.") 19 | end 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /spec/view_spec.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path("../spec_helper", __FILE__) 2 | 3 | describe Hyperloop::View do 4 | before :each do 5 | @html_view = Hyperloop::View.new(mock_view_registry, 6 | "spec/fixtures/simple/app/views/about.html" 7 | ) 8 | 9 | @erb_view = Hyperloop::View.new(mock_view_registry, 10 | "spec/fixtures/erb/app/views/about.html.erb" 11 | ) 12 | 13 | @layout_view = Hyperloop::View.new(mock_view_registry, 14 | "spec/fixtures/layouts/app/views/index.html.erb", 15 | "spec/fixtures/layouts/app/views/layouts/application.html.erb" 16 | ) 17 | 18 | partials_view_registry = Hyperloop::View::Registry.new("spec/fixtures/partials/") 19 | @partial_container = partials_view_registry.find_template_view("/") 20 | @partial_view = partials_view_registry.find_partial_view("subdir/partial") 21 | end 22 | 23 | describe "#format" do 24 | it "is :html for HTML files" do 25 | expect(@html_view.format).to eql(:html) 26 | end 27 | 28 | it "is :erb for ERB files" do 29 | expect(@erb_view.format).to eql(:erb) 30 | end 31 | end 32 | 33 | describe "#name" do 34 | it "strips the extension from plain HTML files" do 35 | expect(@html_view.name).to eql("about") 36 | end 37 | 38 | it "strips the extension from ERB files" do 39 | expect(@erb_view.name).to eql("about") 40 | end 41 | 42 | it "strips the leading underscore for partials" do 43 | expect(@partial_view.name).to eql("partial") 44 | end 45 | end 46 | 47 | describe "#partial?" do 48 | it "is false for a template view" do 49 | expect(@partial_container).not_to be_partial 50 | end 51 | 52 | it "is true for a partial view" do 53 | expect(@partial_view).to be_partial 54 | end 55 | end 56 | 57 | describe "#render" do 58 | it "renders plain HTML files" do 59 | html = @html_view.render(mock_request) 60 | 61 | expect(text_in(html, "h1")).to eql("About") 62 | end 63 | 64 | it "renders ERB files" do 65 | html = @erb_view.render(mock_request) 66 | 67 | expect(text_in(html, "h1")).to eql("I was born on December 21") 68 | end 69 | 70 | it "renders ERB files in layouts" do 71 | html = @layout_view.render(mock_request) 72 | 73 | expect(text_in(html, "h1")).to eql("Layout Header") 74 | expect(text_in(html, "h2")).to eql("This is the root page!") 75 | end 76 | 77 | it "renders ERB files containing partials" do 78 | html = @partial_container.render(mock_request) 79 | 80 | expect(text_in(html, "h1")).to eql("Partials work in this app") 81 | expect(text_in(html, "h2")).to eql("This part of the root page is not in a partial!") 82 | expect(text_in(html, "p")).to eql("This is coming from a partial.") 83 | end 84 | 85 | it "renders ERB partials" do 86 | html = @partial_view.render(mock_request) 87 | 88 | expect(text_in(html, "h1")).not_to eql("Partials work in this app") 89 | expect(text_in(html, "h2")).not_to eql("This part of the root page is not in a partial!") 90 | expect(text_in(html, "p")).to eql("This is coming from a partial.") 91 | end 92 | end 93 | end 94 | --------------------------------------------------------------------------------