diff --git a/_themes/bootstrap/globaltoc.html b/_themes/bootstrap/globaltoc.html new file mode 100644 index 00000000000..936d3b9e002 --- /dev/null +++ b/_themes/bootstrap/globaltoc.html @@ -0,0 +1,5 @@ + diff --git a/_themes/bootstrap/layout.html b/_themes/bootstrap/layout.html new file mode 100644 index 00000000000..7dd30999140 --- /dev/null +++ b/_themes/bootstrap/layout.html @@ -0,0 +1,126 @@ +{% extends "basic/layout.html" %} +{% set script_files = script_files + ['_static/bootstrap-dropdown.js', '_static/bootstrap-scrollspy.js'] %} +{% set css_files = ['_static/bootstrap.css', '_static/bootstrap-sphinx.css'] + css_files %} + +{# Sidebar: Rework into our Boostrap nav section. #} +{% macro navBar() %} +
+
+
+ {{ shorttitle|e }} + + +
+
+
+{% endmacro %} + +{%- block extrahead %} + +{% endblock %} + +{% block header %}{{ navBar() }}{% endblock %} + +{# Silence the sidebar's, relbar's #} +{% block sidebar1 %}{% endblock %} +{% block sidebar2 %}{% endblock %} +{% block relbar1 %}{% endblock %} +{% block relbar2 %}{% endblock %} + +{%- block content %} +
+ {% block body %} {% endblock %} +
+{%- endblock %} + +{%- block footer %} + +{%- endblock %} + diff --git a/_themes/bootstrap/localtoc.html b/_themes/bootstrap/localtoc.html new file mode 100644 index 00000000000..6f1bc8433fc --- /dev/null +++ b/_themes/bootstrap/localtoc.html @@ -0,0 +1,5 @@ + diff --git a/_themes/bootstrap/relations.html b/_themes/bootstrap/relations.html new file mode 100644 index 00000000000..b3df68e3b54 --- /dev/null +++ b/_themes/bootstrap/relations.html @@ -0,0 +1,8 @@ +{%- if prev %} +
  • {{ "«"|safe }} {{ prev.title }}
  • +{%- endif %} +{%- if next %} +
  • {{ next.title }} {{ "»"|safe }}
  • +{%- endif %} diff --git a/_themes/bootstrap/searchbox.html b/_themes/bootstrap/searchbox.html new file mode 100644 index 00000000000..3063dde3d1a --- /dev/null +++ b/_themes/bootstrap/searchbox.html @@ -0,0 +1,7 @@ +{%- if pagename != "search" %} +
    + + + +
    +{%- endif %} diff --git a/_themes/bootstrap/sourcelink.html b/_themes/bootstrap/sourcelink.html new file mode 100644 index 00000000000..21ae2d8fef8 --- /dev/null +++ b/_themes/bootstrap/sourcelink.html @@ -0,0 +1,4 @@ +{%- if show_source and has_source and sourcename %} +
  • {{ _('Source') }}
  • +{%- endif %} diff --git a/_themes/bootstrap/static/bootstrap-dropdown.js b/_themes/bootstrap/static/bootstrap-dropdown.js new file mode 100644 index 00000000000..fda6da597e0 --- /dev/null +++ b/_themes/bootstrap/static/bootstrap-dropdown.js @@ -0,0 +1,55 @@ +/* ============================================================ + * bootstrap-dropdown.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#dropdown + * ============================================================ + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function( $ ){ + + "use strict" + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + $.fn.dropdown = function ( selector ) { + return this.each(function () { + $(this).delegate(selector || d, 'click', function (e) { + var li = $(this).parent('li') + , isActive = li.hasClass('open') + + clearMenus() + !isActive && li.toggleClass('open') + return false + }) + }) + } + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + var d = 'a.menu, .dropdown-toggle' + + function clearMenus() { + $(d).parent('li').removeClass('open') + } + + $(function () { + $('html').bind("click", clearMenus) + $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' ) + }) + +}( window.jQuery || window.ender ); diff --git a/_themes/bootstrap/static/bootstrap-scrollspy.js b/_themes/bootstrap/static/bootstrap-scrollspy.js new file mode 100644 index 00000000000..efbc4329605 --- /dev/null +++ b/_themes/bootstrap/static/bootstrap-scrollspy.js @@ -0,0 +1,107 @@ +/* ============================================================= + * bootstrap-scrollspy.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ============================================================= + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================== */ + + +!function ( $ ) { + + "use strict" + + var $window = $(window) + + function ScrollSpy( topbar, selector ) { + var processScroll = $.proxy(this.processScroll, this) + this.$topbar = $(topbar) + this.selector = selector || 'li > a' + this.refresh() + this.$topbar.delegate(this.selector, 'click', processScroll) + $window.scroll(processScroll) + this.processScroll() + } + + ScrollSpy.prototype = { + + refresh: function () { + this.targets = this.$topbar.find(this.selector).map(function () { + var href = $(this).attr('href') + return /^#\w/.test(href) && $(href).length ? href : null + }) + + this.offsets = $.map(this.targets, function (id) { + return $(id).offset().top + }) + } + + , processScroll: function () { + var scrollTop = $window.scrollTop() + 10 + , offsets = this.offsets + , targets = this.targets + , activeTarget = this.activeTarget + , i + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activateButton( targets[i] ) + } + } + + , activateButton: function (target) { + this.activeTarget = target + + this.$topbar + .find(this.selector).parent('.active') + .removeClass('active') + + this.$topbar + .find(this.selector + '[href="' + target + '"]') + .parent('li') + .addClass('active') + } + + } + + /* SCROLLSPY PLUGIN DEFINITION + * =========================== */ + + $.fn.scrollSpy = function( options ) { + var scrollspy = this.data('scrollspy') + + if (!scrollspy) { + return this.each(function () { + $(this).data('scrollspy', new ScrollSpy( this, options )) + }) + } + + if ( options === true ) { + return scrollspy + } + + if ( typeof options == 'string' ) { + scrollspy[options]() + } + + return this + } + + $(document).ready(function () { + $('body').scrollSpy('[data-scrollspy] li > a') + }) + +}( window.jQuery || window.ender ); \ No newline at end of file diff --git a/_themes/bootstrap/static/bootstrap-sphinx.css_t b/_themes/bootstrap/static/bootstrap-sphinx.css_t new file mode 100644 index 00000000000..044eb4f2066 --- /dev/null +++ b/_themes/bootstrap/static/bootstrap-sphinx.css_t @@ -0,0 +1,24 @@ +/* +* bootstrap-sphinx.css +* ~~~~~~~~~~~~~~~~~~~~ +* +* Sphinx stylesheet -- Twitter Bootstrap theme. +*/ + +body { + padding-top: 42px; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +{%- block sidebarlogo %} + {%- if logo %} +.topbar h3 a, .topbar .brand { + background: transparent url("{{ logo }}") no-repeat 22px 3px; + padding-left: 62px; +} + {%- endif %} +{%- endblock %} diff --git a/_themes/bootstrap/static/bootstrap.css b/_themes/bootstrap/static/bootstrap.css new file mode 100644 index 00000000000..e5aa166089b --- /dev/null +++ b/_themes/bootstrap/static/bootstrap.css @@ -0,0 +1,2467 @@ +/*! + * Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + * Date: Sun Nov 20 21:42:29 PST 2011 + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html, body { + margin: 0; + padding: 0; +} +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +cite, +code, +del, +dfn, +em, +img, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +dd, +dl, +dt, +li, +ol, +ul, +fieldset, +form, +label, +legend, +button, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +ol, ul { + list-style: none; +} +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted; +} +a:hover, a:active { + outline: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; +} +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; + -ms-interpolation-mode: bicubic; +} +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} +button, input { + line-height: normal; + *overflow: visible; +} +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +textarea { + overflow: auto; + vertical-align: top; +} +/* Variables.less + * Variables to customize the look and feel of Bootstrap + * ----------------------------------------------------- */ +/* Mixins.less + * Snippets of reusable CSS to develop faster and keep code readable + * ----------------------------------------------------------------- */ +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 18px; + color: #404040; +} +.container { + width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} +.container:after { + clear: both; +} +.container-fluid { + position: relative; + min-width: 940px; + padding-left: 20px; + padding-right: 20px; + zoom: 1; +} +.container-fluid:before, .container-fluid:after { + display: table; + content: ""; + zoom: 1; +} +.container-fluid:after { + clear: both; +} +.container-fluid > .sidebar { + position: absolute; + top: 0; + left: 20px; + width: 220px; +} +.container-fluid > .content { + margin-left: 240px; +} +a { + color: #0069d6; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} +a:hover { + color: #00438a; + text-decoration: underline; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.row { + zoom: 1; + margin-left: -20px; +} +.row:before, .row:after { + display: table; + content: ""; + zoom: 1; +} +.row:after { + clear: both; +} +.row > [class*="span"] { + display: inline; + float: left; + margin-left: 20px; +} +.span1 { + width: 40px; +} +.span2 { + width: 100px; +} +.span3 { + width: 160px; +} +.span4 { + width: 220px; +} +.span5 { + width: 280px; +} +.span6 { + width: 340px; +} +.span7 { + width: 400px; +} +.span8 { + width: 460px; +} +.span9 { + width: 520px; +} +.span10 { + width: 580px; +} +.span11 { + width: 640px; +} +.span12 { + width: 700px; +} +.span13 { + width: 760px; +} +.span14 { + width: 820px; +} +.span15 { + width: 880px; +} +.span16 { + width: 940px; +} +.span17 { + width: 1000px; +} +.span18 { + width: 1060px; +} +.span19 { + width: 1120px; +} +.span20 { + width: 1180px; +} +.span21 { + width: 1240px; +} +.span22 { + width: 1300px; +} +.span23 { + width: 1360px; +} +.span24 { + width: 1420px; +} +.row > .offset1 { + margin-left: 80px; +} +.row > .offset2 { + margin-left: 140px; +} +.row > .offset3 { + margin-left: 200px; +} +.row > .offset4 { + margin-left: 260px; +} +.row > .offset5 { + margin-left: 320px; +} +.row > .offset6 { + margin-left: 380px; +} +.row > .offset7 { + margin-left: 440px; +} +.row > .offset8 { + margin-left: 500px; +} +.row > .offset9 { + margin-left: 560px; +} +.row > .offset10 { + margin-left: 620px; +} +.row > .offset11 { + margin-left: 680px; +} +.row > .offset12 { + margin-left: 740px; +} +.span-one-third { + width: 300px; +} +.span-two-thirds { + width: 620px; +} +.row > .offset-one-third { + margin-left: 340px; +} +.row > .offset-two-thirds { + margin-left: 660px; +} +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p { + font-size: 13px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} +p small { + font-size: 11px; + color: #bfbfbf; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; + color: #404040; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} +h1 small { + font-size: 18px; +} +h2 { + font-size: 24px; + line-height: 36px; +} +h2 small { + font-size: 14px; +} +h3, +h4, +h5, +h6 { + line-height: 36px; +} +h3 { + font-size: 18px; +} +h3 small { + font-size: 14px; +} +h4 { + font-size: 16px; +} +h4 small { + font-size: 12px; +} +h5 { + font-size: 14px; +} +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} +ul, ol { + margin: 0 0 18px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +ul { + list-style: disc; +} +ol { + list-style: decimal; +} +li { + line-height: 18px; + color: #808080; +} +ul.unstyled { + list-style: none; + margin-left: 0; +} +dl { + margin-bottom: 18px; +} +dl dt, dl dd { + line-height: 18px; +} +dl dt { + font-weight: bold; +} +dl dd { + margin-left: 9px; +} +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} +strong { + font-style: inherit; + font-weight: bold; +} +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} +.muted { + color: #bfbfbf; +} +blockquote { + margin-bottom: 18px; + border-left: 5px solid #eee; + padding-left: 15px; +} +blockquote p { + font-size: 14px; + font-weight: 300; + line-height: 18px; + margin-bottom: 0; +} +blockquote small { + display: block; + font-size: 12px; + font-weight: 300; + line-height: 18px; + color: #bfbfbf; +} +blockquote small:before { + content: '\2014 \00A0'; +} +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} +fieldset { + margin-bottom: 18px; + padding-top: 18px; +} +fieldset legend { + display: block; + padding-left: 150px; + font-size: 19.5px; + line-height: 1; + color: #404040; + *padding: 0 0 5px 145px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .clearfix { + margin-bottom: 18px; + zoom: 1; +} +form .clearfix:before, form .clearfix:after { + display: table; + content: ""; + zoom: 1; +} +form .clearfix:after { + clear: both; +} +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: normal; +} +label { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 130px; + text-align: right; + color: #404040; +} +form .input { + margin-left: 150px; +} +input[type=checkbox], input[type=radio] { + cursor: pointer; +} +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: 18px; + padding: 4px; + font-size: 13px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +select { + padding: initial; +} +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} +input[type=file] { + background-color: #ffffff; + padding: initial; + border: initial; + line-height: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} +select, input[type=file] { + height: 27px; + *height: auto; + line-height: 27px; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + +} +select[multiple] { + height: inherit; + background-color: #ffffff; +} +textarea { + height: auto; +} +.uneditable-input { + background-color: #ffffff; + display: block; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +:-moz-placeholder { + color: #bfbfbf; +} +::-webkit-input-placeholder { + color: #bfbfbf; +} +input, textarea { + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); +} +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 1px dotted #666; +} +form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline { + color: #b94a48; +} +form .clearfix.error input, form .clearfix.error textarea { + color: #b94a48; + border-color: #ee5f5b; +} +form .clearfix.error input:focus, form .clearfix.error textarea:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} +form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline { + color: #c09853; +} +form .clearfix.warning input, form .clearfix.warning textarea { + color: #c09853; + border-color: #ccae64; +} +form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { + border-color: #be9a3f; + -webkit-box-shadow: 0 0 6px #e5d6b1; + -moz-box-shadow: 0 0 6px #e5d6b1; + box-shadow: 0 0 6px #e5d6b1; +} +form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} +form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline { + color: #468847; +} +form .clearfix.success input, form .clearfix.success textarea { + color: #468847; + border-color: #57a957; +} +form .clearfix.success input:focus, form .clearfix.success textarea:focus { + border-color: #458845; + -webkit-box-shadow: 0 0 6px #9acc9a; + -moz-box-shadow: 0 0 6px #9acc9a; + box-shadow: 0 0 6px #9acc9a; +} +form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} +.input-mini, +input.mini, +textarea.mini, +select.mini { + width: 60px; +} +.input-small, +input.small, +textarea.small, +select.small { + width: 90px; +} +.input-medium, +input.medium, +textarea.medium, +select.medium { + width: 150px; +} +.input-large, +input.large, +textarea.large, +select.large { + width: 210px; +} +.input-xlarge, +input.xlarge, +textarea.xlarge, +select.xlarge { + width: 270px; +} +.input-xxlarge, +input.xxlarge, +textarea.xxlarge, +select.xxlarge { + width: 530px; +} +textarea.xxlarge { + overflow-y: auto; +} +input.span1, textarea.span1 { + display: inline-block; + float: none; + width: 30px; + margin-left: 0; +} +input.span2, textarea.span2 { + display: inline-block; + float: none; + width: 90px; + margin-left: 0; +} +input.span3, textarea.span3 { + display: inline-block; + float: none; + width: 150px; + margin-left: 0; +} +input.span4, textarea.span4 { + display: inline-block; + float: none; + width: 210px; + margin-left: 0; +} +input.span5, textarea.span5 { + display: inline-block; + float: none; + width: 270px; + margin-left: 0; +} +input.span6, textarea.span6 { + display: inline-block; + float: none; + width: 330px; + margin-left: 0; +} +input.span7, textarea.span7 { + display: inline-block; + float: none; + width: 390px; + margin-left: 0; +} +input.span8, textarea.span8 { + display: inline-block; + float: none; + width: 450px; + margin-left: 0; +} +input.span9, textarea.span9 { + display: inline-block; + float: none; + width: 510px; + margin-left: 0; +} +input.span10, textarea.span10 { + display: inline-block; + float: none; + width: 570px; + margin-left: 0; +} +input.span11, textarea.span11 { + display: inline-block; + float: none; + width: 630px; + margin-left: 0; +} +input.span12, textarea.span12 { + display: inline-block; + float: none; + width: 690px; + margin-left: 0; +} +input.span13, textarea.span13 { + display: inline-block; + float: none; + width: 750px; + margin-left: 0; +} +input.span14, textarea.span14 { + display: inline-block; + float: none; + width: 810px; + margin-left: 0; +} +input.span15, textarea.span15 { + display: inline-block; + float: none; + width: 870px; + margin-left: 0; +} +input.span16, textarea.span16 { + display: inline-block; + float: none; + width: 930px; + margin-left: 0; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; + cursor: not-allowed; +} +.actions { + background: #f5f5f5; + margin-top: 18px; + margin-bottom: 18px; + padding: 17px 20px 18px 150px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +.actions .secondary-action { + float: right; +} +.actions .secondary-action a { + line-height: 30px; +} +.actions .secondary-action a:hover { + text-decoration: underline; +} +.help-inline, .help-block { + font-size: 13px; + line-height: 18px; + color: #bfbfbf; +} +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} +.help-block { + display: block; + max-width: 600px; +} +.inline-inputs { + color: #808080; +} +.inline-inputs span { + padding: 0 2px 0 1px; +} +.input-prepend input, .input-append input { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-prepend .add-on, .input-append .add-on { + position: relative; + background: #f5f5f5; + border: 1px solid #ccc; + z-index: 2; + float: left; + display: block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 4px 4px 5px; + margin-right: -1px; + font-weight: normal; + line-height: 18px; + color: #bfbfbf; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-prepend .active, .input-append .active { + background: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on { + *margin-top: 1px; + /* IE6-7 */ + +} +.input-append input { + float: left; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-append .add-on { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-right: 0; + margin-left: -1px; +} +.inputs-list { + margin: 0 0 5px; + width: 100%; +} +.inputs-list li { + display: block; + padding: 0; + width: 100%; +} +.inputs-list label { + display: block; + float: none; + width: auto; + padding: 0; + margin-left: 20px; + line-height: 18px; + text-align: left; + white-space: normal; +} +.inputs-list label strong { + color: #808080; +} +.inputs-list label small { + font-size: 11px; + font-weight: normal; +} +.inputs-list .inputs-list { + margin-left: 25px; + margin-bottom: 10px; + padding-top: 0; +} +.inputs-list:first-child { + padding-top: 6px; +} +.inputs-list li + li { + padding-top: 2px; +} +.inputs-list input[type=radio], .inputs-list input[type=checkbox] { + margin-bottom: 0; + margin-left: -20px; + float: left; +} +.form-stacked { + padding-left: 20px; +} +.form-stacked fieldset { + padding-top: 9px; +} +.form-stacked legend { + padding-left: 0; +} +.form-stacked label { + display: block; + float: none; + width: auto; + font-weight: bold; + text-align: left; + line-height: 20px; + padding-top: 0; +} +.form-stacked .clearfix { + margin-bottom: 9px; +} +.form-stacked .clearfix div.input { + margin-left: 0; +} +.form-stacked .inputs-list { + margin-bottom: 0; +} +.form-stacked .inputs-list li { + padding-top: 0; +} +.form-stacked .inputs-list li label { + font-weight: normal; + padding-top: 0; +} +.form-stacked div.clearfix.error { + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + margin-top: 0; + margin-left: -10px; +} +.form-stacked .actions { + margin-left: -20px; + padding-left: 20px; +} +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +table { + width: 100%; + margin-bottom: 18px; + padding: 0; + font-size: 13px; + border-collapse: collapse; +} +table th, table td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; +} +table th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; +} +table td { + vertical-align: top; + border-top: 1px solid #ddd; +} +table tbody th { + border-top: 1px solid #ddd; + vertical-align: top; +} +.condensed-table th, .condensed-table td { + padding: 5px 5px 4px; +} +.bordered-table { + border: 1px solid #ddd; + border-collapse: separate; + *border-collapse: collapse; + /* IE7, collapse table to remove spacing */ + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.bordered-table th + th, .bordered-table td + td, .bordered-table th + td { + border-left: 1px solid #ddd; +} +.bordered-table thead tr:first-child th:first-child, .bordered-table tbody tr:first-child td:first-child { + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; + border-radius: 4px 0 0 0; +} +.bordered-table thead tr:first-child th:last-child, .bordered-table tbody tr:first-child td:last-child { + -webkit-border-radius: 0 4px 0 0; + -moz-border-radius: 0 4px 0 0; + border-radius: 0 4px 0 0; +} +.bordered-table tbody tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; +} +.bordered-table tbody tr:last-child td:last-child { + -webkit-border-radius: 0 0 4px 0; + -moz-border-radius: 0 0 4px 0; + border-radius: 0 0 4px 0; +} +table .span1 { + width: 20px; +} +table .span2 { + width: 60px; +} +table .span3 { + width: 100px; +} +table .span4 { + width: 140px; +} +table .span5 { + width: 180px; +} +table .span6 { + width: 220px; +} +table .span7 { + width: 260px; +} +table .span8 { + width: 300px; +} +table .span9 { + width: 340px; +} +table .span10 { + width: 380px; +} +table .span11 { + width: 420px; +} +table .span12 { + width: 460px; +} +table .span13 { + width: 500px; +} +table .span14 { + width: 540px; +} +table .span15 { + width: 580px; +} +table .span16 { + width: 620px; +} +.zebra-striped tbody tr:nth-child(odd) td, .zebra-striped tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} +.zebra-striped tbody tr:hover td, .zebra-striped tbody tr:hover th { + background-color: #f5f5f5; +} +table .header { + cursor: pointer; +} +table .header:after { + content: ""; + float: right; + margin-top: 7px; + border-width: 0 4px 4px; + border-style: solid; + border-color: #000 transparent; + visibility: hidden; +} +table .headerSortUp, table .headerSortDown { + background-color: rgba(141, 192, 219, 0.25); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); +} +table .header:hover:after { + visibility: visible; +} +table .headerSortDown:after, table .headerSortDown:hover:after { + visibility: visible; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .headerSortUp:after { + border-bottom: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #000; + visibility: visible; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .blue { + color: #049cdb; + border-bottom-color: #049cdb; +} +table .headerSortUp.blue, table .headerSortDown.blue { + background-color: #ade6fe; +} +table .green { + color: #46a546; + border-bottom-color: #46a546; +} +table .headerSortUp.green, table .headerSortDown.green { + background-color: #cdeacd; +} +table .red { + color: #9d261d; + border-bottom-color: #9d261d; +} +table .headerSortUp.red, table .headerSortDown.red { + background-color: #f4c8c5; +} +table .yellow { + color: #ffc40d; + border-bottom-color: #ffc40d; +} +table .headerSortUp.yellow, table .headerSortDown.yellow { + background-color: #fff6d9; +} +table .orange { + color: #f89406; + border-bottom-color: #f89406; +} +table .headerSortUp.orange, table .headerSortDown.orange { + background-color: #fee9cc; +} +table .purple { + color: #7a43b6; + border-bottom-color: #7a43b6; +} +table .headerSortUp.purple, table .headerSortDown.purple { + background-color: #e2d5f0; +} +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +.topbar { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; +} +.topbar a { + color: #bfbfbf; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active > a { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); + color: #ffffff; + text-decoration: none; +} +.topbar h3 { + position: relative; +} +.topbar h3 a, .topbar .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + color: #ffffff; + font-size: 20px; + font-weight: 200; + line-height: 1; +} +.topbar p { + margin: 0; + line-height: 40px; +} +.topbar p a:hover { + background-color: transparent; + color: #ffffff; +} +.topbar form { + float: left; + margin: 5px 0 0 0; + position: relative; + filter: alpha(opacity=100); + -khtml-opacity: 1; + -moz-opacity: 1; + opacity: 1; +} +.topbar form.pull-right { + float: right; +} +.topbar input { + background-color: #444; + background-color: rgba(255, 255, 255, 0.3); + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: normal; + font-weight: 13px; + line-height: 1; + padding: 4px 9px; + color: #ffffff; + color: rgba(255, 255, 255, 0.75); + border: 1px solid #111; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} +.topbar input:-moz-placeholder { + color: #e6e6e6; +} +.topbar input::-webkit-input-placeholder { + color: #e6e6e6; +} +.topbar input:hover { + background-color: #bfbfbf; + background-color: rgba(255, 255, 255, 0.5); + color: #ffffff; +} +.topbar input:focus, .topbar input.focused { + outline: 0; + background-color: #ffffff; + color: #404040; + text-shadow: 0 1px 0 #ffffff; + border: 0; + padding: 5px 10px; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} +.topbar-inner, .topbar .fill { + background-color: #222; + background-color: #222222; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222)); + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} +.topbar div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 0; + position: relative; + left: 0; +} +.topbar div > ul > li, .nav > li { + display: block; + float: left; +} +.topbar div > ul a, .nav a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; +} +.topbar div > ul a:hover, .nav a:hover { + color: #ffffff; + text-decoration: none; +} +.topbar div > ul .active > a, .nav .active > a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.5); +} +.topbar div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} +.topbar div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +.topbar div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} +.topbar div > ul a.menu:hover, +.nav a.menu:hover, +.topbar div > ul li.open .menu, +.nav li.open .menu, +.topbar div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +.topbar div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown, +.nav .menu-dropdown, +.topbar div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #333; +} +.topbar div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +.topbar div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +.topbar div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +.topbar div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #ffffff; +} +.topbar div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +.topbar div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +.topbar div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +.topbar div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +.topbar div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #999; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} +.topbar div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +.topbar div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #191919; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919)); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(top, #292929, #191919); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0); + color: #ffffff; +} +.topbar div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +.topbar div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #ffffff; +} +.topbar div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +.topbar div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} +.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a { + padding: 4px 15px; +} +li.menu, .dropdown { + position: relative; +} +a.menu:after, .dropdown-toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #ffffff; + filter: alpha(opacity=50); + -khtml-opacity: 0.5; + -moz-opacity: 0.5; + opacity: 0.5; +} +.menu-dropdown, .dropdown-menu { + background-color: #ffffff; + float: left; + display: none; + position: absolute; + top: 40px; + z-index: 900; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-color: #999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: none; +} +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #ffffff; +} +.topbar .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #808080; + text-shadow: 0 1px 0 #ffffff; +} +.topbar .dropdown-menu a:hover, +.dropdown-menu a:hover, +.topbar .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #dddddd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd)); + background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); + background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); + background-image: -o-linear-gradient(top, #eeeeee, #dddddd); + background-image: linear-gradient(top, #eeeeee, #dddddd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0); + color: #404040; + text-decoration: none; + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); +} +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + display: block; +} +.tabs, .pills { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} +.tabs:before, +.pills:before, +.tabs:after, +.pills:after { + display: table; + content: ""; + zoom: 1; +} +.tabs:after, .pills:after { + clear: both; +} +.tabs > li, .pills > li { + float: left; +} +.tabs > li > a, .pills > li > a { + display: block; +} +.tabs { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} +.tabs > li { + position: relative; + margin-bottom: -1px; +} +.tabs > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.tabs > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} +.tabs .active > a, .tabs .active > a:hover { + color: #808080; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.tabs .menu-dropdown, .tabs .dropdown-menu { + top: 35px; + border-width: 1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} +.tabs a.menu:after, .tabs .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle { + border-color: #999; +} +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} +.pills a { + margin: 5px 3px 5px 0; + padding: 0 15px; + line-height: 30px; + text-shadow: 0 1px 1px #ffffff; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.pills a:hover { + color: #ffffff; + text-decoration: none; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #00438a; +} +.pills .active a { + color: #ffffff; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #0069d6; +} +.pills-vertical > li { + float: none; +} +.tab-content > .tab-pane, +.pill-content > .pill-pane, +.tab-content > div, +.pill-content > div { + display: none; +} +.tab-content > .active, .pill-content > .active { + display: block; +} +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5)); + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} +.breadcrumb li { + display: inline; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} +.breadcrumb .active a { + color: #404040; +} +.hero-unit { + background-color: #f5f5f5; + margin-bottom: 30px; + padding: 60px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; +} +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; +} +footer { + margin-top: 17px; + padding-top: 17px; + border-top: 1px solid #eee; +} +.page-header { + margin-bottom: 17px; + border-bottom: 1px solid #ddd; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.page-header h1 { + margin-bottom: 8px; +} +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #ffffff; +} +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.success, .alert-message.success { + background-color: #57a957; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(top, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.info, .alert-message.info { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(top, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-transition: 0.1s linear all; + -moz-transition: 0.1s linear all; + -ms-transition: 0.1s linear all; + -o-transition: 0.1s linear all; + transition: 0.1s linear all; +} +.btn:hover { + background-position: 0 -15px; + color: #333; + text-decoration: none; +} +.btn:focus { + outline: 1px dotted #666; +} +.btn.primary { + color: #ffffff; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); + background-image: -moz-linear-gradient(top, #049cdb, #0064cd); + background-image: -ms-linear-gradient(top, #049cdb, #0064cd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); + background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); + background-image: -o-linear-gradient(top, #049cdb, #0064cd); + background-image: linear-gradient(top, #049cdb, #0064cd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.active, .btn:active { + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.btn.disabled { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn[disabled] { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} +:root .alert-message, :root .btn { + border-radius: 0 \0; +} +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +.close { + float: right; + color: #000000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + text-shadow: 0 1px 0 #ffffff; + filter: alpha(opacity=25); + -khtml-opacity: 0.25; + -moz-opacity: 0.25; + opacity: 0.25; +} +.close:hover { + color: #000000; + text-decoration: none; + filter: alpha(opacity=40); + -khtml-opacity: 0.4; + -moz-opacity: 0.4; + opacity: 0.4; +} +.alert-message { + position: relative; + padding: 7px 15px; + margin-bottom: 18px; + color: #404040; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); + background-image: -moz-linear-gradient(top, #fceec1, #eedc94); + background-image: -ms-linear-gradient(top, #fceec1, #eedc94); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); + background-image: -o-linear-gradient(top, #fceec1, #eedc94); + background-image: linear-gradient(top, #fceec1, #eedc94); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #eedc94 #eedc94 #e4c652; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} +.alert-message a { + font-weight: bold; + color: #404040; +} +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #ffffff; +} +.alert-message h5 { + line-height: 18px; +} +.alert-message p { + margin-bottom: 0; +} +.alert-message div { + margin-top: 5px; + margin-bottom: 2px; + line-height: 28px; +} +.alert-message .btn { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message.block-message { + background-image: none; + background-color: #fdf5d9; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + padding: 14px; + border-color: #fceec1; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.alert-message.block-message ul, .alert-message.block-message p { + margin-right: 30px; +} +.alert-message.block-message ul { + margin-bottom: 0; +} +.alert-message.block-message li { + color: #404040; +} +.alert-message.block-message .alert-actions { + margin-top: 5px; +} +.alert-message.block-message.error, .alert-message.block-message.success, .alert-message.block-message.info { + color: #404040; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.alert-message.block-message.error { + background-color: #fddfde; + border-color: #fbc7c6; +} +.alert-message.block-message.success { + background-color: #d1eed1; + border-color: #bfe7bf; +} +.alert-message.block-message.info { + background-color: #ddf4fb; + border-color: #c6edf9; +} +.alert-message.block-message.danger p a, +.alert-message.block-message.error p a, +.alert-message.block-message.success p a, +.alert-message.block-message.info p a { + color: #404040; +} +.pagination { + height: 36px; + margin: 18px 0; +} +.pagination ul { + float: left; + margin: 0; + border: 1px solid #ddd; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination li { + display: inline; +} +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + border-right: 1px solid; + border-right-color: #ddd; + border-right-color: rgba(0, 0, 0, 0.15); + *border-right-color: #ddd; + /* IE6-7 */ + + text-decoration: none; +} +.pagination a:hover, .pagination .active a { + background-color: #c7eefe; +} +.pagination .disabled a, .pagination .disabled a:hover { + background-color: transparent; + color: #bfbfbf; +} +.pagination .next a { + border: 0; +} +.well { + background-color: #f5f5f5; + margin-bottom: 20px; + padding: 19px; + min-height: 20px; + border: 1px solid #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.modal-backdrop { + background-color: #000000; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, .modal-backdrop.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 11000; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.modal .close { + margin-top: 7px; +} +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -ms-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 50%; +} +.modal-header { + border-bottom: 1px solid #eee; + padding: 5px 15px; +} +.modal-body { + padding: 15px; +} +.modal-body form { + margin-bottom: 0; +} +.modal-footer { + background-color: #f5f5f5; + padding: 14px 15px 15px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + zoom: 1; + margin-bottom: 0; +} +.modal-footer:before, .modal-footer:after { + display: table; + content: ""; + zoom: 1; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn { + float: right; + margin-left: 5px; +} +.modal .popover, .modal .twipsy { + z-index: 12000; +} +.twipsy { + display: block; + position: absolute; + visibility: visible; + padding: 5px; + font-size: 11px; + z-index: 1000; + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.above .twipsy-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.twipsy.left .twipsy-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.twipsy.below .twipsy-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.twipsy.right .twipsy-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.twipsy-inner { + padding: 3px 8px; + background-color: #000000; + color: white; + text-align: center; + max-width: 200px; + text-decoration: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.twipsy-arrow { + position: absolute; + width: 0; + height: 0; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1000; + padding: 5px; + display: none; +} +.popover.above .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.popover.below .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} +.popover .inner { + background: #000000; + background: rgba(0, 0, 0, 0.8); + padding: 3px; + overflow: hidden; + width: 280px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} +.popover .title { + background-color: #f5f5f5; + padding: 9px 15px; + line-height: 1; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + border-bottom: 1px solid #eee; +} +.popover .content { + background-color: #ffffff; + padding: 14px; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.popover .content p, .popover .content ul, .popover .content ol { + margin-bottom: 0; +} +.fade { + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + opacity: 0; +} +.fade.in { + opacity: 1; +} +.label { + padding: 1px 3px 2px; + font-size: 9.75px; + font-weight: bold; + color: #ffffff; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.label.important { + background-color: #c43c35; +} +.label.warning { + background-color: #f89406; +} +.label.success { + background-color: #46a546; +} +.label.notice { + background-color: #62cffc; +} +.media-grid { + margin-left: -20px; + margin-bottom: 0; + zoom: 1; +} +.media-grid:before, .media-grid:after { + display: table; + content: ""; + zoom: 1; +} +.media-grid:after { + clear: both; +} +.media-grid li { + display: inline; +} +.media-grid a { + float: left; + padding: 4px; + margin: 0 0 18px 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} +.media-grid a img { + display: block; +} +.media-grid a:hover { + border-color: #0069d6; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} diff --git a/_themes/bootstrap/theme.conf b/_themes/bootstrap/theme.conf new file mode 100644 index 00000000000..64f9efd5698 --- /dev/null +++ b/_themes/bootstrap/theme.conf @@ -0,0 +1,5 @@ +# Twitter Bootstrap Theme +[theme] +inherit = basic +stylesheet = basic.css +pygments_style = tango diff --git a/conf.py b/conf.py index 95a65dc7075..dbbfc48788a 100644 --- a/conf.py +++ b/conf.py @@ -22,6 +22,7 @@ import os #sys.path.append(os.path.abspath('some/directory')) sys.path.insert(0, os.path.join('ansible', 'lib')) +sys.path.append(os.path.abspath('_themes')) from ansible import __version__, __author__ @@ -98,6 +99,10 @@ pygments_style = 'sphinx' # Options for HTML output # ----------------------- +html_theme_path = ['_themes'] +html_theme = 'bootstrap' +html_short_title = 'Ansible' + # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. diff --git a/html/YAMLScripts.html b/html/YAMLScripts.html index ec72607e3ca..85840f122a4 100644 --- a/html/YAMLScripts.html +++ b/html/YAMLScripts.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ YAML Format — Ansible v0.0.1 documentation + + + + - - + + + + - - -
    -
    -
    -
    + + +
    +

    YAML Format

    This page provides a basic overview of correct YAML syntax, which is how Ansible @@ -125,66 +224,16 @@ languages:

    -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Ansible Modules

    -

    Next topic

    -

    Playbooks: Ansible for Deployment, Configuration Management, and Orchestration

    -

    This Page

    - - - -
    -
    -
    -
    - - + \ No newline at end of file diff --git a/html/_sources/patterns.txt b/html/_sources/patterns.txt index 8ef369b225c..5b76289378a 100644 --- a/html/_sources/patterns.txt +++ b/html/_sources/patterns.txt @@ -1,3 +1,5 @@ +.. _patterns: + The Inventory File, Patterns, and Groups ======================================== @@ -43,16 +45,17 @@ It is also possible to address specific hosts:: one.example.com:two.example.com -The following patterns address one or more groups, which are denoted with the bracket -headers in the inventory file:: +The following patterns address one or more groups, which are denoted +with the bracket headers in the inventory file:: webservers webservers:dbservers -Individual hosts, but not groups, can also be referenced using wildcards: +Individual hosts, but not groups, can also be referenced using +wildcards:: - *.example.com - *.com + *.example.com + *.com It's also ok to mix wildcard patterns and groups at the same time:: diff --git a/html/_sources/playbooks.txt b/html/_sources/playbooks.txt index 890768c5894..35b47362718 100644 --- a/html/_sources/playbooks.txt +++ b/html/_sources/playbooks.txt @@ -1,5 +1,5 @@ -Playbooks: Ansible for Deployment, Configuration Management, and Orchestration -============================================================================== +Playbooks +========= .. seealso:: @@ -11,21 +11,28 @@ Playbooks: Ansible for Deployment, Configuration Management, and Orchestration Learn about how to select hosts -Playbooks are a completely different way to use ansible and are particularly awesome. +Playbooks are a completely different way to use ansible and are +particularly awesome. -They are the basis for a really simple configuration management and multi-machine deployment system, unlike any that already exist, and one that is very well suited to deploying complex applications. +They are the basis for a really simple configuration management and +multi-machine deployment system, unlike any that already exist, and +one that is very well suited to deploying complex applications. -While you might run the main /usr/bin/ansible program for ad-hoc tasks, playbooks are more likely to be kept in source control and used to push out your configuration or assure the configurations of your remote systems are in spec. +While you might run the main ``/usr/bin/ansible`` program for ad-hoc +tasks, playbooks are more likely to be kept in source control and used +to push out your configuration or assure the configurations of your +remote systems are in spec. Playbook Example ```````````````` -Playbooks are expressed in YAML format and have a minimum of syntax. Each playbook is composed -of one or more 'plays' in a list. By composing a playbook of multiple 'plays', it is possible -to orchestrate multi-machine deployments, running certain steps on all machines in -the webservers group, then certain steps on the database server group, then more commands -back on the webservers group, etc:: +Playbooks are expressed in YAML format and have a minimum of syntax. +Each playbook is composed of one or more 'plays' in a list. By +composing a playbook of multiple 'plays', it is possible to +orchestrate multi-machine deployments, running certain steps on all +machines in the webservers group, then certain steps on the database +server group, then more commands back on the webservers group, etc:: --- - hosts: webservers @@ -47,21 +54,25 @@ back on the webservers group, etc:: Hosts line `````````` -The hosts line is a list of one or more groups or host patterns, seperated by colons, asdescribed in the 'patterns' documentation. This is just like the first parameter to /usr/bin/ansible. +The hosts line is a list of one or more groups or host patterns, +seperated by colons, asdescribed in the :ref:`patterns` documentation. +This is just like the first parameter to ``/usr/bin/ansible``. Vars section ```````````` -A list of variables and values that can be used in the plays. These can be used in templates -or 'action' lines and are dereferenced using ```jinja2``` syntax like this:: +A list of variables and values that can be used in the plays. These +can be used in templates or 'action' lines and are dereferenced using +```jinja2``` syntax like this:: {{ varname }} -Further, if there are discovered variables about the system (say, if facter or ohai were -installed) these variables bubble up back into the playbook, and can be used on each -system just like explicitly set variables. Facter variables are prefixed with 'facter_' -and Ohai variables are prefixed with 'ohai_'. So for instance, if I wanted to write the -hostname into the /etc/motd file, I could say:: +Further, if there are discovered variables about the system (say, if +facter or ohai were installed) these variables bubble up back into the +playbook, and can be used on each system just like explicitly set +variables. Facter variables are prefixed with ``facter_`` and Ohai +variables are prefixed with ``ohai_``. So for instance, if I wanted +to write the hostname into the /etc/motd file, I could say:: - name: write the motd - action: template src=/srv/templates/motd.j2 dest=/etc/motd @@ -75,27 +86,32 @@ But we're getting ahead of ourselves. Let's talk about tasks. Tasks list `````````` -Each play contains a list of tasks. Tasks are executed in order, one at a time, against -all machines matched by the play's host pattern, before moving on to the next task. +Each play contains a list of tasks. Tasks are executed in order, one +at a time, against all machines matched by the play's host pattern, +before moving on to the next task. -Hosts with failed tasks are taken out of the rotation for the entire playbook. If things fail, -simply correct the playbook file and rerun. +Hosts with failed tasks are taken out of the rotation for the entire +playbook. If things fail, simply correct the playbook file and rerun. -Modules other than command are idempotent, meaning if you run them again, they will make the -changes they are told to make to bring the system to the desired state. +Modules other than command are idempotent, meaning if you run them +again, they will make the changes they are told to make to bring the +system to the desired state. Task name and action ````````````````````` -Every task must have a name, which is included in the output from running the playbook. +Every task must have a name, which is included in the output from +running the playbook. -The action line is the name of an ansible module followed by parameters. Usually these -are expressed in key=value form, except for the command module, which looks just like a Linux/Unix -command line. See the module documentation for more info. +The action line is the name of an ansible module followed by +parameters. Usually these are expressed in ``key=value`` form, except +for the command module, which looks just like a Linux/Unix command +line. See the module documentation for more info. -Variables, as mentioned above, can be used in action lines. So if, hypothetically, you wanted -to make a directory on each system named after the hostname ... yeah, that's I know silly ... you could -do it like so:: +Variables, as mentioned above, can be used in action lines. So if, +hypothetically, you wanted to make a directory on each system named +after the hostname ... yeah, that's I know silly ... you could do it +like so:: - name: make a directory - action: mkdir /tmp/{{ facter_hostname }} @@ -103,44 +119,49 @@ do it like so:: Notify statements ````````````````` -Nearly all modules are written to be 'idempotent' and can signal when they have affected a change -on the remote system. If a notify statement is used, the named handler will be run against -each system where a change was effected, but NOT on systems where no change occurred. This happens -after all of the tasks are run. For example, if notifying Apache and potentially replacing lots of -configuration files, you could have Apache restart just once, at the end of a run. If you need -Apache restarted in the middle of a run, you could just make a task for it, no harm done. Notifiers -are optional. +Nearly all modules are written to be 'idempotent' and can signal when +they have affected a change on the remote system. If a notify +statement is used, the named handler will be run against each system +where a change was effected, but NOT on systems where no change +occurred. This happens after all of the tasks are run. For example, +if notifying Apache and potentially replacing lots of configuration +files, you could have Apache restart just once, at the end of a run. +If you need Apache restarted in the middle of a run, you could just +make a task for it, no harm done. Notifiers are optional. Handlers ```````` -Handlers are lists of tasks, not really any different from regular tasks, that are referenced -by name. Handlers are what notifiers notify. If nothing notifies a handler, it will not run. -Regardless of how many things notify a handler, it will run only once, after all of the tasks -complete in a particular play. +Handlers are lists of tasks, not really any different from regular +tasks, that are referenced by name. Handlers are what notifiers +notify. If nothing notifies a handler, it will not run. Regardless +of how many things notify a handler, it will run only once, after all +of the tasks complete in a particular play. Includes ```````` -Not all tasks have to be listed directly in the main file. An include file can contain -a list of tasks (in YAML) as well, optionally passing extra variables into the file. -Variables passed in can be deferenced like this (assume a variable named 'user'):: +Not all tasks have to be listed directly in the main file. An include +file can contain a list of tasks (in YAML) as well, optionally passing +extra variables into the file. Variables passed in can be deferenced +like this (assume a variable named 'user'):: {{ user }} -For instance, if deploying multiple wordpress instances, I could contain all of my tasks -in a wordpress.yml file, and use it like so:: +For instance, if deploying multiple wordpress instances, I could +contain all of my tasks in a wordpress.yml file, and use it like so:: - tasks: - include: wordpress.yml user=timmy - include: wordpress.yml user=alice - include: wordpress.yml user=bob -In addition to the explicitly passed in parameters, all variables from the vars section -are also available. +In addition to the explicitly passed in parameters, all variables from +the vars section are also available. -The format of an included list of tasks or handlers looks just like a flat list of tasks. Here -is an example of what base.yml might look like:: +The format of an included list of tasks or handlers looks just like a +flat list of tasks. Here is an example of what base.yml might look +like:: --- - name: no selinux @@ -150,18 +171,20 @@ is an example of what base.yml might look like:: - name: this is just to show variables work here, favcolor={{ favcolor }} action: command /bin/true -As you can see above, variables in include files work just like they do in the main file. -Including a variable in the name of a task is a contrived example, you could also -pass them to the action command line or use them inside a template file. +As you can see above, variables in include files work just like they +do in the main file. Including a variable in the name of a task is a +contrived example, you could also pass them to the action command line +or use them inside a template file. -Note that include statements are only usable from the top level playbook file. -At this time, includes can not include other includes. +Note that include statements are only usable from the top level +playbook file. At this time, includes can not include other includes. Using Includes To Assign Classes of Systems ``````````````````````````````````````````` -Include files are best used to reuse logic between playbooks. You could imagine -a playbook describing your entire infrastructure like this:: +Include files are best used to reuse logic between playbooks. You +could imagine a playbook describing your entire infrastructure like +this:: --- - hosts: atlanta-webservers @@ -181,21 +204,23 @@ a playbook describing your entire infrastructure like this:: handlers: - include: generic-handlers.yml -There is one (or more) play defined for each group of systems, and each play maps -each group includes one or more 'class definitions' telling the systems what they -are supposed to do or be. +There is one (or more) play defined for each group of systems, and +each play maps each group includes one or more 'class definitions' +telling the systems what they are supposed to do or be. -Using a common handlers file could allow one task in 'webservers' to define 'restart apache', -and it could be reused between multiple plays. +Using a common handlers file could allow one task in 'webservers' to +define 'restart apache', and it could be reused between multiple +plays. -Variables like 'database' above can be used in templates referenced from the -configuration file to generate machine specific variables. +Variables like 'database' above can be used in templates referenced +from the configuration file to generate machine specific variables. Asynchronous Actions and Polling ```````````````````````````````` (Information on this feature is pending) + Executing A Playbook ```````````````````` diff --git a/html/_static/basic.css b/html/_static/basic.css index eb22a94218a..32630d54c9f 100644 --- a/html/_static/basic.css +++ b/html/_static/basic.css @@ -79,14 +79,6 @@ div.sphinxsidebar input { font-size: 1em; } -div.sphinxsidebar input[type="text"] { - width: 170px; -} - -div.sphinxsidebar input[type="submit"] { - width: 30px; -} - img { border: 0; } @@ -244,6 +236,7 @@ img.align-center, .figure.align-center, object.align-center { } .align-center { + clear: both; text-align: center; } diff --git a/html/_static/bootstrap-dropdown.js b/html/_static/bootstrap-dropdown.js new file mode 100644 index 00000000000..fda6da597e0 --- /dev/null +++ b/html/_static/bootstrap-dropdown.js @@ -0,0 +1,55 @@ +/* ============================================================ + * bootstrap-dropdown.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#dropdown + * ============================================================ + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function( $ ){ + + "use strict" + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + $.fn.dropdown = function ( selector ) { + return this.each(function () { + $(this).delegate(selector || d, 'click', function (e) { + var li = $(this).parent('li') + , isActive = li.hasClass('open') + + clearMenus() + !isActive && li.toggleClass('open') + return false + }) + }) + } + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + var d = 'a.menu, .dropdown-toggle' + + function clearMenus() { + $(d).parent('li').removeClass('open') + } + + $(function () { + $('html').bind("click", clearMenus) + $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' ) + }) + +}( window.jQuery || window.ender ); diff --git a/html/_static/bootstrap-scrollspy.js b/html/_static/bootstrap-scrollspy.js new file mode 100644 index 00000000000..efbc4329605 --- /dev/null +++ b/html/_static/bootstrap-scrollspy.js @@ -0,0 +1,107 @@ +/* ============================================================= + * bootstrap-scrollspy.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ============================================================= + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================== */ + + +!function ( $ ) { + + "use strict" + + var $window = $(window) + + function ScrollSpy( topbar, selector ) { + var processScroll = $.proxy(this.processScroll, this) + this.$topbar = $(topbar) + this.selector = selector || 'li > a' + this.refresh() + this.$topbar.delegate(this.selector, 'click', processScroll) + $window.scroll(processScroll) + this.processScroll() + } + + ScrollSpy.prototype = { + + refresh: function () { + this.targets = this.$topbar.find(this.selector).map(function () { + var href = $(this).attr('href') + return /^#\w/.test(href) && $(href).length ? href : null + }) + + this.offsets = $.map(this.targets, function (id) { + return $(id).offset().top + }) + } + + , processScroll: function () { + var scrollTop = $window.scrollTop() + 10 + , offsets = this.offsets + , targets = this.targets + , activeTarget = this.activeTarget + , i + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activateButton( targets[i] ) + } + } + + , activateButton: function (target) { + this.activeTarget = target + + this.$topbar + .find(this.selector).parent('.active') + .removeClass('active') + + this.$topbar + .find(this.selector + '[href="' + target + '"]') + .parent('li') + .addClass('active') + } + + } + + /* SCROLLSPY PLUGIN DEFINITION + * =========================== */ + + $.fn.scrollSpy = function( options ) { + var scrollspy = this.data('scrollspy') + + if (!scrollspy) { + return this.each(function () { + $(this).data('scrollspy', new ScrollSpy( this, options )) + }) + } + + if ( options === true ) { + return scrollspy + } + + if ( typeof options == 'string' ) { + scrollspy[options]() + } + + return this + } + + $(document).ready(function () { + $('body').scrollSpy('[data-scrollspy] li > a') + }) + +}( window.jQuery || window.ender ); \ No newline at end of file diff --git a/html/_static/bootstrap-sphinx.css b/html/_static/bootstrap-sphinx.css new file mode 100644 index 00000000000..78b7be1f6f0 --- /dev/null +++ b/html/_static/bootstrap-sphinx.css @@ -0,0 +1,15 @@ +/* +* bootstrap-sphinx.css +* ~~~~~~~~~~~~~~~~~~~~ +* +* Sphinx stylesheet -- Twitter Bootstrap theme. +*/ + +body { + padding-top: 42px; +} + +div.documentwrapper { + float: left; + width: 100%; +} \ No newline at end of file diff --git a/html/_static/bootstrap.css b/html/_static/bootstrap.css new file mode 100644 index 00000000000..e5aa166089b --- /dev/null +++ b/html/_static/bootstrap.css @@ -0,0 +1,2467 @@ +/*! + * Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + * Date: Sun Nov 20 21:42:29 PST 2011 + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html, body { + margin: 0; + padding: 0; +} +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +cite, +code, +del, +dfn, +em, +img, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +dd, +dl, +dt, +li, +ol, +ul, +fieldset, +form, +label, +legend, +button, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +ol, ul { + list-style: none; +} +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted; +} +a:hover, a:active { + outline: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; +} +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; + -ms-interpolation-mode: bicubic; +} +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} +button, input { + line-height: normal; + *overflow: visible; +} +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +textarea { + overflow: auto; + vertical-align: top; +} +/* Variables.less + * Variables to customize the look and feel of Bootstrap + * ----------------------------------------------------- */ +/* Mixins.less + * Snippets of reusable CSS to develop faster and keep code readable + * ----------------------------------------------------------------- */ +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 18px; + color: #404040; +} +.container { + width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} +.container:after { + clear: both; +} +.container-fluid { + position: relative; + min-width: 940px; + padding-left: 20px; + padding-right: 20px; + zoom: 1; +} +.container-fluid:before, .container-fluid:after { + display: table; + content: ""; + zoom: 1; +} +.container-fluid:after { + clear: both; +} +.container-fluid > .sidebar { + position: absolute; + top: 0; + left: 20px; + width: 220px; +} +.container-fluid > .content { + margin-left: 240px; +} +a { + color: #0069d6; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} +a:hover { + color: #00438a; + text-decoration: underline; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.row { + zoom: 1; + margin-left: -20px; +} +.row:before, .row:after { + display: table; + content: ""; + zoom: 1; +} +.row:after { + clear: both; +} +.row > [class*="span"] { + display: inline; + float: left; + margin-left: 20px; +} +.span1 { + width: 40px; +} +.span2 { + width: 100px; +} +.span3 { + width: 160px; +} +.span4 { + width: 220px; +} +.span5 { + width: 280px; +} +.span6 { + width: 340px; +} +.span7 { + width: 400px; +} +.span8 { + width: 460px; +} +.span9 { + width: 520px; +} +.span10 { + width: 580px; +} +.span11 { + width: 640px; +} +.span12 { + width: 700px; +} +.span13 { + width: 760px; +} +.span14 { + width: 820px; +} +.span15 { + width: 880px; +} +.span16 { + width: 940px; +} +.span17 { + width: 1000px; +} +.span18 { + width: 1060px; +} +.span19 { + width: 1120px; +} +.span20 { + width: 1180px; +} +.span21 { + width: 1240px; +} +.span22 { + width: 1300px; +} +.span23 { + width: 1360px; +} +.span24 { + width: 1420px; +} +.row > .offset1 { + margin-left: 80px; +} +.row > .offset2 { + margin-left: 140px; +} +.row > .offset3 { + margin-left: 200px; +} +.row > .offset4 { + margin-left: 260px; +} +.row > .offset5 { + margin-left: 320px; +} +.row > .offset6 { + margin-left: 380px; +} +.row > .offset7 { + margin-left: 440px; +} +.row > .offset8 { + margin-left: 500px; +} +.row > .offset9 { + margin-left: 560px; +} +.row > .offset10 { + margin-left: 620px; +} +.row > .offset11 { + margin-left: 680px; +} +.row > .offset12 { + margin-left: 740px; +} +.span-one-third { + width: 300px; +} +.span-two-thirds { + width: 620px; +} +.row > .offset-one-third { + margin-left: 340px; +} +.row > .offset-two-thirds { + margin-left: 660px; +} +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p { + font-size: 13px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} +p small { + font-size: 11px; + color: #bfbfbf; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; + color: #404040; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} +h1 small { + font-size: 18px; +} +h2 { + font-size: 24px; + line-height: 36px; +} +h2 small { + font-size: 14px; +} +h3, +h4, +h5, +h6 { + line-height: 36px; +} +h3 { + font-size: 18px; +} +h3 small { + font-size: 14px; +} +h4 { + font-size: 16px; +} +h4 small { + font-size: 12px; +} +h5 { + font-size: 14px; +} +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} +ul, ol { + margin: 0 0 18px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +ul { + list-style: disc; +} +ol { + list-style: decimal; +} +li { + line-height: 18px; + color: #808080; +} +ul.unstyled { + list-style: none; + margin-left: 0; +} +dl { + margin-bottom: 18px; +} +dl dt, dl dd { + line-height: 18px; +} +dl dt { + font-weight: bold; +} +dl dd { + margin-left: 9px; +} +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} +strong { + font-style: inherit; + font-weight: bold; +} +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} +.muted { + color: #bfbfbf; +} +blockquote { + margin-bottom: 18px; + border-left: 5px solid #eee; + padding-left: 15px; +} +blockquote p { + font-size: 14px; + font-weight: 300; + line-height: 18px; + margin-bottom: 0; +} +blockquote small { + display: block; + font-size: 12px; + font-weight: 300; + line-height: 18px; + color: #bfbfbf; +} +blockquote small:before { + content: '\2014 \00A0'; +} +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} +fieldset { + margin-bottom: 18px; + padding-top: 18px; +} +fieldset legend { + display: block; + padding-left: 150px; + font-size: 19.5px; + line-height: 1; + color: #404040; + *padding: 0 0 5px 145px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .clearfix { + margin-bottom: 18px; + zoom: 1; +} +form .clearfix:before, form .clearfix:after { + display: table; + content: ""; + zoom: 1; +} +form .clearfix:after { + clear: both; +} +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: normal; +} +label { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 130px; + text-align: right; + color: #404040; +} +form .input { + margin-left: 150px; +} +input[type=checkbox], input[type=radio] { + cursor: pointer; +} +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: 18px; + padding: 4px; + font-size: 13px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +select { + padding: initial; +} +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} +input[type=file] { + background-color: #ffffff; + padding: initial; + border: initial; + line-height: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} +select, input[type=file] { + height: 27px; + *height: auto; + line-height: 27px; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + +} +select[multiple] { + height: inherit; + background-color: #ffffff; +} +textarea { + height: auto; +} +.uneditable-input { + background-color: #ffffff; + display: block; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +:-moz-placeholder { + color: #bfbfbf; +} +::-webkit-input-placeholder { + color: #bfbfbf; +} +input, textarea { + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); +} +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 1px dotted #666; +} +form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline { + color: #b94a48; +} +form .clearfix.error input, form .clearfix.error textarea { + color: #b94a48; + border-color: #ee5f5b; +} +form .clearfix.error input:focus, form .clearfix.error textarea:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} +form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline { + color: #c09853; +} +form .clearfix.warning input, form .clearfix.warning textarea { + color: #c09853; + border-color: #ccae64; +} +form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { + border-color: #be9a3f; + -webkit-box-shadow: 0 0 6px #e5d6b1; + -moz-box-shadow: 0 0 6px #e5d6b1; + box-shadow: 0 0 6px #e5d6b1; +} +form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} +form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline { + color: #468847; +} +form .clearfix.success input, form .clearfix.success textarea { + color: #468847; + border-color: #57a957; +} +form .clearfix.success input:focus, form .clearfix.success textarea:focus { + border-color: #458845; + -webkit-box-shadow: 0 0 6px #9acc9a; + -moz-box-shadow: 0 0 6px #9acc9a; + box-shadow: 0 0 6px #9acc9a; +} +form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} +.input-mini, +input.mini, +textarea.mini, +select.mini { + width: 60px; +} +.input-small, +input.small, +textarea.small, +select.small { + width: 90px; +} +.input-medium, +input.medium, +textarea.medium, +select.medium { + width: 150px; +} +.input-large, +input.large, +textarea.large, +select.large { + width: 210px; +} +.input-xlarge, +input.xlarge, +textarea.xlarge, +select.xlarge { + width: 270px; +} +.input-xxlarge, +input.xxlarge, +textarea.xxlarge, +select.xxlarge { + width: 530px; +} +textarea.xxlarge { + overflow-y: auto; +} +input.span1, textarea.span1 { + display: inline-block; + float: none; + width: 30px; + margin-left: 0; +} +input.span2, textarea.span2 { + display: inline-block; + float: none; + width: 90px; + margin-left: 0; +} +input.span3, textarea.span3 { + display: inline-block; + float: none; + width: 150px; + margin-left: 0; +} +input.span4, textarea.span4 { + display: inline-block; + float: none; + width: 210px; + margin-left: 0; +} +input.span5, textarea.span5 { + display: inline-block; + float: none; + width: 270px; + margin-left: 0; +} +input.span6, textarea.span6 { + display: inline-block; + float: none; + width: 330px; + margin-left: 0; +} +input.span7, textarea.span7 { + display: inline-block; + float: none; + width: 390px; + margin-left: 0; +} +input.span8, textarea.span8 { + display: inline-block; + float: none; + width: 450px; + margin-left: 0; +} +input.span9, textarea.span9 { + display: inline-block; + float: none; + width: 510px; + margin-left: 0; +} +input.span10, textarea.span10 { + display: inline-block; + float: none; + width: 570px; + margin-left: 0; +} +input.span11, textarea.span11 { + display: inline-block; + float: none; + width: 630px; + margin-left: 0; +} +input.span12, textarea.span12 { + display: inline-block; + float: none; + width: 690px; + margin-left: 0; +} +input.span13, textarea.span13 { + display: inline-block; + float: none; + width: 750px; + margin-left: 0; +} +input.span14, textarea.span14 { + display: inline-block; + float: none; + width: 810px; + margin-left: 0; +} +input.span15, textarea.span15 { + display: inline-block; + float: none; + width: 870px; + margin-left: 0; +} +input.span16, textarea.span16 { + display: inline-block; + float: none; + width: 930px; + margin-left: 0; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; + cursor: not-allowed; +} +.actions { + background: #f5f5f5; + margin-top: 18px; + margin-bottom: 18px; + padding: 17px 20px 18px 150px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +.actions .secondary-action { + float: right; +} +.actions .secondary-action a { + line-height: 30px; +} +.actions .secondary-action a:hover { + text-decoration: underline; +} +.help-inline, .help-block { + font-size: 13px; + line-height: 18px; + color: #bfbfbf; +} +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} +.help-block { + display: block; + max-width: 600px; +} +.inline-inputs { + color: #808080; +} +.inline-inputs span { + padding: 0 2px 0 1px; +} +.input-prepend input, .input-append input { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-prepend .add-on, .input-append .add-on { + position: relative; + background: #f5f5f5; + border: 1px solid #ccc; + z-index: 2; + float: left; + display: block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 4px 4px 5px; + margin-right: -1px; + font-weight: normal; + line-height: 18px; + color: #bfbfbf; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-prepend .active, .input-append .active { + background: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on { + *margin-top: 1px; + /* IE6-7 */ + +} +.input-append input { + float: left; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-append .add-on { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-right: 0; + margin-left: -1px; +} +.inputs-list { + margin: 0 0 5px; + width: 100%; +} +.inputs-list li { + display: block; + padding: 0; + width: 100%; +} +.inputs-list label { + display: block; + float: none; + width: auto; + padding: 0; + margin-left: 20px; + line-height: 18px; + text-align: left; + white-space: normal; +} +.inputs-list label strong { + color: #808080; +} +.inputs-list label small { + font-size: 11px; + font-weight: normal; +} +.inputs-list .inputs-list { + margin-left: 25px; + margin-bottom: 10px; + padding-top: 0; +} +.inputs-list:first-child { + padding-top: 6px; +} +.inputs-list li + li { + padding-top: 2px; +} +.inputs-list input[type=radio], .inputs-list input[type=checkbox] { + margin-bottom: 0; + margin-left: -20px; + float: left; +} +.form-stacked { + padding-left: 20px; +} +.form-stacked fieldset { + padding-top: 9px; +} +.form-stacked legend { + padding-left: 0; +} +.form-stacked label { + display: block; + float: none; + width: auto; + font-weight: bold; + text-align: left; + line-height: 20px; + padding-top: 0; +} +.form-stacked .clearfix { + margin-bottom: 9px; +} +.form-stacked .clearfix div.input { + margin-left: 0; +} +.form-stacked .inputs-list { + margin-bottom: 0; +} +.form-stacked .inputs-list li { + padding-top: 0; +} +.form-stacked .inputs-list li label { + font-weight: normal; + padding-top: 0; +} +.form-stacked div.clearfix.error { + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + margin-top: 0; + margin-left: -10px; +} +.form-stacked .actions { + margin-left: -20px; + padding-left: 20px; +} +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +table { + width: 100%; + margin-bottom: 18px; + padding: 0; + font-size: 13px; + border-collapse: collapse; +} +table th, table td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; +} +table th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; +} +table td { + vertical-align: top; + border-top: 1px solid #ddd; +} +table tbody th { + border-top: 1px solid #ddd; + vertical-align: top; +} +.condensed-table th, .condensed-table td { + padding: 5px 5px 4px; +} +.bordered-table { + border: 1px solid #ddd; + border-collapse: separate; + *border-collapse: collapse; + /* IE7, collapse table to remove spacing */ + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.bordered-table th + th, .bordered-table td + td, .bordered-table th + td { + border-left: 1px solid #ddd; +} +.bordered-table thead tr:first-child th:first-child, .bordered-table tbody tr:first-child td:first-child { + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; + border-radius: 4px 0 0 0; +} +.bordered-table thead tr:first-child th:last-child, .bordered-table tbody tr:first-child td:last-child { + -webkit-border-radius: 0 4px 0 0; + -moz-border-radius: 0 4px 0 0; + border-radius: 0 4px 0 0; +} +.bordered-table tbody tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; +} +.bordered-table tbody tr:last-child td:last-child { + -webkit-border-radius: 0 0 4px 0; + -moz-border-radius: 0 0 4px 0; + border-radius: 0 0 4px 0; +} +table .span1 { + width: 20px; +} +table .span2 { + width: 60px; +} +table .span3 { + width: 100px; +} +table .span4 { + width: 140px; +} +table .span5 { + width: 180px; +} +table .span6 { + width: 220px; +} +table .span7 { + width: 260px; +} +table .span8 { + width: 300px; +} +table .span9 { + width: 340px; +} +table .span10 { + width: 380px; +} +table .span11 { + width: 420px; +} +table .span12 { + width: 460px; +} +table .span13 { + width: 500px; +} +table .span14 { + width: 540px; +} +table .span15 { + width: 580px; +} +table .span16 { + width: 620px; +} +.zebra-striped tbody tr:nth-child(odd) td, .zebra-striped tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} +.zebra-striped tbody tr:hover td, .zebra-striped tbody tr:hover th { + background-color: #f5f5f5; +} +table .header { + cursor: pointer; +} +table .header:after { + content: ""; + float: right; + margin-top: 7px; + border-width: 0 4px 4px; + border-style: solid; + border-color: #000 transparent; + visibility: hidden; +} +table .headerSortUp, table .headerSortDown { + background-color: rgba(141, 192, 219, 0.25); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); +} +table .header:hover:after { + visibility: visible; +} +table .headerSortDown:after, table .headerSortDown:hover:after { + visibility: visible; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .headerSortUp:after { + border-bottom: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #000; + visibility: visible; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .blue { + color: #049cdb; + border-bottom-color: #049cdb; +} +table .headerSortUp.blue, table .headerSortDown.blue { + background-color: #ade6fe; +} +table .green { + color: #46a546; + border-bottom-color: #46a546; +} +table .headerSortUp.green, table .headerSortDown.green { + background-color: #cdeacd; +} +table .red { + color: #9d261d; + border-bottom-color: #9d261d; +} +table .headerSortUp.red, table .headerSortDown.red { + background-color: #f4c8c5; +} +table .yellow { + color: #ffc40d; + border-bottom-color: #ffc40d; +} +table .headerSortUp.yellow, table .headerSortDown.yellow { + background-color: #fff6d9; +} +table .orange { + color: #f89406; + border-bottom-color: #f89406; +} +table .headerSortUp.orange, table .headerSortDown.orange { + background-color: #fee9cc; +} +table .purple { + color: #7a43b6; + border-bottom-color: #7a43b6; +} +table .headerSortUp.purple, table .headerSortDown.purple { + background-color: #e2d5f0; +} +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +.topbar { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; +} +.topbar a { + color: #bfbfbf; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active > a { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); + color: #ffffff; + text-decoration: none; +} +.topbar h3 { + position: relative; +} +.topbar h3 a, .topbar .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + color: #ffffff; + font-size: 20px; + font-weight: 200; + line-height: 1; +} +.topbar p { + margin: 0; + line-height: 40px; +} +.topbar p a:hover { + background-color: transparent; + color: #ffffff; +} +.topbar form { + float: left; + margin: 5px 0 0 0; + position: relative; + filter: alpha(opacity=100); + -khtml-opacity: 1; + -moz-opacity: 1; + opacity: 1; +} +.topbar form.pull-right { + float: right; +} +.topbar input { + background-color: #444; + background-color: rgba(255, 255, 255, 0.3); + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: normal; + font-weight: 13px; + line-height: 1; + padding: 4px 9px; + color: #ffffff; + color: rgba(255, 255, 255, 0.75); + border: 1px solid #111; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} +.topbar input:-moz-placeholder { + color: #e6e6e6; +} +.topbar input::-webkit-input-placeholder { + color: #e6e6e6; +} +.topbar input:hover { + background-color: #bfbfbf; + background-color: rgba(255, 255, 255, 0.5); + color: #ffffff; +} +.topbar input:focus, .topbar input.focused { + outline: 0; + background-color: #ffffff; + color: #404040; + text-shadow: 0 1px 0 #ffffff; + border: 0; + padding: 5px 10px; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} +.topbar-inner, .topbar .fill { + background-color: #222; + background-color: #222222; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222)); + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} +.topbar div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 0; + position: relative; + left: 0; +} +.topbar div > ul > li, .nav > li { + display: block; + float: left; +} +.topbar div > ul a, .nav a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; +} +.topbar div > ul a:hover, .nav a:hover { + color: #ffffff; + text-decoration: none; +} +.topbar div > ul .active > a, .nav .active > a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.5); +} +.topbar div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} +.topbar div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +.topbar div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} +.topbar div > ul a.menu:hover, +.nav a.menu:hover, +.topbar div > ul li.open .menu, +.nav li.open .menu, +.topbar div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +.topbar div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown, +.nav .menu-dropdown, +.topbar div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #333; +} +.topbar div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +.topbar div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +.topbar div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +.topbar div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #ffffff; +} +.topbar div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +.topbar div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +.topbar div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +.topbar div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +.topbar div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #999; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} +.topbar div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +.topbar div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #191919; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919)); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(top, #292929, #191919); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0); + color: #ffffff; +} +.topbar div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +.topbar div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #ffffff; +} +.topbar div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +.topbar div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} +.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a { + padding: 4px 15px; +} +li.menu, .dropdown { + position: relative; +} +a.menu:after, .dropdown-toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #ffffff; + filter: alpha(opacity=50); + -khtml-opacity: 0.5; + -moz-opacity: 0.5; + opacity: 0.5; +} +.menu-dropdown, .dropdown-menu { + background-color: #ffffff; + float: left; + display: none; + position: absolute; + top: 40px; + z-index: 900; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-color: #999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: none; +} +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #ffffff; +} +.topbar .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #808080; + text-shadow: 0 1px 0 #ffffff; +} +.topbar .dropdown-menu a:hover, +.dropdown-menu a:hover, +.topbar .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #dddddd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd)); + background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); + background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); + background-image: -o-linear-gradient(top, #eeeeee, #dddddd); + background-image: linear-gradient(top, #eeeeee, #dddddd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0); + color: #404040; + text-decoration: none; + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); +} +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + display: block; +} +.tabs, .pills { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} +.tabs:before, +.pills:before, +.tabs:after, +.pills:after { + display: table; + content: ""; + zoom: 1; +} +.tabs:after, .pills:after { + clear: both; +} +.tabs > li, .pills > li { + float: left; +} +.tabs > li > a, .pills > li > a { + display: block; +} +.tabs { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} +.tabs > li { + position: relative; + margin-bottom: -1px; +} +.tabs > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.tabs > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} +.tabs .active > a, .tabs .active > a:hover { + color: #808080; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.tabs .menu-dropdown, .tabs .dropdown-menu { + top: 35px; + border-width: 1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} +.tabs a.menu:after, .tabs .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle { + border-color: #999; +} +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} +.pills a { + margin: 5px 3px 5px 0; + padding: 0 15px; + line-height: 30px; + text-shadow: 0 1px 1px #ffffff; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.pills a:hover { + color: #ffffff; + text-decoration: none; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #00438a; +} +.pills .active a { + color: #ffffff; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #0069d6; +} +.pills-vertical > li { + float: none; +} +.tab-content > .tab-pane, +.pill-content > .pill-pane, +.tab-content > div, +.pill-content > div { + display: none; +} +.tab-content > .active, .pill-content > .active { + display: block; +} +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5)); + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} +.breadcrumb li { + display: inline; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} +.breadcrumb .active a { + color: #404040; +} +.hero-unit { + background-color: #f5f5f5; + margin-bottom: 30px; + padding: 60px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; +} +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; +} +footer { + margin-top: 17px; + padding-top: 17px; + border-top: 1px solid #eee; +} +.page-header { + margin-bottom: 17px; + border-bottom: 1px solid #ddd; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.page-header h1 { + margin-bottom: 8px; +} +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #ffffff; +} +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.success, .alert-message.success { + background-color: #57a957; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(top, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.info, .alert-message.info { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(top, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-transition: 0.1s linear all; + -moz-transition: 0.1s linear all; + -ms-transition: 0.1s linear all; + -o-transition: 0.1s linear all; + transition: 0.1s linear all; +} +.btn:hover { + background-position: 0 -15px; + color: #333; + text-decoration: none; +} +.btn:focus { + outline: 1px dotted #666; +} +.btn.primary { + color: #ffffff; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); + background-image: -moz-linear-gradient(top, #049cdb, #0064cd); + background-image: -ms-linear-gradient(top, #049cdb, #0064cd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); + background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); + background-image: -o-linear-gradient(top, #049cdb, #0064cd); + background-image: linear-gradient(top, #049cdb, #0064cd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.active, .btn:active { + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.btn.disabled { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn[disabled] { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} +:root .alert-message, :root .btn { + border-radius: 0 \0; +} +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +.close { + float: right; + color: #000000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + text-shadow: 0 1px 0 #ffffff; + filter: alpha(opacity=25); + -khtml-opacity: 0.25; + -moz-opacity: 0.25; + opacity: 0.25; +} +.close:hover { + color: #000000; + text-decoration: none; + filter: alpha(opacity=40); + -khtml-opacity: 0.4; + -moz-opacity: 0.4; + opacity: 0.4; +} +.alert-message { + position: relative; + padding: 7px 15px; + margin-bottom: 18px; + color: #404040; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); + background-image: -moz-linear-gradient(top, #fceec1, #eedc94); + background-image: -ms-linear-gradient(top, #fceec1, #eedc94); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); + background-image: -o-linear-gradient(top, #fceec1, #eedc94); + background-image: linear-gradient(top, #fceec1, #eedc94); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #eedc94 #eedc94 #e4c652; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} +.alert-message a { + font-weight: bold; + color: #404040; +} +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #ffffff; +} +.alert-message h5 { + line-height: 18px; +} +.alert-message p { + margin-bottom: 0; +} +.alert-message div { + margin-top: 5px; + margin-bottom: 2px; + line-height: 28px; +} +.alert-message .btn { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message.block-message { + background-image: none; + background-color: #fdf5d9; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + padding: 14px; + border-color: #fceec1; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.alert-message.block-message ul, .alert-message.block-message p { + margin-right: 30px; +} +.alert-message.block-message ul { + margin-bottom: 0; +} +.alert-message.block-message li { + color: #404040; +} +.alert-message.block-message .alert-actions { + margin-top: 5px; +} +.alert-message.block-message.error, .alert-message.block-message.success, .alert-message.block-message.info { + color: #404040; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.alert-message.block-message.error { + background-color: #fddfde; + border-color: #fbc7c6; +} +.alert-message.block-message.success { + background-color: #d1eed1; + border-color: #bfe7bf; +} +.alert-message.block-message.info { + background-color: #ddf4fb; + border-color: #c6edf9; +} +.alert-message.block-message.danger p a, +.alert-message.block-message.error p a, +.alert-message.block-message.success p a, +.alert-message.block-message.info p a { + color: #404040; +} +.pagination { + height: 36px; + margin: 18px 0; +} +.pagination ul { + float: left; + margin: 0; + border: 1px solid #ddd; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination li { + display: inline; +} +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + border-right: 1px solid; + border-right-color: #ddd; + border-right-color: rgba(0, 0, 0, 0.15); + *border-right-color: #ddd; + /* IE6-7 */ + + text-decoration: none; +} +.pagination a:hover, .pagination .active a { + background-color: #c7eefe; +} +.pagination .disabled a, .pagination .disabled a:hover { + background-color: transparent; + color: #bfbfbf; +} +.pagination .next a { + border: 0; +} +.well { + background-color: #f5f5f5; + margin-bottom: 20px; + padding: 19px; + min-height: 20px; + border: 1px solid #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.modal-backdrop { + background-color: #000000; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, .modal-backdrop.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 11000; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.modal .close { + margin-top: 7px; +} +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -ms-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 50%; +} +.modal-header { + border-bottom: 1px solid #eee; + padding: 5px 15px; +} +.modal-body { + padding: 15px; +} +.modal-body form { + margin-bottom: 0; +} +.modal-footer { + background-color: #f5f5f5; + padding: 14px 15px 15px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + zoom: 1; + margin-bottom: 0; +} +.modal-footer:before, .modal-footer:after { + display: table; + content: ""; + zoom: 1; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn { + float: right; + margin-left: 5px; +} +.modal .popover, .modal .twipsy { + z-index: 12000; +} +.twipsy { + display: block; + position: absolute; + visibility: visible; + padding: 5px; + font-size: 11px; + z-index: 1000; + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.above .twipsy-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.twipsy.left .twipsy-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.twipsy.below .twipsy-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.twipsy.right .twipsy-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.twipsy-inner { + padding: 3px 8px; + background-color: #000000; + color: white; + text-align: center; + max-width: 200px; + text-decoration: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.twipsy-arrow { + position: absolute; + width: 0; + height: 0; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1000; + padding: 5px; + display: none; +} +.popover.above .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.popover.below .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} +.popover .inner { + background: #000000; + background: rgba(0, 0, 0, 0.8); + padding: 3px; + overflow: hidden; + width: 280px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} +.popover .title { + background-color: #f5f5f5; + padding: 9px 15px; + line-height: 1; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + border-bottom: 1px solid #eee; +} +.popover .content { + background-color: #ffffff; + padding: 14px; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.popover .content p, .popover .content ul, .popover .content ol { + margin-bottom: 0; +} +.fade { + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + opacity: 0; +} +.fade.in { + opacity: 1; +} +.label { + padding: 1px 3px 2px; + font-size: 9.75px; + font-weight: bold; + color: #ffffff; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.label.important { + background-color: #c43c35; +} +.label.warning { + background-color: #f89406; +} +.label.success { + background-color: #46a546; +} +.label.notice { + background-color: #62cffc; +} +.media-grid { + margin-left: -20px; + margin-bottom: 0; + zoom: 1; +} +.media-grid:before, .media-grid:after { + display: table; + content: ""; + zoom: 1; +} +.media-grid:after { + clear: both; +} +.media-grid li { + display: inline; +} +.media-grid a { + float: left; + padding: 4px; + margin: 0 0 18px 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} +.media-grid a img { + display: block; +} +.media-grid a:hover { + border-color: #0069d6; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} diff --git a/html/_static/searchtools.js b/html/_static/searchtools.js index 4a78f9130e5..dae92b5e5a6 100644 --- a/html/_static/searchtools.js +++ b/html/_static/searchtools.js @@ -363,13 +363,10 @@ var Search = { var fullname = (prefix ? prefix + '.' : '') + name; if (fullname.toLowerCase().indexOf(object) > -1) { match = objects[prefix][name]; - descr = objnames[match[1]][2] + _(', in ') + titles[match[0]]; - anchor = match[3]; - if (anchor == '') - anchor = fullname; - else if (anchor == '-') - anchor = objnames[match[1]][1] + '-' + fullname; - result = [filenames[match[0]], fullname, '#'+anchor, descr]; + descr = objnames[match[1]] + _(', in ') + titles[match[0]]; + // XXX the generated anchors are not generally correct + // XXX there may be custom prefixes + result = [filenames[match[0]], fullname, '#'+fullname, descr]; switch (match[2]) { case 1: objectResults.push(result); break; case 0: importantResults.push(result); break; @@ -492,7 +489,7 @@ var Search = { listItem.slideDown(5, function() { displayNextItem(); }); - }, "text"); + }); } else { // no source available, just display title Search.output.append(listItem); diff --git a/html/api.html b/html/api.html index cd965fc710b..cc9d879cb2e 100644 --- a/html/api.html +++ b/html/api.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Using the Python API — Ansible v0.0.1 documentation + + + + - + + + - - -
    -
    -
    -
    + + +
    +

    Using the Python API

    The Python API is very powerful, and is how the ansible CLI and ansible-playbook @@ -118,66 +217,16 @@ command line tools ansible

    -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Playbooks: Ansible for Deployment, Configuration Management, and Orchestration

    -

    Next topic

    -

    Man Pages

    -

    This Page

    - - - -
    -
    -
    -
    - - +
    +
    +

    Back to top

    +

    + © Copyright 2012 Michael DeHaan.
    + Last updated on Mar 09, 2012.
    + Created using Sphinx 1.0.7.
    +

    +
    +
    \ No newline at end of file diff --git a/html/examples.html b/html/examples.html index d60197c19f8..3ba49ece2d7 100644 --- a/html/examples.html +++ b/html/examples.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Command Line Examples — Ansible v0.0.1 documentation + + + + - + + + - - -
    -
    -
    -
    + + +
    +

    Command Line Examples

    The following examples show how to use /usr/bin/ansible for running ad-hoc tasks. @@ -58,7 +161,7 @@ using /usr/bin/ansible-playbook – the concepts port over dire

    Ansible Modules
    A list of available modules
    -
    Playbooks: Ansible for Deployment, Configuration Management, and Orchestration
    +
    Playbooks
    Alternative ways to use ansible
    @@ -116,70 +219,16 @@ commands or software upgrades only.

    -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    The Inventory File, Patterns, and Groups

    -

    Next topic

    -

    Ansible Modules

    -

    This Page

    - - - -
    -
    -
    -
    - - +
    +
    +

    Back to top

    +

    + © Copyright 2012 Michael DeHaan.
    + Last updated on Mar 09, 2012.
    + Created using Sphinx 1.0.7.
    +

    +
    +
    \ No newline at end of file diff --git a/html/genindex.html b/html/genindex.html index 64782577eee..295feee76a2 100644 --- a/html/genindex.html +++ b/html/genindex.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Index — Ansible v0.0.1 documentation + + - + + + + + - + + +
    +

    Index

    @@ -48,44 +144,16 @@
    -
    -
    - -
    -
    - - - - - -
    -
    -
    - - - + \ No newline at end of file diff --git a/html/gettingstarted.html b/html/gettingstarted.html index 679874cb4e9..86607a81062 100644 --- a/html/gettingstarted.html +++ b/html/gettingstarted.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Getting Started — Ansible v0.0.1 documentation + + + + - + + + - - -
    -
    -
    -
    + + +
    +

    Getting Started

    How to download ansible and get started using it

    @@ -56,7 +162,7 @@
    Command Line Examples
    Examples of basic commands
    -
    Playbooks: Ansible for Deployment, Configuration Management, and Orchestration
    +
    Playbooks
    Learning ansible’s configuration management language
    @@ -144,73 +250,16 @@ have a working infrastructure!

    -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Ansible

    -

    Next topic

    -

    The Inventory File, Patterns, and Groups

    -

    This Page

    - - - -
    -
    -
    -
    - - + \ No newline at end of file diff --git a/html/index.html b/html/index.html index a5cea2d6a98..de542f65209 100644 --- a/html/index.html +++ b/html/index.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Ansible — Ansible v0.0.1 documentation + + + + - + + + - - -
    -
    -
    -
    + + +
    +

    Ansible

    Ansible is a radically simple deployment, configuration, and command execution framework. @@ -131,7 +236,7 @@ short & simple, and the source will be blindingly obvious.

  • YAML Basics
  • -
  • Playbooks: Ansible for Deployment, Configuration Management, and Orchestration
  • -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Next topic

    -

    Getting Started

    -

    This Page

    - - - -
    -
    -
    -
    - - +
    +
    +

    Back to top

    +

    + © Copyright 2012 Michael DeHaan.
    + Last updated on Mar 09, 2012.
    + Created using Sphinx 1.0.7.
    +

    +
    +
    \ No newline at end of file diff --git a/html/man.html b/html/man.html index ab7a6c270f0..8dadd8e2876 100644 --- a/html/man.html +++ b/html/man.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Man Pages — Ansible v0.0.1 documentation + + + + - + + + - - -
    -
    -
    -
    + + +
    +

    Man Pages

    Ansible’s manpage lists available command line options.

    @@ -56,60 +156,16 @@
    -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Using the Python API

    -

    This Page

    - - - -
    -
    -
    -
    - - +
    +
    +

    Back to top

    +

    + © Copyright 2012 Michael DeHaan.
    + Last updated on Mar 09, 2012.
    + Created using Sphinx 1.0.7.
    +

    +
    +
    \ No newline at end of file diff --git a/html/man/ansible-modules.5.html b/html/man/ansible-modules.5.html index 83ffc3628c4..819a66675ad 100644 --- a/html/man/ansible-modules.5.html +++ b/html/man/ansible-modules.5.html @@ -1,6 +1,6 @@ -ansible-modules

    Name

    ansible-modules — stock modules shipped with ansible

    DESCRIPTION

    Ansible ships with a number of modules that can be executed directly on remote hosts or through +ansible-modules

    Name

    ansible-modules — stock modules shipped with ansible

    DESCRIPTION

    Ansible ships with a number of modules that can be executed directly on remote hosts or through ansible playbooks.

    IDEMPOTENCE

    Most modules other than command are idempotent, meaning they will seek to avoid changes unless a change needs to be made. When using ansible playbooks, these modules can trigger change events, as described in ansible-playbooks(5).

    Unless otherwise noted, all modules support change hooks.

    command

    The command module takes the command name followed by a list of arguments, space delimited. diff --git a/html/man/ansible-playbook.5.html b/html/man/ansible-playbook.5.html index 4ed86baa077..8ff59074f8c 100644 --- a/html/man/ansible-playbook.5.html +++ b/html/man/ansible-playbook.5.html @@ -1,6 +1,6 @@ -ansible-modules

    Name

    ansible-playbook — format and function of an ansible playbook file

    DESCRIPTION

    Ansible ships with ansible-playbook, a tool for running playbooks. +ansible-modules

    Name

    ansible-playbook — format and function of an ansible playbook file

    DESCRIPTION

    Ansible ships with ansible-playbook, a tool for running playbooks. Playbooks can represent frequent tasks, desired system configurations, or deployment processes.

    FORMAT

    Playbooks are written in YAML.

    EXAMPLE

    See:

    • https://github.com/mpdehaan/ansible/blob/master/examples/playbook.yml diff --git a/html/man/ansible.1.html b/html/man/ansible.1.html index 972bc24aab6..d7c0c759c0b 100644 --- a/html/man/ansible.1.html +++ b/html/man/ansible.1.html @@ -1,6 +1,6 @@ -ansible

      Name

      ansible — run a command somewhere else

      Synopsis

      ansible <host-pattern> [-f forks] [-m module_name] [-a args]

      DESCRIPTION

      Ansible is an extra-simple tool/framework/API for doing 'remote things' over +ansible

      Name

      ansible — run a command somewhere else

      Synopsis

      ansible <host-pattern> [-f forks] [-m module_name] [-a args]

      DESCRIPTION

      Ansible is an extra-simple tool/framework/API for doing 'remote things' over SSH.

      ARGUMENTS

      host-pattern
      diff --git a/html/modules.html b/html/modules.html index 3b01f52e5cc..00f1e48f3c2 100644 --- a/html/modules.html +++ b/html/modules.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Ansible Modules — Ansible v0.0.1 documentation + + + + - + + + - - -
      -
      -
      -
      + + +
      +

      Ansible Modules

      Ansible ships with a number of modules that can be executed directly on remote hosts or through @@ -57,7 +165,7 @@ ansible playbooks.

      Command Line Examples
      Examples of using modules in /usr/bin/ansible
      -
      Playbooks: Ansible for Deployment, Configuration Management, and Orchestration
      +
      Playbooks
      Examples of using modules with /usr/bin/ansible-playbook
      Using the Python API
      Examples of using modules with the Python API
      @@ -192,75 +300,16 @@ the command line, passing them arguments just like they would be passed with ans
      -
      -
      -
      -
      -
      -

      Table Of Contents

      - - -

      Previous topic

      -

      Command Line Examples

      -

      Next topic

      -

      YAML Format

      -

      This Page

      - - - -
      -
      -
      -
      - - +
      +
      +

      Back to top

      +

      + © Copyright 2012 Michael DeHaan.
      + Last updated on Mar 09, 2012.
      + Created using Sphinx 1.0.7.
      +

      +
      +
      \ No newline at end of file diff --git a/html/objects.inv b/html/objects.inv index 8289339b8a4..f1982e0d83b 100644 Binary files a/html/objects.inv and b/html/objects.inv differ diff --git a/html/patterns.html b/html/patterns.html index 230ca331748..6b31e253413 100644 --- a/html/patterns.html +++ b/html/patterns.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ The Inventory File, Patterns, and Groups — Ansible v0.0.1 documentation + + + + - + + + - - -
      -
      -
      -
      + + +
      +
      -

      The Inventory File, Patterns, and Groups

      +

      The Inventory File, Patterns, and Groups

      How to select hosts you wish to manage

      See also

      Command Line Examples
      Examples of basic commands
      -
      Playbooks: Ansible for Deployment, Configuration Management, and Orchestration
      +
      Playbooks
      Learning ansible’s configuration management language
      @@ -88,15 +188,16 @@ which defaults to /etc/ansible/hosts, and looks like this:

      one.example.com
       one.example.com:two.example.com
      -

      The following patterns address one or more groups, which are denoted with the bracket -headers in the inventory file:

      +

      The following patterns address one or more groups, which are denoted +with the bracket headers in the inventory file:

      webservers
       webservers:dbservers
      -

      Individual hosts, but not groups, can also be referenced using wildcards:

      -
      -
      *.example.com -*.com
      +

      Individual hosts, but not groups, can also be referenced using +wildcards:

      +
      *.example.com
      +*.com
      +

      It’s also ok to mix wildcard patterns and groups at the same time:

      one*.com:dbservers
      @@ -105,67 +206,16 @@ webservers:dbservers
      -
      -
      -
      -
      -
      -

      Table Of Contents

      - - -

      Previous topic

      -

      Getting Started

      -

      Next topic

      -

      Command Line Examples

      -

      This Page

      - - - -
      -
      -
      -
      - - +
      +
      +

      Back to top

      +

      + © Copyright 2012 Michael DeHaan.
      + Last updated on Mar 09, 2012.
      + Created using Sphinx 1.0.7.
      +

      +
      +
      \ No newline at end of file diff --git a/html/playbooks.html b/html/playbooks.html index 58baa5b5a38..54a50da4f9c 100644 --- a/html/playbooks.html +++ b/html/playbooks.html @@ -1,5 +1,4 @@ - @@ -7,9 +6,11 @@ - Playbooks: Ansible for Deployment, Configuration Management, and Orchestration — Ansible v0.0.1 documentation + Playbooks — Ansible v0.0.1 documentation + + + + - + + + - - -
      -
      -
      -
      + + +
      + +
      +

      Playbooks

      See also

      @@ -61,16 +170,23 @@
      Learn about how to select hosts
      -

      Playbooks are a completely different way to use ansible and are particularly awesome.

      -

      They are the basis for a really simple configuration management and multi-machine deployment system, unlike any that already exist, and one that is very well suited to deploying complex applications.

      -

      While you might run the main /usr/bin/ansible program for ad-hoc tasks, playbooks are more likely to be kept in source control and used to push out your configuration or assure the configurations of your remote systems are in spec.

      +

      Playbooks are a completely different way to use ansible and are +particularly awesome.

      +

      They are the basis for a really simple configuration management and +multi-machine deployment system, unlike any that already exist, and +one that is very well suited to deploying complex applications.

      +

      While you might run the main /usr/bin/ansible program for ad-hoc +tasks, playbooks are more likely to be kept in source control and used +to push out your configuration or assure the configurations of your +remote systems are in spec.

      Playbook Example

      -

      Playbooks are expressed in YAML format and have a minimum of syntax. Each playbook is composed -of one or more ‘plays’ in a list. By composing a playbook of multiple ‘plays’, it is possible -to orchestrate multi-machine deployments, running certain steps on all machines in -the webservers group, then certain steps on the database server group, then more commands -back on the webservers group, etc:

      +

      Playbooks are expressed in YAML format and have a minimum of syntax. +Each playbook is composed of one or more ‘plays’ in a list. By +composing a playbook of multiple ‘plays’, it is possible to +orchestrate multi-machine deployments, running certain steps on all +machines in the webservers group, then certain steps on the database +server group, then more commands back on the webservers group, etc:

      ---
       - hosts: webservers
         vars:
      @@ -91,19 +207,24 @@ back on the webservers group, etc:

      Hosts line

      -

      The hosts line is a list of one or more groups or host patterns, seperated by colons, asdescribed in the ‘patterns’ documentation. This is just like the first parameter to /usr/bin/ansible.

      +

      The hosts line is a list of one or more groups or host patterns, +seperated by colons, asdescribed in the The Inventory File, Patterns, and Groups documentation. +This is just like the first parameter to /usr/bin/ansible.

      Vars section

      -

      A list of variables and values that can be used in the plays. These can be used in templates -or ‘action’ lines and are dereferenced using `jinja2` syntax like this:

      -
      {{ varname }}
      +

      A list of variables and values that can be used in the plays. These +can be used in templates or ‘action’ lines and are dereferenced using +`jinja2` syntax like this:

      +
      {{ varname }}
      +
      -

      Further, if there are discovered variables about the system (say, if facter or ohai were -installed) these variables bubble up back into the playbook, and can be used on each -system just like explicitly set variables. Facter variables are prefixed with ‘facter_‘ -and Ohai variables are prefixed with ‘ohai_‘. So for instance, if I wanted to write the -hostname into the /etc/motd file, I could say:

      +

      Further, if there are discovered variables about the system (say, if +facter or ohai were installed) these variables bubble up back into the +playbook, and can be used on each system just like explicitly set +variables. Facter variables are prefixed with facter_ and Ohai +variables are prefixed with ohai_. So for instance, if I wanted +to write the hostname into the /etc/motd file, I could say:

      - name: write the motd
       - action: template src=/srv/templates/motd.j2 dest=/etc/motd
      @@ -114,61 +235,72 @@ hostname into the /etc/motd file, I could say:

      Tasks list

      -

      Each play contains a list of tasks. Tasks are executed in order, one at a time, against -all machines matched by the play’s host pattern, before moving on to the next task.

      -

      Hosts with failed tasks are taken out of the rotation for the entire playbook. If things fail, -simply correct the playbook file and rerun.

      -

      Modules other than command are idempotent, meaning if you run them again, they will make the -changes they are told to make to bring the system to the desired state.

      +

      Each play contains a list of tasks. Tasks are executed in order, one +at a time, against all machines matched by the play’s host pattern, +before moving on to the next task.

      +

      Hosts with failed tasks are taken out of the rotation for the entire +playbook. If things fail, simply correct the playbook file and rerun.

      +

      Modules other than command are idempotent, meaning if you run them +again, they will make the changes they are told to make to bring the +system to the desired state.

      Task name and action

      -

      Every task must have a name, which is included in the output from running the playbook.

      -

      The action line is the name of an ansible module followed by parameters. Usually these -are expressed in key=value form, except for the command module, which looks just like a Linux/Unix -command line. See the module documentation for more info.

      -

      Variables, as mentioned above, can be used in action lines. So if, hypothetically, you wanted -to make a directory on each system named after the hostname ... yeah, that’s I know silly ... you could -do it like so:

      +

      Every task must have a name, which is included in the output from +running the playbook.

      +

      The action line is the name of an ansible module followed by +parameters. Usually these are expressed in key=value form, except +for the command module, which looks just like a Linux/Unix command +line. See the module documentation for more info.

      +

      Variables, as mentioned above, can be used in action lines. So if, +hypothetically, you wanted to make a directory on each system named +after the hostname ... yeah, that’s I know silly ... you could do it +like so:

      - name: make a directory
       - action: mkdir /tmp/{{ facter_hostname }}

      Notify statements

      -

      Nearly all modules are written to be ‘idempotent’ and can signal when they have affected a change -on the remote system. If a notify statement is used, the named handler will be run against -each system where a change was effected, but NOT on systems where no change occurred. This happens -after all of the tasks are run. For example, if notifying Apache and potentially replacing lots of -configuration files, you could have Apache restart just once, at the end of a run. If you need -Apache restarted in the middle of a run, you could just make a task for it, no harm done. Notifiers -are optional.

      +

      Nearly all modules are written to be ‘idempotent’ and can signal when +they have affected a change on the remote system. If a notify +statement is used, the named handler will be run against each system +where a change was effected, but NOT on systems where no change +occurred. This happens after all of the tasks are run. For example, +if notifying Apache and potentially replacing lots of configuration +files, you could have Apache restart just once, at the end of a run. +If you need Apache restarted in the middle of a run, you could just +make a task for it, no harm done. Notifiers are optional.

      Handlers

      -

      Handlers are lists of tasks, not really any different from regular tasks, that are referenced -by name. Handlers are what notifiers notify. If nothing notifies a handler, it will not run. -Regardless of how many things notify a handler, it will run only once, after all of the tasks -complete in a particular play.

      +

      Handlers are lists of tasks, not really any different from regular +tasks, that are referenced by name. Handlers are what notifiers +notify. If nothing notifies a handler, it will not run. Regardless +of how many things notify a handler, it will run only once, after all +of the tasks complete in a particular play.

      Includes

      -

      Not all tasks have to be listed directly in the main file. An include file can contain -a list of tasks (in YAML) as well, optionally passing extra variables into the file. -Variables passed in can be deferenced like this (assume a variable named ‘user’):

      -
      {{ user }}
      +

      Not all tasks have to be listed directly in the main file. An include +file can contain a list of tasks (in YAML) as well, optionally passing +extra variables into the file. Variables passed in can be deferenced +like this (assume a variable named ‘user’):

      +
      {{ user }}
      +
      -

      For instance, if deploying multiple wordpress instances, I could contain all of my tasks -in a wordpress.yml file, and use it like so:

      +

      For instance, if deploying multiple wordpress instances, I could +contain all of my tasks in a wordpress.yml file, and use it like so:

      - tasks:
          - include: wordpress.yml user=timmy
          - include: wordpress.yml user=alice
          - include: wordpress.yml user=bob
      -

      In addition to the explicitly passed in parameters, all variables from the vars section -are also available.

      -

      The format of an included list of tasks or handlers looks just like a flat list of tasks. Here -is an example of what base.yml might look like:

      +

      In addition to the explicitly passed in parameters, all variables from +the vars section are also available.

      +

      The format of an included list of tasks or handlers looks just like a +flat list of tasks. Here is an example of what base.yml might look +like:

      ---
       - name: no selinux
         action: command /usr/sbin/setenforce 0
      @@ -177,16 +309,18 @@ is an example of what base.yml might look like:

      - name: this is just to show variables work here, favcolor={{ favcolor }} action: command /bin/true
      -

      As you can see above, variables in include files work just like they do in the main file. -Including a variable in the name of a task is a contrived example, you could also -pass them to the action command line or use them inside a template file.

      -

      Note that include statements are only usable from the top level playbook file. -At this time, includes can not include other includes.

      +

      As you can see above, variables in include files work just like they +do in the main file. Including a variable in the name of a task is a +contrived example, you could also pass them to the action command line +or use them inside a template file.

      +

      Note that include statements are only usable from the top level +playbook file. At this time, includes can not include other includes.

      Using Includes To Assign Classes of Systems

      -

      Include files are best used to reuse logic between playbooks. You could imagine -a playbook describing your entire infrastructure like this:

      +

      Include files are best used to reuse logic between playbooks. You +could imagine a playbook describing your entire infrastructure like +this:

      ---
       - hosts: atlanta-webservers
         vars:
      @@ -205,13 +339,14 @@ a playbook describing your entire infrastructure like this:

      handlers: - include: generic-handlers.yml
      -

      There is one (or more) play defined for each group of systems, and each play maps -each group includes one or more ‘class definitions’ telling the systems what they -are supposed to do or be.

      -

      Using a common handlers file could allow one task in ‘webservers’ to define ‘restart apache’, -and it could be reused between multiple plays.

      -

      Variables like ‘database’ above can be used in templates referenced from the -configuration file to generate machine specific variables.

      +

      There is one (or more) play defined for each group of systems, and +each play maps each group includes one or more ‘class definitions’ +telling the systems what they are supposed to do or be.

      +

      Using a common handlers file could allow one task in ‘webservers’ to +define ‘restart apache’, and it could be reused between multiple +plays.

      +

      Variables like ‘database’ above can be used in templates referenced +from the configuration file to generate machine specific variables.

      Asynchronous Actions and Polling

      @@ -226,76 +361,16 @@ configuration file to generate machine specific variables.

      -
      -
      -
      - -
      -
      - - +
      +
      +

      Back to top

      +

      + © Copyright 2012 Michael DeHaan.
      + Last updated on Mar 09, 2012.
      + Created using Sphinx 1.0.7.
      +

      +
      +
      \ No newline at end of file diff --git a/html/search.html b/html/search.html index f3f87515708..27f8fefb14f 100644 --- a/html/search.html +++ b/html/search.html @@ -1,5 +1,4 @@ - @@ -10,6 +9,8 @@ Search — Ansible v0.0.1 documentation + + + + - + + + - - -
      -
      -
      -
      + + +
      +

      Search

      @@ -70,28 +158,16 @@
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - - +
      + \ No newline at end of file diff --git a/html/searchindex.js b/html/searchindex.js index e8f431232da..ef32176ee26 100644 --- a/html/searchindex.js +++ b/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({objects:{},terms:{all:[0,1,2,3,4,5,6,7],concept:7,mcollect:1,prefix:[2,3,7],code:[1,2,7],follow:[5,6,2,3,7],scp:7,bubbl:[2,3],middl:3,elsewher:7,program:[1,2,3],selinux:3,blindingli:1,spec:3,sourc:[1,6,2,3,7],everi:[4,3],string:2,fals:[4,2],failur:[6,2],veri:[1,6,3],affect:3,level:[4,2,3],id_rsa:[0,7],list:[1,2,3,4,5,7,8],item:[4,6],form:[4,3],dotnet:4,saltstack:1,straight:7,alic:3,natur:2,seper:3,chef:1,second:[4,7],design:1,pass:[2,3],download:0,further:3,port:7,even:7,what:[0,2,3],favcolor:[3,7],section:[1,2,3],abbrevi:4,version:[2,7],varnam:3,ever:1,method:6,told:3,tar:0,hash:2,abov:3,conf:[3,7],eckersberg:4,gener:3,here:[2,3,7],let:[3,7],address:[5,2],path:2,sinc:7,valu:[4,2,3],box:[1,2],great:1,ahead:3,precursor:1,technolog:1,step:[2,3],prior:2,pick:[4,7],action:[1,2,3],extrem:0,implement:6,commonli:7,ourselv:3,employe:4,via:[0,1],regardless:[4,1,3],extra:3,modul:[0,1,2,3,6,7],releas:0,unix:3,"boolean":4,instal:[7,0,2,3,1],select:[1,2,3,5],httpd:[3,7],from:[0,1,2,3,4,7],describ:[2,3],would:[2,7],commun:1,visit:1,two:[4,0,5],noarch:0,live:0,handler:[1,3,7],call:2,usr:[6,2,3,7],msg:[6,2],suppos:3,checkout:2,tell:[2,3,7],more:[0,5,2,3,1],flat:3,desir:3,idempot:[2,3,7],comparison:1,unneccessari:2,sshd:1,agent:[0,7],particular:[1,3],easiest:1,must:[4,2,3],none:6,join:1,ibm:1,module_arg:6,dest:[2,3,7],setup:[1,2,7],work:[7,0,5,3,1],knows_oop:4,remain:1,minimum:3,can:[0,1,2,3,4,5,6,7],learn:[0,5,3,1],about:[4,0,2,3,1],purpos:2,root:[4,1,3],control:[1,2,3,7],want:[6,2,3,7],yamllint:4,process:[1,7],rpath:1,sudo:0,share:2,templat:[7,0,2,3,1],critic:1,liter:2,explor:0,occur:3,nearli:[2,3],alwai:2,multipl:[5,3,7],newlin:4,thoug:2,lame:4,capistrano:1,ping:[0,6,2,1],uptim:6,write:[4,1,2,3,7],how:[0,2,3,4,5,6,7],instead:2,simpl:[4,1,6,3,7],updat:7,map:3,financ:1,referenc:[5,3],clone:0,after:[3,7],usabl:[1,3],befor:[2,3],ohai_:3,mai:[4,0,6],end:[2,3],data:[4,6,2,7],parallel:[1,7],man:[1,8],github:[0,1],orchestr:[0,1,2,3,5,7],bootstrap:1,favorit:1,element:[4,2],issu:1,inform:[6,2,3],mango:4,combin:4,allow:3,order:3,talk:[0,3],oper:[1,7],help:1,over:[1,7],move:[2,3],orang:4,mission:1,elit:4,rpmbuild:0,comma:4,paramet:[2,3],facter_:3,jid:7,overlord:0,group:[1,6,3,5],cli:6,yaml:[4,1,3],pend:[3,7],rapidli:6,infrastructur:[0,5,3,1],mail:[1,5],job_statu:7,main:3,might:3,them:[2,3,7],"return":[1,6,2],thei:[6,2,3,7],food:4,contriv:3,scene:2,framework:[1,6],jinja2:[0,2,3,7],now:[0,2],nor:2,choic:1,multiprocess:0,name:[4,1,2,3,7],anyth:2,neccessari:[2,7],config:[1,3],drop:2,datastructur:6,separ:4,exampl:[0,1,2,3,4,5,6,7],each:[4,2,3,7],found:6,stock:2,mean:[2,3],harm:3,michael:1,individu:5,idea:1,realli:[4,2,3],backport:0,facter:[1,2,3,7],our:4,happen:[2,3],event:2,out:[1,2,3,4,6,7],variabl:[2,3,7],network:1,space:[1,2],reboot:7,content:[0,1],rel:2,internet:1,print:6,correct:[4,1,3],red:[1,7],painless:1,insid:3,advanc:6,ntp:7,given:[2,7],pub:7,base:[1,3],lab:1,dictionari:4,put:[0,7],org:0,bash:[0,7],basi:3,pyyaml:0,could:[6,3],fqdn:7,thing:[1,3],place:1,isn:1,assign:[1,3],first:[7,0,2,3,1],origin:1,softwar:[1,2,7],rang:1,notifi:[1,3,7],directli:[2,3,7],onc:[2,3],number:2,yourself:0,hook:2,instruct:0,alreadi:[0,2,3],puppet:1,construct:6,extend:1,massiv:1,differ:[7,0,3,1],convent:2,script:[1,6,7],associ:4,top:[2,3],mkdir:3,system:[0,1,2,3,5,7],messag:6,inventori:[1,2,3,5],too:1,statement:[1,3],john:4,"final":4,iptabl:3,shell:[1,2,7],option:[4,6,3,8,7],tool:[1,6,2,7],copi:[1,2,7],specifi:[4,2,7],retyp:0,sha:2,"short":1,kept:3,than:[0,2,3,7],silli:3,target:[1,5],remot:[0,2,3,7],structur:4,banana:4,project:[0,7,1],reus:3,architect:1,were:3,tion:4,uses_cv:4,pre:0,sai:3,runner:6,explicit:2,ani:[1,6,2,3,7],have:[0,3,1],need:[4,0,2,3,7],seek:2,paramiko:0,imagin:3,engin:7,built:0,note:[5,2,3,7],also:[0,1,2,3,4,5,6,7],client:1,build:[0,6],indic:2,datacent:3,divers:1,begin:4,unless:2,distribut:[0,1],deploy:[0,1,2,3,5,7],track:7,discov:3,most:[4,2],plai:[2,3],regular:3,deploi:[1,2,3,7],pair:2,why:1,don:2,doc:1,later:7,cover:7,doe:[1,2,5],likes_emac:4,snapshot:2,wildcard:5,databas:3,awesom:[1,3],show:[3,7],verbos:2,syntax:[4,3],bring:3,raleigh:1,particularli:3,playbook:[0,1,2,3,4,5,6,7],hack:1,radic:1,trivial:[1,2],rotat:3,involv:1,absolut:2,onli:[0,2,3,7],explicitli:3,locat:2,just:[7,0,2,3,1],pretti:6,configur:[0,1,2,3,4,5,7],apach:[3,7],behind:2,should:[4,2],somevar:3,freenod:1,local:2,yml:3,long_running_oper:7,contribut:1,get:[4,0,3,7,1],express:[4,1,6,3],stop:[2,3],repo:[2,7],next:3,obviou:1,ssh:[0,7],requir:[0,2,1],uvh:0,bar:5,provid:4,stuff:7,common:3,contain:[2,3],through:[0,2,1],where:[1,2,3],view:[1,8],set:[0,2,3],see:[0,1,2,3,4,5,7],result:[6,2],fail:[6,3],charact:4,ntp_server:7,best:3,planet:1,statu:7,manpag:[0,8],pattern:[1,6,3,5],someth:[1,2,7],discoveri:2,restart:[2,3,7],state:[2,3,7],won:7,between:[4,3],"import":6,irc:1,altern:7,kei:[4,0,2,3],style:2,extens:1,job:[4,7],entir:3,aserv:0,webapp:7,asdescrib:3,timmi:3,addit:[4,1,3],delimit:2,goal:1,against:[1,3,5],etc:[7,0,5,3,1],instanc:3,logic:3,mani:[3,7],com:[0,6,3,5],assur:3,simpli:[2,3],author:1,overview:4,header:5,written:[1,2,3,7],colon:3,shutdown:2,linux:[1,3],poll:[1,3,7],rpm:[0,1],three:5,multiplay:1,compos:3,been:1,json:[1,6,2],much:[1,2],basic:[4,0,5,2,1],quickli:[4,1],indenta:4,fire:1,rubi:[4,2,7],argument:2,func:1,atlanta:[3,7],those:[4,2],emploi:4,authorized_kei:0,multi:[1,3],look:[5,3,7],replac:3,hoc:[1,3,7],servic:[1,2,3,7],md5sum:2,defin:3,"while":3,facter_hostnam:3,cobbler:1,dehaan:1,motd:[3,7],max_client:3,stdout:6,non:1,itself:6,myapp:7,module_nam:6,sever:4,http_port:3,develop:[4,0,1],welcom:1,minim:0,make:[0,2,3,7],ohai:[1,2,3,7],same:[4,5,7],member:4,python:[0,1,2,4,6,7],complex:[1,3],success:2,document:[0,6,3,7],ansibl:[0,1,2,3,4,5,6,7,8],complet:3,http:2,hostnam:[6,3],again:3,nest:2,permit:4,effect:3,fruit:4,user:3,php:7,distutil:[0,1],typic:7,squar:4,task:[1,3,7],off:1,scenario:2,mention:3,setenforc:3,well:[0,2,3],hypothet:3,contact:[0,6,2],command:[0,1,2,3,5,6,7,8],thi:[0,1,2,3,4,5,7],choos:2,programm:6,dereferenc:3,usual:3,protocol:2,execut:[1,6,2,3],less:[0,1],excel:1,kill:7,skill:4,simultan:7,languag:[4,0,5,2,1],web:[6,7],versu:1,easi:[1,2],mix:5,trigger:2,except:3,littl:1,add:[0,7],els:1,unlik:3,hat:1,match:3,take:2,bin:[0,6,2,3,7],applic:[6,3],which:[4,0,5,3,1],format:[1,2,3,4,5,7],read:[4,0,6],fast:1,dark:6,game:1,know:[4,2,3],background:[1,7],world:0,bit:2,password:0,daemon:1,motorola:1,like:[4,5,2,3,7],specif:[5,6,3,7],signal:3,integ:2,noth:3,edit:0,api:[1,6,2],either:2,lose:7,popular:1,output:3,manag:[0,1,2,3,4,5,7],webserv:[5,3,7],some:[0,2],back:3,dead:1,server:[1,2,3,7],tmp:[3,7],render:2,assum:3,avoid:[0,2],though:1,definit:3,per:6,tracker:1,exit:6,foo:[5,7],complic:1,refer:7,machin:[0,2,3,7],core:1,run:[0,6,2,3,7],power:[1,6],usag:[2,7],devop:1,web2:6,host:[0,1,2,3,5,6,7],web1:6,repositori:0,"super":1,simpler:7,src:[2,3,7],sbin:[2,3,7],actual:2,othervar:3,surround:4,page:[4,0,8,1],srv:[3,7],done:3,industri:1,own:[1,2,3],real:0,bounc:2,within:2,tag:[0,2],automat:2,upgrad:7,down:6,ensur:[3,7],chang:[2,3,7],perl:7,bserver:0,your:[0,1,2,3,4,5,7],git:[0,2,7,1],type:6,fabric:1,wai:[4,0,3,7],transfer:[1,7],support:[2,7],question:1,"long":[1,2,7],happi:1,avail:[0,2,3,6,7,8],start:[0,1,2,3,4,7],appl:4,wordpress:3,includ:[1,3],lot:[1,3,7],suit:3,"var":[1,3],fork:6,head:[2,7],simplejson:0,lint:4,yeah:3,taken:3,line:[0,1,2,3,4,5,6,7,8],"true":[4,2,3],congratul:0,info:3,strawberri:4,made:[2,7],possibl:[5,3,7],whether:6,wish:[4,0,6,5],caller:2,until:0,asynchron:[1,3],record:4,limit:[1,7],rerun:3,otherwis:2,similar:2,chip:1,curv:1,featur:3,tasti:4,creat:1,certain:3,doesn:1,repres:4,exist:[1,3],file:[0,1,2,3,4,5,7],bob:3,ship:2,check:[2,7],bracket:[4,5],echo:0,denot:5,googl:1,dbserver:[5,3],when:[2,3,7],detail:[1,6],"default":[1,5],other:[7,0,2,3,1],futur:0,test:[0,2],you:[0,1,2,3,4,5,7],node:[0,2,7,1],sequenc:1,"class":[1,3],asciidoc:0,push:3,log:3,deferenc:3,"60k":1,sphinx:0,directori:[2,3],portion:5,emerg:1,potenti:3,time:[0,1,2,3,5,7],far:1,hello:0},objtypes:{},titles:["Getting Started","Ansible","Ansible Modules","Playbooks: Ansible for Deployment, Configuration Management, and Orchestration","YAML Format","The Inventory File, Patterns, and Groups","Using the Python API","Command Line Examples","Man Pages"],objnames:{},filenames:["gettingstarted","index","modules","playbooks","YAMLScripts","patterns","api","examples","man"]}) \ No newline at end of file +Search.setIndex({objects:{},terms:{all:[0,1,2,3,4,5,6,7],code:[1,2,7],mcollect:1,prefix:[2,3,7],concept:7,follow:[5,6,2,3,7],scp:7,bubbl:[2,3],middl:3,elsewher:7,program:[1,2,3],selinux:3,blindingli:1,spec:3,sourc:[1,6,2,3,7],everi:[4,3],string:2,fals:[4,2],failur:[6,2],veri:[1,6,3],affect:3,level:[4,2,3],id_rsa:[0,7],list:[1,2,3,4,5,7,8],item:[4,6],form:[4,3],dotnet:4,saltstack:1,straight:7,alic:3,natur:2,seper:3,chef:1,second:[4,7],design:1,pass:[2,3],download:0,further:3,port:7,even:7,what:[0,2,3],favcolor:[3,7],section:[1,2,3],abbrevi:4,version:[2,7],varnam:3,ever:1,method:6,told:3,tar:0,hash:2,abov:3,conf:[3,7],eckersberg:4,gener:3,here:[2,3,7],let:[3,7],address:[5,2],path:2,sinc:7,valu:[4,2,3],box:[1,2],great:1,ahead:3,precursor:1,technolog:1,step:[2,3],prior:2,pick:[4,7],action:[1,2,3],extrem:0,implement:6,commonli:7,ourselv:3,employe:4,via:[0,1],regardless:[4,1,3],extra:3,modul:[0,1,2,3,6,7],releas:0,unix:3,"boolean":4,instal:[7,0,2,3,1],select:[1,2,3,5],httpd:[3,7],from:[0,1,2,3,4,7],describ:[2,3],would:[2,7],commun:1,visit:1,two:[4,0,5],noarch:0,live:0,handler:[1,3,7],call:2,usr:[6,2,3,7],msg:[6,2],suppos:3,checkout:2,tell:[2,3,7],more:[0,5,2,3,1],flat:3,desir:3,idempot:[2,3,7],comparison:1,unneccessari:2,sshd:1,agent:[0,7],particular:[1,3],easiest:1,must:[4,2,3],none:6,join:1,ibm:1,module_arg:6,dest:[2,3,7],setup:[1,2,7],work:[7,0,5,3,1],knows_oop:4,remain:1,minimum:3,can:[0,1,2,3,4,5,6,7],learn:[0,5,3,1],about:[4,0,2,3,1],purpos:2,root:[4,1,3],control:[1,2,3,7],want:[6,2,3,7],yamllint:4,process:[1,7],rpath:1,sudo:0,share:2,templat:[7,0,2,3,1],critic:1,liter:2,explor:0,occur:3,nearli:[2,3],alwai:2,multipl:[5,3,7],newlin:4,thoug:2,lame:4,capistrano:1,ping:[0,6,2,1],uptim:6,write:[4,1,2,3,7],how:[0,2,3,4,5,6,7],instead:2,simpl:[4,1,6,3,7],updat:7,map:3,financ:1,referenc:[5,3],clone:0,after:[3,7],usabl:[1,3],befor:[2,3],ohai_:3,mai:[4,0,6],end:[2,3],data:[4,6,2,7],parallel:[1,7],man:[1,8],github:[0,1],orchestr:[1,3],bootstrap:1,favorit:1,element:[4,2],issu:1,inform:[6,2,3],mango:4,combin:4,allow:3,order:3,talk:[0,3],origin:1,help:1,over:[1,7],move:[2,3],orang:4,mission:1,elit:4,rpmbuild:0,comma:4,paramet:[2,3],facter_:3,jid:7,overlord:0,group:[1,6,3,5],cli:6,yaml:[4,1,3],pend:[3,7],rapidli:6,infrastructur:[0,5,3,1],mail:[1,5],job_statu:7,main:3,might:3,them:[2,3,7],"return":[1,6,2],thei:[6,2,3,7],food:4,contriv:3,scene:2,framework:[1,6],jinja2:[0,2,3,7],now:[0,2],nor:2,choic:1,multiprocess:0,name:[4,1,2,3,7],anyth:2,neccessari:[2,7],config:[1,3],drop:2,datastructur:6,separ:4,exampl:[0,1,2,3,4,5,6,7],each:[4,2,3,7],found:6,stock:2,mean:[2,3],harm:3,michael:1,individu:5,idea:1,realli:[4,2,3],backport:0,facter:[1,2,3,7],our:4,happen:[2,3],event:2,out:[1,2,3,4,6,7],variabl:[2,3,7],network:1,space:[1,2],reboot:7,content:[0,1],rel:2,internet:1,print:6,correct:[4,1,3],red:[1,7],painless:1,insid:3,advanc:6,ntp:7,given:[2,7],pub:7,base:[1,3],lab:1,dictionari:4,put:[0,7],org:0,bash:[0,7],basi:3,pyyaml:0,could:[6,3],fqdn:7,thing:[1,3],place:1,isn:1,assign:[1,3],first:[7,0,2,3,1],oper:[1,7],softwar:[1,2,7],rang:1,notifi:[1,3,7],directli:[2,3,7],onc:[2,3],number:2,yourself:0,hook:2,instruct:0,alreadi:[0,2,3],puppet:1,construct:6,extend:1,massiv:1,differ:[7,0,3,1],convent:2,script:[1,6,7],associ:4,top:[2,3],mkdir:3,system:[0,1,2,3,5,7],messag:6,inventori:[1,2,3,5],too:1,statement:[1,3],john:4,"final":4,iptabl:3,shell:[1,2,7],option:[4,6,3,8,7],tool:[1,6,2,7],copi:[1,2,7],specifi:[4,2,7],retyp:0,sha:2,"short":1,kept:3,than:[0,2,3,7],silli:3,target:[1,5],remot:[0,2,3,7],structur:4,banana:4,project:[0,7,1],reus:3,architect:1,were:3,tion:4,uses_cv:4,pre:0,sai:3,runner:6,explicit:2,ani:[1,6,2,3,7],have:[0,3,1],need:[4,0,2,3,7],seek:2,paramiko:0,imagin:3,engin:7,built:0,note:[5,2,3,7],also:[0,1,2,3,4,5,6,7],client:1,build:[0,6],indic:2,datacent:3,divers:1,begin:4,unless:2,distribut:[0,1],deploy:[1,3,7],track:7,discov:3,most:[4,2],plai:[2,3],regular:3,deploi:[1,2,3,7],pair:2,why:1,don:2,doc:1,later:7,cover:7,doe:[1,2,5],likes_emac:4,snapshot:2,wildcard:5,databas:3,awesom:[1,3],show:[3,7],verbos:2,syntax:[4,3],bring:3,raleigh:1,particularli:3,playbook:[0,1,2,3,4,5,6,7],hack:1,radic:1,trivial:[1,2],rotat:3,involv:1,absolut:2,onli:[0,2,3,7],explicitli:3,locat:2,just:[7,0,2,3,1],pretti:6,configur:[0,1,3,4,5,7],apach:[3,7],behind:2,should:[4,2],somevar:3,freenod:1,local:2,yml:3,long_running_oper:7,contribut:1,get:[4,0,3,7,1],express:[4,1,6,3],stop:[2,3],repo:[2,7],next:3,obviou:1,ssh:[0,7],requir:[0,2,1],uvh:0,bar:5,provid:4,stuff:7,common:3,contain:[2,3],through:[0,2,1],where:[1,2,3],view:[1,8],set:[0,2,3],see:[0,1,2,3,4,5,7],result:[6,2],fail:[6,3],charact:4,ntp_server:7,best:3,planet:1,statu:7,manpag:[0,8],pattern:[1,6,3,5],someth:[1,2,7],discoveri:2,restart:[2,3,7],state:[2,3,7],won:7,between:[4,3],"import":6,irc:1,altern:7,kei:[4,0,2,3],style:2,extens:1,job:[4,7],entir:3,aserv:0,webapp:7,asdescrib:3,timmi:3,addit:[4,1,3],delimit:2,goal:1,against:[1,3,5],etc:[7,0,5,3,1],instanc:3,logic:3,mani:[3,7],com:[0,6,3,5],assur:3,simpli:[2,3],author:1,overview:4,header:5,written:[1,2,3,7],colon:3,shutdown:2,linux:[1,3],poll:[1,3,7],rpm:[0,1],compos:3,multiplay:1,three:5,been:1,json:[1,6,2],much:[1,2],basic:[4,0,5,2,1],quickli:[4,1],indenta:4,fire:1,rubi:[4,2,7],argument:2,func:1,atlanta:[3,7],those:[4,2],emploi:4,authorized_kei:0,multi:[1,3],look:[5,3,7],replac:3,hoc:[1,3,7],servic:[1,2,3,7],md5sum:2,defin:3,"while":3,facter_hostnam:3,cobbler:1,dehaan:1,motd:[3,7],max_client:3,stdout:6,non:1,itself:6,myapp:7,module_nam:6,sever:4,http_port:3,develop:[4,0,1],welcom:1,minim:0,make:[0,2,3,7],ohai:[1,2,3,7],same:[4,5,7],member:4,python:[0,1,2,4,6,7],complex:[1,3],success:2,document:[0,6,3,7],ansibl:[0,1,2,3,4,5,6,7,8],complet:3,http:2,hostnam:[6,3],again:3,nest:2,permit:4,effect:3,fruit:4,user:3,php:7,distutil:[0,1],typic:7,squar:4,task:[1,3,7],off:1,scenario:2,mention:3,setenforc:3,well:[0,2,3],hypothet:3,contact:[0,6,2],command:[0,1,2,3,5,6,7,8],thi:[0,1,2,3,4,5,7],choos:2,programm:6,dereferenc:3,usual:3,protocol:2,execut:[1,6,2,3],less:[0,1],excel:1,kill:7,skill:4,simultan:7,languag:[4,0,5,2,1],web:[6,7],versu:1,easi:[1,2],mix:5,trigger:2,except:3,littl:1,add:[0,7],els:1,unlik:3,hat:1,match:3,take:2,bin:[0,6,2,3,7],applic:[6,3],which:[4,0,5,3,1],format:[1,2,3,4,5,7],read:[4,0,6],fast:1,dark:6,game:1,know:[4,2,3],background:[1,7],world:0,bit:2,password:0,daemon:1,motorola:1,like:[4,5,2,3,7],specif:[5,6,3,7],signal:3,integ:2,noth:3,edit:0,api:[1,6,2],either:2,lose:7,popular:1,output:3,manag:[0,1,3,4,5,7],webserv:[5,3,7],some:[0,2],back:3,dead:1,server:[1,2,3,7],tmp:[3,7],render:2,assum:3,avoid:[0,2],though:1,definit:3,per:6,tracker:1,exit:6,foo:[5,7],complic:1,refer:7,machin:[0,2,3,7],core:1,run:[0,6,2,3,7],power:[1,6],usag:[2,7],devop:1,web2:6,host:[0,1,2,3,5,6,7],web1:6,repositori:0,"super":1,simpler:7,src:[2,3,7],sbin:[2,3,7],actual:2,othervar:3,surround:4,page:[4,0,8,1],srv:[3,7],done:3,industri:1,own:[1,2,3],real:0,bounc:2,within:2,tag:[0,2],automat:2,upgrad:7,down:6,ensur:[3,7],chang:[2,3,7],perl:7,bserver:0,your:[0,1,2,3,4,5,7],git:[0,2,7,1],type:6,fabric:1,wai:[4,0,3,7],transfer:[1,7],support:[2,7],question:1,"long":[1,2,7],happi:1,avail:[0,2,3,6,7,8],start:[0,1,2,3,4,7],appl:4,wordpress:3,includ:[1,3],lot:[1,3,7],suit:3,"var":[1,3],fork:6,head:[2,7],simplejson:0,lint:4,yeah:3,taken:3,line:[0,1,2,3,4,5,6,7,8],"true":[4,2,3],congratul:0,info:3,strawberri:4,made:[2,7],possibl:[5,3,7],whether:6,wish:[4,0,6,5],caller:2,until:0,asynchron:[1,3],record:4,limit:[1,7],rerun:3,otherwis:2,similar:2,chip:1,curv:1,featur:3,tasti:4,creat:1,certain:3,doesn:1,repres:4,exist:[1,3],file:[0,1,2,3,4,5,7],bob:3,ship:2,check:[2,7],bracket:[4,5],echo:0,denot:5,googl:1,dbserver:[5,3],when:[2,3,7],detail:[1,6],"default":[1,5],other:[7,0,2,3,1],futur:0,test:[0,2],you:[0,1,2,3,4,5,7],node:[0,2,7,1],sequenc:1,"class":[1,3],asciidoc:0,push:3,log:3,deferenc:3,"60k":1,sphinx:0,directori:[2,3],portion:5,emerg:1,potenti:3,time:[0,1,2,3,5,7],far:1,hello:0},objtypes:{},titles:["Getting Started","Ansible","Ansible Modules","Playbooks","YAML Format","The Inventory File, Patterns, and Groups","Using the Python API","Command Line Examples","Man Pages"],objnames:{},filenames:["gettingstarted","index","modules","playbooks","YAMLScripts","patterns","api","examples","man"]}) \ No newline at end of file diff --git a/rst/patterns.rst b/rst/patterns.rst index 8ef369b225c..5b76289378a 100644 --- a/rst/patterns.rst +++ b/rst/patterns.rst @@ -1,3 +1,5 @@ +.. _patterns: + The Inventory File, Patterns, and Groups ======================================== @@ -43,16 +45,17 @@ It is also possible to address specific hosts:: one.example.com:two.example.com -The following patterns address one or more groups, which are denoted with the bracket -headers in the inventory file:: +The following patterns address one or more groups, which are denoted +with the bracket headers in the inventory file:: webservers webservers:dbservers -Individual hosts, but not groups, can also be referenced using wildcards: +Individual hosts, but not groups, can also be referenced using +wildcards:: - *.example.com - *.com + *.example.com + *.com It's also ok to mix wildcard patterns and groups at the same time:: diff --git a/rst/playbooks.rst b/rst/playbooks.rst index 890768c5894..db028da59c2 100644 --- a/rst/playbooks.rst +++ b/rst/playbooks.rst @@ -1,5 +1,5 @@ -Playbooks: Ansible for Deployment, Configuration Management, and Orchestration -============================================================================== +Playbooks +========= .. seealso:: @@ -11,21 +11,28 @@ Playbooks: Ansible for Deployment, Configuration Management, and Orchestration Learn about how to select hosts -Playbooks are a completely different way to use ansible and are particularly awesome. +Playbooks are a completely different way to use ansible and are +particularly awesome. -They are the basis for a really simple configuration management and multi-machine deployment system, unlike any that already exist, and one that is very well suited to deploying complex applications. +They are the basis for a really simple configuration management and +multi-machine deployment system, unlike any that already exist, and +one that is very well suited to deploying complex applications. -While you might run the main /usr/bin/ansible program for ad-hoc tasks, playbooks are more likely to be kept in source control and used to push out your configuration or assure the configurations of your remote systems are in spec. +While you might run the main /usr/bin/ansible program for ad-hoc +tasks, playbooks are more likely to be kept in source control and used +to push out your configuration or assure the configurations of your +remote systems are in spec. Playbook Example ```````````````` -Playbooks are expressed in YAML format and have a minimum of syntax. Each playbook is composed -of one or more 'plays' in a list. By composing a playbook of multiple 'plays', it is possible -to orchestrate multi-machine deployments, running certain steps on all machines in -the webservers group, then certain steps on the database server group, then more commands -back on the webservers group, etc:: +Playbooks are expressed in YAML format and have a minimum of syntax. +Each playbook is composed of one or more 'plays' in a list. By +composing a playbook of multiple 'plays', it is possible to +orchestrate multi-machine deployments, running certain steps on all +machines in the webservers group, then certain steps on the database +server group, then more commands back on the webservers group, etc:: --- - hosts: webservers @@ -47,21 +54,26 @@ back on the webservers group, etc:: Hosts line `````````` -The hosts line is a list of one or more groups or host patterns, seperated by colons, asdescribed in the 'patterns' documentation. This is just like the first parameter to /usr/bin/ansible. +The hosts line is a list of one or more groups or host patterns, +seperated by colons, as described in the :ref:`patterns` +documentation. This is just like the first parameter to +`/usr/bin/ansible`. Vars section ```````````` -A list of variables and values that can be used in the plays. These can be used in templates -or 'action' lines and are dereferenced using ```jinja2``` syntax like this:: +A list of variables and values that can be used in the plays. These +can be used in templates or 'action' lines and are dereferenced using +`jinja2` syntax like this:: {{ varname }} -Further, if there are discovered variables about the system (say, if facter or ohai were -installed) these variables bubble up back into the playbook, and can be used on each -system just like explicitly set variables. Facter variables are prefixed with 'facter_' -and Ohai variables are prefixed with 'ohai_'. So for instance, if I wanted to write the -hostname into the /etc/motd file, I could say:: +Further, if there are discovered variables about the system (say, if +facter or ohai were installed) these variables bubble up back into the +playbook, and can be used on each system just like explicitly set +variables. Facter variables are prefixed with ``facter_`` and Ohai +variables are prefixed with ``ohai_``. So for instance, if I wanted +to write the hostname into the /etc/motd file, I could say:: - name: write the motd - action: template src=/srv/templates/motd.j2 dest=/etc/motd @@ -75,27 +87,32 @@ But we're getting ahead of ourselves. Let's talk about tasks. Tasks list `````````` -Each play contains a list of tasks. Tasks are executed in order, one at a time, against -all machines matched by the play's host pattern, before moving on to the next task. +Each play contains a list of tasks. Tasks are executed in order, one +at a time, against all machines matched by the play's host pattern, +before moving on to the next task. -Hosts with failed tasks are taken out of the rotation for the entire playbook. If things fail, -simply correct the playbook file and rerun. +Hosts with failed tasks are taken out of the rotation for the entire +playbook. If things fail, simply correct the playbook file and rerun. -Modules other than command are idempotent, meaning if you run them again, they will make the -changes they are told to make to bring the system to the desired state. +Modules other than command are idempotent, meaning if you run them +again, they will make the changes they are told to make to bring the +system to the desired state. Task name and action ````````````````````` -Every task must have a name, which is included in the output from running the playbook. +Every task must have a name, which is included in the output from +running the playbook. -The action line is the name of an ansible module followed by parameters. Usually these -are expressed in key=value form, except for the command module, which looks just like a Linux/Unix -command line. See the module documentation for more info. +The action line is the name of an ansible module followed by +parameters. Usually these are expressed in ``key=value`` form, except +for the command module, which looks just like a Linux/Unix command +line. See the module documentation for more info. -Variables, as mentioned above, can be used in action lines. So if, hypothetically, you wanted -to make a directory on each system named after the hostname ... yeah, that's I know silly ... you could -do it like so:: +Variables, as mentioned above, can be used in action lines. So if, +hypothetically, you wanted to make a directory on each system named +after the hostname ... yeah, that's I know silly ... you could do it +like so:: - name: make a directory - action: mkdir /tmp/{{ facter_hostname }} @@ -103,44 +120,49 @@ do it like so:: Notify statements ````````````````` -Nearly all modules are written to be 'idempotent' and can signal when they have affected a change -on the remote system. If a notify statement is used, the named handler will be run against -each system where a change was effected, but NOT on systems where no change occurred. This happens -after all of the tasks are run. For example, if notifying Apache and potentially replacing lots of -configuration files, you could have Apache restart just once, at the end of a run. If you need -Apache restarted in the middle of a run, you could just make a task for it, no harm done. Notifiers -are optional. +Nearly all modules are written to be 'idempotent' and can signal when +they have affected a change on the remote system. If a notify +statement is used, the named handler will be run against each system +where a change was effected, but NOT on systems where no change +occurred. This happens after all of the tasks are run. For example, +if notifying Apache and potentially replacing lots of configuration +files, you could have Apache restart just once, at the end of a run. +If you need Apache restarted in the middle of a run, you could just +make a task for it, no harm done. Notifiers are optional. Handlers ```````` -Handlers are lists of tasks, not really any different from regular tasks, that are referenced -by name. Handlers are what notifiers notify. If nothing notifies a handler, it will not run. -Regardless of how many things notify a handler, it will run only once, after all of the tasks -complete in a particular play. +Handlers are lists of tasks, not really any different from regular +tasks, that are referenced by name. Handlers are what notifiers +notify. If nothing notifies a handler, it will not run. Regardless +of how many things notify a handler, it will run only once, after all +of the tasks complete in a particular play. Includes ```````` -Not all tasks have to be listed directly in the main file. An include file can contain -a list of tasks (in YAML) as well, optionally passing extra variables into the file. -Variables passed in can be deferenced like this (assume a variable named 'user'):: +Not all tasks have to be listed directly in the main file. An include +file can contain a list of tasks (in YAML) as well, optionally passing +extra variables into the file. Variables passed in can be deferenced +like this (assume a variable named 'user'):: {{ user }} -For instance, if deploying multiple wordpress instances, I could contain all of my tasks -in a wordpress.yml file, and use it like so:: +For instance, if deploying multiple wordpress instances, I could +contain all of my tasks in a wordpress.yml file, and use it like so:: - tasks: - include: wordpress.yml user=timmy - include: wordpress.yml user=alice - include: wordpress.yml user=bob -In addition to the explicitly passed in parameters, all variables from the vars section -are also available. +In addition to the explicitly passed in parameters, all variables from +the vars section are also available. -The format of an included list of tasks or handlers looks just like a flat list of tasks. Here -is an example of what base.yml might look like:: +The format of an included list of tasks or handlers looks just like a +flat list of tasks. Here is an example of what base.yml might look +like:: --- - name: no selinux @@ -150,18 +172,20 @@ is an example of what base.yml might look like:: - name: this is just to show variables work here, favcolor={{ favcolor }} action: command /bin/true -As you can see above, variables in include files work just like they do in the main file. -Including a variable in the name of a task is a contrived example, you could also -pass them to the action command line or use them inside a template file. +As you can see above, variables in include files work just like they +do in the main file. Including a variable in the name of a task is a +contrived example, you could also pass them to the action command line +or use them inside a template file. -Note that include statements are only usable from the top level playbook file. -At this time, includes can not include other includes. +Note that include statements are only usable from the top level +playbook file. At this time, includes can not include other includes. Using Includes To Assign Classes of Systems ``````````````````````````````````````````` -Include files are best used to reuse logic between playbooks. You could imagine -a playbook describing your entire infrastructure like this:: +Include files are best used to reuse logic between playbooks. You +could imagine a playbook describing your entire infrastructure like +this:: --- - hosts: atlanta-webservers @@ -181,21 +205,23 @@ a playbook describing your entire infrastructure like this:: handlers: - include: generic-handlers.yml -There is one (or more) play defined for each group of systems, and each play maps -each group includes one or more 'class definitions' telling the systems what they -are supposed to do or be. +There is one (or more) play defined for each group of systems, and +each play maps each group includes one or more 'class definitions' +telling the systems what they are supposed to do or be. -Using a common handlers file could allow one task in 'webservers' to define 'restart apache', -and it could be reused between multiple plays. +Using a common handlers file could allow one task in 'webservers' to +define 'restart apache', and it could be reused between multiple +plays. -Variables like 'database' above can be used in templates referenced from the -configuration file to generate machine specific variables. +Variables like 'database' above can be used in templates referenced +from the configuration file to generate machine specific variables. Asynchronous Actions and Polling ```````````````````````````````` (Information on this feature is pending) + Executing A Playbook ````````````````````