aboutsummaryrefslogtreecommitdiff
path: root/scss
diff options
context:
space:
mode:
Diffstat (limited to 'scss')
-rw-r--r--scss/.csscomb.json304
-rw-r--r--scss/.csslintrc20
-rw-r--r--scss/_alert.scss67
-rw-r--r--scss/_animation.scss34
-rw-r--r--scss/_badge.scss56
-rw-r--r--scss/_breadcrumb.scss27
-rw-r--r--scss/_button-group.scss250
-rw-r--r--scss/_buttons.scss156
-rw-r--r--scss/_card.scss196
-rw-r--r--scss/_carousel.scss251
-rw-r--r--scss/_close.scss33
-rw-r--r--scss/_code.scss66
-rw-r--r--scss/_dropdown.scss208
-rw-r--r--scss/_forms.scss556
-rw-r--r--scss/_grid.scss84
-rw-r--r--scss/_input-group.scss166
-rw-r--r--scss/_jumbotron.scss44
-rw-r--r--scss/_labels.scss64
-rw-r--r--scss/_list-group.scss124
-rw-r--r--scss/_media.scss57
-rw-r--r--scss/_mixins.scss59
-rw-r--r--scss/_modal.scss147
-rw-r--r--scss/_nav.scss168
-rw-r--r--scss/_navbar.scss574
-rw-r--r--scss/_normalize.scss427
-rw-r--r--scss/_pager.scss56
-rw-r--r--scss/_pagination.scss89
-rw-r--r--scss/_popover.scss130
-rw-r--r--scss/_print.scss107
-rw-r--r--scss/_progress.scss166
-rw-r--r--scss/_responsive-embed.scss35
-rw-r--r--scss/_scaffolding.scss147
-rw-r--r--scss/_tables.scss314
-rw-r--r--scss/_tooltip.scss103
-rw-r--r--scss/_type.scss233
-rw-r--r--scss/_utilities-responsive.scss148
-rw-r--r--scss/_utilities.scss122
-rw-r--r--scss/_variables.scss777
-rw-r--r--scss/bootstrap.scss47
-rw-r--r--scss/mixins/_alert.scss14
-rw-r--r--scss/mixins/_background-variant.scss11
-rw-r--r--scss/mixins/_border-radius.scss21
-rw-r--r--scss/mixins/_buttons.scss56
-rw-r--r--scss/mixins/_center-block.scss7
-rw-r--r--scss/mixins/_clearfix.scss22
-rw-r--r--scss/mixins/_forms.scss88
-rw-r--r--scss/mixins/_gradients.scss56
-rw-r--r--scss/mixins/_grid-framework.scss81
-rw-r--r--scss/mixins/_grid.scss41
-rw-r--r--scss/mixins/_hide-text.scss8
-rw-r--r--scss/mixins/_image.scss35
-rw-r--r--scss/mixins/_label.scss12
-rw-r--r--scss/mixins/_list-group.scss30
-rw-r--r--scss/mixins/_media-queries.scss25
-rw-r--r--scss/mixins/_nav-divider.scss10
-rw-r--r--scss/mixins/_navbar-align.scss9
-rw-r--r--scss/mixins/_pagination.scss23
-rw-r--r--scss/mixins/_progress.scss17
-rw-r--r--scss/mixins/_reset-filter.scss8
-rw-r--r--scss/mixins/_resize.scss6
-rw-r--r--scss/mixins/_responsive-visibility.scss21
-rw-r--r--scss/mixins/_size.scss10
-rw-r--r--scss/mixins/_tab-focus.scss9
-rw-r--r--scss/mixins/_table-row.scss28
-rw-r--r--scss/mixins/_text-emphasis.scss10
-rw-r--r--scss/mixins/_text-overflow.scss8
66 files changed, 7278 insertions, 0 deletions
diff --git a/scss/.csscomb.json b/scss/.csscomb.json
new file mode 100644
index 000000000..40695a478
--- /dev/null
+++ b/scss/.csscomb.json
@@ -0,0 +1,304 @@
+{
+ "always-semicolon": true,
+ "block-indent": 2,
+ "color-case": "lower",
+ "color-shorthand": true,
+ "element-case": "lower",
+ "eof-newline": true,
+ "leading-zero": false,
+ "remove-empty-rulesets": true,
+ "space-after-colon": 1,
+ "space-after-combinator": 1,
+ "space-before-selector-delimiter": 0,
+ "space-between-declarations": "\n",
+ "space-after-opening-brace": "\n",
+ "space-before-closing-brace": "\n",
+ "space-before-colon": 0,
+ "space-before-combinator": 1,
+ "space-before-opening-brace": 1,
+ "strip-spaces": true,
+ "unitless-zero": true,
+ "vendor-prefix-align": true,
+ "sort-order": [
+ [
+ "position",
+ "top",
+ "right",
+ "bottom",
+ "left",
+ "z-index",
+ "display",
+ "float",
+ "width",
+ "min-width",
+ "max-width",
+ "height",
+ "min-height",
+ "max-height",
+ "-webkit-box-sizing",
+ "-moz-box-sizing",
+ "box-sizing",
+ "-webkit-appearance",
+ "padding",
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left",
+ "margin",
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left",
+ "overflow",
+ "overflow-x",
+ "overflow-y",
+ "-webkit-overflow-scrolling",
+ "-ms-overflow-x",
+ "-ms-overflow-y",
+ "-ms-overflow-style",
+ "clip",
+ "clear",
+ "font",
+ "font-family",
+ "font-size",
+ "font-style",
+ "font-weight",
+ "font-variant",
+ "font-size-adjust",
+ "font-stretch",
+ "font-effect",
+ "font-emphasize",
+ "font-emphasize-position",
+ "font-emphasize-style",
+ "font-smooth",
+ "-webkit-hyphens",
+ "-moz-hyphens",
+ "hyphens",
+ "line-height",
+ "color",
+ "text-align",
+ "-webkit-text-align-last",
+ "-moz-text-align-last",
+ "-ms-text-align-last",
+ "text-align-last",
+ "text-emphasis",
+ "text-emphasis-color",
+ "text-emphasis-style",
+ "text-emphasis-position",
+ "text-decoration",
+ "text-indent",
+ "text-justify",
+ "text-outline",
+ "-ms-text-overflow",
+ "text-overflow",
+ "text-overflow-ellipsis",
+ "text-overflow-mode",
+ "text-shadow",
+ "text-transform",
+ "text-wrap",
+ "-webkit-text-size-adjust",
+ "-ms-text-size-adjust",
+ "letter-spacing",
+ "-ms-word-break",
+ "word-break",
+ "word-spacing",
+ "-ms-word-wrap",
+ "word-wrap",
+ "-moz-tab-size",
+ "-o-tab-size",
+ "tab-size",
+ "white-space",
+ "vertical-align",
+ "list-style",
+ "list-style-position",
+ "list-style-type",
+ "list-style-image",
+ "pointer-events",
+ "-ms-touch-action",
+ "touch-action",
+ "cursor",
+ "visibility",
+ "zoom",
+ "flex-direction",
+ "flex-order",
+ "flex-pack",
+ "flex-align",
+ "table-layout",
+ "empty-cells",
+ "caption-side",
+ "border-spacing",
+ "border-collapse",
+ "content",
+ "quotes",
+ "counter-reset",
+ "counter-increment",
+ "resize",
+ "-webkit-user-select",
+ "-moz-user-select",
+ "-ms-user-select",
+ "-o-user-select",
+ "user-select",
+ "nav-index",
+ "nav-up",
+ "nav-right",
+ "nav-down",
+ "nav-left",
+ "background",
+ "background-color",
+ "background-image",
+ "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
+ "filter:progid:DXImageTransform.Microsoft.gradient",
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
+ "filter",
+ "background-repeat",
+ "background-attachment",
+ "background-position",
+ "background-position-x",
+ "background-position-y",
+ "-webkit-background-clip",
+ "-moz-background-clip",
+ "background-clip",
+ "background-origin",
+ "-webkit-background-size",
+ "-moz-background-size",
+ "-o-background-size",
+ "background-size",
+ "border",
+ "border-color",
+ "border-style",
+ "border-width",
+ "border-top",
+ "border-top-color",
+ "border-top-style",
+ "border-top-width",
+ "border-right",
+ "border-right-color",
+ "border-right-style",
+ "border-right-width",
+ "border-bottom",
+ "border-bottom-color",
+ "border-bottom-style",
+ "border-bottom-width",
+ "border-left",
+ "border-left-color",
+ "border-left-style",
+ "border-left-width",
+ "border-radius",
+ "border-top-left-radius",
+ "border-top-right-radius",
+ "border-bottom-right-radius",
+ "border-bottom-left-radius",
+ "-webkit-border-image",
+ "-moz-border-image",
+ "-o-border-image",
+ "border-image",
+ "-webkit-border-image-source",
+ "-moz-border-image-source",
+ "-o-border-image-source",
+ "border-image-source",
+ "-webkit-border-image-slice",
+ "-moz-border-image-slice",
+ "-o-border-image-slice",
+ "border-image-slice",
+ "-webkit-border-image-width",
+ "-moz-border-image-width",
+ "-o-border-image-width",
+ "border-image-width",
+ "-webkit-border-image-outset",
+ "-moz-border-image-outset",
+ "-o-border-image-outset",
+ "border-image-outset",
+ "-webkit-border-image-repeat",
+ "-moz-border-image-repeat",
+ "-o-border-image-repeat",
+ "border-image-repeat",
+ "outline",
+ "outline-width",
+ "outline-style",
+ "outline-color",
+ "outline-offset",
+ "-webkit-box-shadow",
+ "-moz-box-shadow",
+ "box-shadow",
+ "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
+ "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
+ "opacity",
+ "-ms-interpolation-mode",
+ "-webkit-transition",
+ "-moz-transition",
+ "-ms-transition",
+ "-o-transition",
+ "transition",
+ "-webkit-transition-delay",
+ "-moz-transition-delay",
+ "-ms-transition-delay",
+ "-o-transition-delay",
+ "transition-delay",
+ "-webkit-transition-timing-function",
+ "-moz-transition-timing-function",
+ "-ms-transition-timing-function",
+ "-o-transition-timing-function",
+ "transition-timing-function",
+ "-webkit-transition-duration",
+ "-moz-transition-duration",
+ "-ms-transition-duration",
+ "-o-transition-duration",
+ "transition-duration",
+ "-webkit-transition-property",
+ "-moz-transition-property",
+ "-ms-transition-property",
+ "-o-transition-property",
+ "transition-property",
+ "-webkit-transform",
+ "-moz-transform",
+ "-ms-transform",
+ "-o-transform",
+ "transform",
+ "-webkit-transform-origin",
+ "-moz-transform-origin",
+ "-ms-transform-origin",
+ "-o-transform-origin",
+ "transform-origin",
+ "-webkit-animation",
+ "-moz-animation",
+ "-ms-animation",
+ "-o-animation",
+ "animation",
+ "-webkit-animation-name",
+ "-moz-animation-name",
+ "-ms-animation-name",
+ "-o-animation-name",
+ "animation-name",
+ "-webkit-animation-duration",
+ "-moz-animation-duration",
+ "-ms-animation-duration",
+ "-o-animation-duration",
+ "animation-duration",
+ "-webkit-animation-play-state",
+ "-moz-animation-play-state",
+ "-ms-animation-play-state",
+ "-o-animation-play-state",
+ "animation-play-state",
+ "-webkit-animation-timing-function",
+ "-moz-animation-timing-function",
+ "-ms-animation-timing-function",
+ "-o-animation-timing-function",
+ "animation-timing-function",
+ "-webkit-animation-delay",
+ "-moz-animation-delay",
+ "-ms-animation-delay",
+ "-o-animation-delay",
+ "animation-delay",
+ "-webkit-animation-iteration-count",
+ "-moz-animation-iteration-count",
+ "-ms-animation-iteration-count",
+ "-o-animation-iteration-count",
+ "animation-iteration-count",
+ "-webkit-animation-direction",
+ "-moz-animation-direction",
+ "-ms-animation-direction",
+ "-o-animation-direction",
+ "animation-direction"
+ ]
+ ]
+}
diff --git a/scss/.csslintrc b/scss/.csslintrc
new file mode 100644
index 000000000..19ceb82e9
--- /dev/null
+++ b/scss/.csslintrc
@@ -0,0 +1,20 @@
+{
+ "adjoining-classes": false,
+ "box-sizing": false,
+ "box-model": false,
+ "compatible-vendor-prefixes": false,
+ "fallback-colors": false,
+ "floats": false,
+ "font-sizes": false,
+ "gradients": false,
+ "important": false,
+ "known-properties": false,
+ "outline-none": false,
+ "qualified-headings": false,
+ "regex-selectors": false,
+ "shorthand": false,
+ "text-indent": false,
+ "unique-headings": false,
+ "universal-selector": false,
+ "unqualified-attributes": false
+}
diff --git a/scss/_alert.scss b/scss/_alert.scss
new file mode 100644
index 000000000..685ca314b
--- /dev/null
+++ b/scss/_alert.scss
@@ -0,0 +1,67 @@
+//
+// Alerts
+// --------------------------------------------------
+
+
+// Base styles
+// -------------------------
+
+.alert {
+ padding: $alert-padding;
+ margin-bottom: $line-height-computed;
+ border: 1px solid transparent;
+ @include border-radius($alert-border-radius);
+
+ // Headings for larger alerts
+ h4 {
+ margin-top: 0;
+ // Specified for the h4 to prevent conflicts of changing $headings-color
+ color: inherit;
+ }
+ // Provide class for links that match alerts
+ .alert-link {
+ font-weight: $alert-link-font-weight;
+ }
+
+ // Improve alignment and spacing of inner content
+ > p,
+ > ul {
+ margin-bottom: 0;
+ }
+ > p + p {
+ margin-top: 5px;
+ }
+}
+
+// Dismissible alerts
+//
+// Expand the right padding and account for the close button's positioning.
+
+.alert-dismissible {
+ padding-right: ($alert-padding + 20);
+
+ // Adjust close link position
+ .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+ }
+}
+
+// Alternate styles
+//
+// Generate contextual modifier classes for colorizing the alert.
+
+.alert-success {
+ @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
+}
+.alert-info {
+ @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
+}
+.alert-warning {
+ @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);
+}
+.alert-danger {
+ @include alert-variant($alert-danger-bg, $alert-danger-border,$alert-danger-text);
+}
diff --git a/scss/_animation.scss b/scss/_animation.scss
new file mode 100644
index 000000000..85156135d
--- /dev/null
+++ b/scss/_animation.scss
@@ -0,0 +1,34 @@
+//
+// Component animations
+// --------------------------------------------------
+
+.fade {
+ opacity: 0;
+ transition: opacity .15s linear;
+
+ &.in {
+ opacity: 1;
+ }
+}
+
+.collapse {
+ display: none;
+ visibility: hidden;
+
+ &.in {
+ display: block;
+ visibility: visible;
+ }
+ // tr&.in { display: table-row; }
+ // tbody&.in { display: table-row-group; }
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ transition: height .35s ease;
+ transition-property: height, visibility;
+ transition-duration: .35s;
+ transition-timing-function: ease;
+}
diff --git a/scss/_badge.scss b/scss/_badge.scss
new file mode 100644
index 000000000..f3c7442ea
--- /dev/null
+++ b/scss/_badge.scss
@@ -0,0 +1,56 @@
+//
+// Badges
+// --------------------------------------------------
+
+
+// Base class
+.badge {
+ position: relative;
+ top: -.1em;
+ display: inline-block;
+ padding-left: .6em;
+ padding-right: .6em;
+ font-size: .75em;
+ font-weight: $badge-font-weight;
+ color: $badge-color;
+ text-align: center;
+ white-space: nowrap;
+ background-color: $badge-bg;
+ @include border-radius($badge-border-radius);
+
+ // Empty badges collapse automatically
+ &:empty {
+ display: none;
+ }
+
+ &.pull-left,
+ &.pull-right {
+ top: .2em;
+ }
+
+ // Account for badges in navs
+ .list-group-item.active > &,
+ .nav-pills > .active > a > & {
+ color: $badge-active-color;
+ background-color: $badge-active-bg;
+ }
+ .list-group-item > & {
+ float: right;
+ }
+ .list-group-item > & + & {
+ margin-right: 5px;
+ }
+ .nav-pills > li > a > & {
+ margin-left: 3px;
+ }
+}
+
+// Hover state, but only for links
+a.badge {
+ &:hover,
+ &:focus {
+ color: $badge-link-hover-color;
+ text-decoration: none;
+ cursor: pointer;
+ }
+}
diff --git a/scss/_breadcrumb.scss b/scss/_breadcrumb.scss
new file mode 100644
index 000000000..9af8c4330
--- /dev/null
+++ b/scss/_breadcrumb.scss
@@ -0,0 +1,27 @@
+//
+// Breadcrumbs
+// --------------------------------------------------
+
+
+.breadcrumb {
+ padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;
+ margin-bottom: $line-height-computed;
+ list-style: none;
+ background-color: $breadcrumb-bg;
+ @include border-radius($border-radius-base);
+
+ > li {
+ display: inline-block;
+
+ + li:before {
+ content: "#{breadcrumb-divider}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
+ padding-left: .5rem;
+ padding-right: .5rem;
+ color: $breadcrumb-divider-color;
+ }
+ }
+
+ > .active {
+ color: $breadcrumb-active-color;
+ }
+}
diff --git a/scss/_button-group.scss b/scss/_button-group.scss
new file mode 100644
index 000000000..abf28efeb
--- /dev/null
+++ b/scss/_button-group.scss
@@ -0,0 +1,250 @@
+//
+// Button groups
+// --------------------------------------------------
+
+// Make the div behave like a button
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle; // match .btn alignment given font-size hack above
+
+ > .btn {
+ position: relative;
+ float: left;
+
+ // Bring the "active" button to the front
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
+ z-index: 2;
+ }
+ }
+}
+
+// Prevent double borders when buttons are next to each other
+.btn-group {
+ .btn + .btn,
+ .btn + .btn-group,
+ .btn-group + .btn,
+ .btn-group + .btn-group {
+ margin-left: -1px;
+ }
+}
+
+// Optional: Group multiple button groups together for a toolbar
+.btn-toolbar {
+ margin-left: -5px; // Offset the first child's margin
+ @include clearfix();
+
+ .btn-group,
+ .input-group {
+ float: left;
+ }
+
+ > .btn,
+ > .btn-group,
+ > .input-group {
+ margin-left: 5px;
+ }
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
+.btn-group > .btn:first-child {
+ margin-left: 0;
+
+ &:not(:last-child):not(.dropdown-toggle) {
+ @include border-right-radius(0);
+ }
+}
+// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ @include border-left-radius(0);
+}
+
+// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child {
+ > .btn:last-child,
+ > .dropdown-toggle {
+ @include border-right-radius(0);
+ }
+}
+.btn-group > .btn-group:last-child > .btn:first-child {
+ @include border-left-radius(0);
+}
+
+// On active and open, don't show outline
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+
+// Sizing
+//
+// Remix the default button sizing classes into new ones for easier manipulation.
+
+.btn-group-xs > .btn { @extend .btn-xs; }
+.btn-group-sm > .btn { @extend .btn-sm; }
+.btn-group-lg > .btn { @extend .btn-lg; }
+
+
+// Split button dropdowns
+// ----------------------
+
+// Give the line between buttons some depth
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+// The clickable button for toggling the menu
+// Remove the gradient and set the same inset shadow as the :active state
+.btn-group.open .dropdown-toggle {
+ @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+
+ // Show no shadow for `.btn-link` since it has no other button styles.
+ &.btn-link {
+ @include box-shadow(none);
+ }
+}
+
+
+// Reposition the caret
+.btn .caret {
+ margin-left: 0;
+}
+// Carets in other button sizes
+.btn-lg .caret {
+ border-width: $caret-width-large $caret-width-large 0;
+ border-bottom-width: 0;
+}
+// Upside down carets for .dropup
+.dropup .btn-lg .caret {
+ border-width: 0 $caret-width-large $caret-width-large;
+}
+
+
+// Vertical button groups
+// ----------------------
+
+.btn-group-vertical {
+ > .btn,
+ > .btn-group,
+ > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+ }
+
+ // Clear floats so dropdown menus can be properly placed
+ > .btn-group {
+ @include clearfix();
+
+ > .btn {
+ float: none;
+ }
+ }
+
+ > .btn + .btn,
+ > .btn + .btn-group,
+ > .btn-group + .btn,
+ > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+ }
+}
+
+.btn-group-vertical > .btn {
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ }
+ &:first-child:not(:last-child) {
+ border-top-right-radius: $border-radius-base;
+ @include border-bottom-radius(0);
+ }
+ &:last-child:not(:first-child) {
+ border-bottom-left-radius: $border-radius-base;
+ @include border-top-radius(0);
+ }
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) {
+ > .btn:last-child,
+ > .dropdown-toggle {
+ @include border-bottom-radius(0);
+ }
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ @include border-top-radius(0);
+}
+
+
+// Justified button groups
+// ----------------------
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+
+ > .btn,
+ > .btn-group {
+ float: none;
+ display: table-cell;
+ width: 1%;
+ }
+
+ > .btn-group .btn {
+ width: 100%;
+ }
+
+ > .btn-group .dropdown-menu {
+ left: auto;
+ }
+}
+
+
+// Checkbox and radio options
+//
+// In order to support the browser's form validation feedback, powered by the
+// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
+// `display: none;` or `visibility: hidden;` as that also hides the popover.
+// Simply visually hiding the inputs via `opacity` would leave them clickable in
+// certain cases which is prevented by using `clip` and `pointer-events`.
+// This way, we ensure a DOM element is visible to position the popover from.
+//
+// See https://github.com/twbs/bootstrap/pull/12794 and
+// https://github.com/twbs/bootstrap/pull/14559 for more information.
+
+[data-toggle="buttons"] {
+ > .btn,
+ > .btn-group > .btn {
+ input[type="radio"],
+ input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0,0,0,0);
+ pointer-events: none;
+ }
+ }
+}
diff --git a/scss/_buttons.scss b/scss/_buttons.scss
new file mode 100644
index 000000000..ed332c023
--- /dev/null
+++ b/scss/_buttons.scss
@@ -0,0 +1,156 @@
+//
+// Buttons
+// --------------------------------------------------
+
+
+// Base styles
+// --------------------------------------------------
+
+.btn {
+ display: inline-block;
+ margin-bottom: 0; // For input.btn
+ font-weight: $btn-font-weight;
+ text-align: center;
+ vertical-align: middle;
+ touch-action: manipulation;
+ cursor: pointer;
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+ border: $border-width solid transparent;
+ white-space: nowrap;
+ @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base);
+ user-select: none;
+ transition: all .2s ease-in-out;
+
+ &,
+ &:active,
+ &.active {
+ &:focus,
+ &.focus {
+ @include tab-focus();
+ }
+ }
+
+ &:hover,
+ &:focus,
+ &.focus {
+ text-decoration: none;
+ }
+
+ &:active,
+ &.active {
+ outline: 0;
+ background-image: none;
+ @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+ }
+
+ &.disabled,
+ &[disabled],
+ fieldset[disabled] & {
+ cursor: $cursor-disabled;
+ pointer-events: none; // Future-proof disabling of clicks
+ opacity: .65;
+ @include box-shadow(none);
+ }
+}
+
+
+// Alternate buttons
+// --------------------------------------------------
+
+.btn-primary {
+ @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
+}
+.btn-secondary {
+ @include button-variant($btn-secondary-color, $btn-secondary-bg, $btn-secondary-border);
+}
+.btn-info {
+ @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);
+}
+.btn-success {
+ @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
+}
+.btn-warning {
+ @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);
+}
+.btn-danger {
+ @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
+}
+
+
+// Link buttons
+// -------------------------
+
+// Make a button look and behave like a link
+.btn-link {
+ color: $link-color;
+ font-weight: normal;
+ border-radius: 0;
+
+ &,
+ &:active,
+ &.active,
+ &[disabled],
+ fieldset[disabled] & {
+ background-color: transparent;
+ @include box-shadow(none);
+ }
+ &,
+ &:hover,
+ &:focus,
+ &:active {
+ border-color: transparent;
+ }
+ &:hover,
+ &:focus {
+ color: $link-hover-color;
+ text-decoration: underline;
+ background-color: transparent;
+ }
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: $btn-link-disabled-color;
+ text-decoration: none;
+ }
+ }
+}
+
+
+// Button Sizes
+// --------------------------------------------------
+
+.btn-lg {
+ // line-height: ensure even-numbered height of button next to large input
+ @include button-size($padding-lg-vertical, $padding-lg-horizontal, $font-size-lg, $line-height-lg, $border-radius-lg);
+}
+.btn-sm {
+ // line-height: ensure proper height of button next to small input
+ @include button-size($padding-sm-vertical, $padding-sm-horizontal, $font-size-sm, $line-height-sm, $border-radius-sm);
+}
+.btn-xs {
+ @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-xs, $line-height-sm, $border-radius-sm);
+}
+
+
+// Block button
+// --------------------------------------------------
+
+.btn-block {
+ display: block;
+ width: 100%;
+}
+
+// Vertically space out multiple block buttons
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+// Specificity overrides
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+ &.btn-block {
+ width: 100%;
+ }
+}
diff --git a/scss/_card.scss b/scss/_card.scss
new file mode 100644
index 000000000..cbbbde38c
--- /dev/null
+++ b/scss/_card.scss
@@ -0,0 +1,196 @@
+//
+// Base styles
+//
+
+.card {
+ position: relative;
+ padding: 1.25rem;
+ margin-bottom: 1.25rem;
+ border: .075rem solid #eee;
+}
+.card-title {
+ margin-top: 0;
+ margin-bottom: .75rem;
+}
+.card-text:last-child {
+ margin-bottom: 0;
+}
+.card-actions {
+ .card-link + .card-link {
+ margin-left: .75rem;
+ }
+}
+.card-link:hover {
+ text-decoration: none;
+}
+
+
+//
+// Optional textual caps
+//
+
+.card-header {
+ padding: .75rem 1.25rem;
+ margin: -1.25rem -1.25rem 1.25rem;
+ border-bottom: .075rem solid #eee;
+ @include border-radius(.25rem .25rem 0 0);
+}
+.card-footer {
+ padding: .75rem 1.25rem;
+ margin: 1.25rem -1.25rem -1.25rem;
+ border-top: .075rem solid #eee;
+ @include border-radius(0 0 .25rem .25rem);
+}
+
+
+//
+// Background variations
+//
+
+.card-primary {
+ background-color: $brand-primary;
+ border-color: $brand-primary;
+}
+.card-success {
+ background-color: $brand-success;
+ border-color: $brand-success;
+}
+.card-info {
+ background-color: $brand-info;
+ border-color: $brand-info;
+}
+.card-warning {
+ background-color: $brand-warning;
+ border-color: $brand-warning;
+}
+.card-danger {
+ background-color: $brand-danger;
+ border-color: $brand-danger;
+}
+
+
+//
+// Inverse text within a card for use with dark backgrounds
+//
+
+.card-inverse {
+ .card-header,
+ .card-footer {
+ border-bottom: .075rem solid rgba(255,255,255,.2);
+ }
+ .card-header,
+ .card-footer,
+ .card-title,
+ .card-blockquote {
+ color: #fff;
+ }
+ .card-link,
+ .card-text,
+ .card-blockquote > footer {
+ color: rgba(255,255,255,.65);
+ }
+ .card-link:hover,
+ .card-link:focus {
+ color: #fff;
+ }
+}
+
+
+//
+// Blockquote
+//
+
+.card-blockquote {
+ border-left: 0;
+ padding: 0;
+ margin-bottom: 0;
+}
+
+// Card image
+.card-img {
+ margin: -1.325rem;
+ @include border-radius(.25rem);
+}
+.card-img-overlay {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1.25rem;
+}
+
+
+
+// Card image caps
+.card-img-top {
+ margin: -1.325rem -1.325rem 1.25rem;
+ @include border-radius(.25rem .25rem 0 0);
+}
+.card-img-bottom {
+ margin: 1.25rem -1.325rem -1.325rem;
+ @include border-radius(0 0 .25rem .25rem);
+}
+
+
+//
+// Card set
+//
+
+.card-set {
+ display: table;
+ table-layout: fixed;
+ border-spacing: 1.25rem 0;
+
+ .card {
+ float: none;
+ display: table-cell;
+ max-width: none;
+ }
+}
+.card-set-wrapper {
+ margin-left: -1.25rem;
+ margin-right: -1.25rem;
+}
+
+
+//
+// Card groups
+//
+
+.card-group {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+
+ .card {
+ float: none;
+ display: table-cell;
+ max-width: none;
+
+ + .card {
+ border-left: 0;
+ margin-left: 0;
+ }
+ }
+}
+
+
+//
+// Card
+//
+
+.card-columns {
+ -webkit-column-count: 3;
+ -moz-column-count: 3;
+ column-count: 3;
+ -webkit-column-gap: 1rem;
+ -moz-column-gap: 1rem;
+ column-gap: 1rem;
+
+ .card {
+ display: inline-block;
+ width: 100%; // Don't let them exceed the column width
+ /*margin-bottom: 1rem;*/
+ }
+}
diff --git a/scss/_carousel.scss b/scss/_carousel.scss
new file mode 100644
index 000000000..6085d7a63
--- /dev/null
+++ b/scss/_carousel.scss
@@ -0,0 +1,251 @@
+//
+// Carousel
+// --------------------------------------------------
+
+
+// Wrapper for the slide container and indicators
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ overflow: hidden;
+ width: 100%;
+
+ > .item {
+ display: none;
+ position: relative;
+ transition: .6s ease-in-out left;
+
+ // Account for jankitude on images
+ > img,
+ > a > img {
+ @extend .img-responsive;
+ line-height: 1;
+ }
+
+ // WebKit CSS3 transforms for supported devices
+ @media all and (transform-3d), (-webkit-transform-3d) {
+ transition: transform .6s ease-in-out;
+ backface-visibility: hidden;
+ perspective: 1000;
+
+ &.next,
+ &.active.right {
+ transform: translate3d(100%, 0, 0);
+ left: 0;
+ }
+ &.prev,
+ &.active.left {
+ transform: translate3d(-100%, 0, 0);
+ left: 0;
+ }
+ &.next.left,
+ &.prev.right,
+ &.active {
+ transform: translate3d(0, 0, 0);
+ left: 0;
+ }
+ }
+ }
+
+ > .active,
+ > .next,
+ > .prev {
+ display: block;
+ }
+
+ > .active {
+ left: 0;
+ }
+
+ > .next,
+ > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+
+ > .next {
+ left: 100%;
+ }
+ > .prev {
+ left: -100%;
+ }
+ > .next.left,
+ > .prev.right {
+ left: 0;
+ }
+
+ > .active.left {
+ left: -100%;
+ }
+ > .active.right {
+ left: 100%;
+ }
+
+}
+
+// Left/right controls for nav
+// ---------------------------
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: $carousel-control-width;
+ opacity: $carousel-control-opacity;
+ font-size: $carousel-control-font-size;
+ color: $carousel-control-color;
+ text-align: center;
+ text-shadow: $carousel-text-shadow;
+ // We can't have this transition here because WebKit cancels the carousel
+ // animation if you trip this while in the middle of another animation.
+
+ // Set gradients for backgrounds
+ &.left {
+ @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));
+ }
+ &.right {
+ left: auto;
+ right: 0;
+ @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));
+ }
+
+ // Hover/focus state
+ &:hover,
+ &:focus {
+ outline: 0;
+ color: $carousel-control-color;
+ text-decoration: none;
+ opacity: .9;
+ }
+
+ // Toggles
+ .icon-prev,
+ .icon-next {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ font-family: serif;
+ line-height: 1;
+ }
+ .icon-prev {
+ left: 50%;
+ margin-left: -10px;
+ }
+ .icon-next {
+ right: 50%;
+ margin-right: -10px;
+ }
+ .icon-prev {
+ &:before {
+ content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
+ }
+ }
+ .icon-next {
+ &:before {
+ content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
+ }
+ }
+}
+
+// Optional indicator pips
+//
+// Add an unordered list with the following class and add a list item for each
+// slide your carousel holds.
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ margin-left: -30%;
+ padding-left: 0;
+ list-style: none;
+ text-align: center;
+
+ li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ border: 1px solid $carousel-indicator-border-color;
+ border-radius: 10px;
+ cursor: pointer;
+
+ // IE9 hack for event handling
+ //
+ // Internet Explorer 9 does not support clicks on elements without a set
+ // `background-color`. We cannot use `filter` since that's not viewed as a
+ // background color by the browser. Thus, a hack is needed.
+ background-color: rgba(0,0,0,0); // IE9
+ }
+ .active {
+ margin: 0;
+ width: 12px;
+ height: 12px;
+ background-color: $carousel-indicator-active-bg;
+ }
+}
+
+// Optional captions
+// -----------------------------
+// Hidden by default for smaller viewports
+.carousel-caption {
+ position: absolute;
+ left: 15%;
+ right: 15%;
+ bottom: 20px;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: $carousel-caption-color;
+ text-align: center;
+ text-shadow: $carousel-text-shadow;
+
+ & .btn {
+ text-shadow: none; // No shadow for button elements in carousel-caption
+ }
+}
+
+
+// Scale up controls for tablets and up
+@include media-sm {
+ // Scale up the controls a smidge
+ .carousel-control {
+ .icon-prev,
+ .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .icon-prev {
+ margin-left: -15px;
+ }
+ .icon-next {
+ margin-right: -15px;
+ }
+ }
+
+ // Show and left align the captions
+ .carousel-caption {
+ left: 20%;
+ right: 20%;
+ padding-bottom: 30px;
+ }
+
+ // Move up the indicators
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
diff --git a/scss/_close.scss b/scss/_close.scss
new file mode 100644
index 000000000..76e4d5c29
--- /dev/null
+++ b/scss/_close.scss
@@ -0,0 +1,33 @@
+//
+// Close icons
+// --------------------------------------------------
+
+
+.close {
+ float: right;
+ font-size: ($font-size-base * 1.5);
+ font-weight: $close-font-weight;
+ line-height: 1;
+ color: $close-color;
+ text-shadow: $close-text-shadow;
+ opacity: .2;
+
+ &:hover,
+ &:focus {
+ color: $close-color;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: .5;
+ }
+
+ // Additional properties for button version
+ // iOS requires the button element instead of an anchor tag.
+ // If you want the anchor version, it requires `href="#"`.
+ &button {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ }
+}
diff --git a/scss/_code.scss b/scss/_code.scss
new file mode 100644
index 000000000..b495d4f20
--- /dev/null
+++ b/scss/_code.scss
@@ -0,0 +1,66 @@
+//
+// Code (inline and block)
+// --------------------------------------------------
+
+
+// Inline and block code styles
+code,
+kbd,
+pre,
+samp {
+ font-family: $font-family-monospace;
+}
+
+// Inline code
+code {
+ padding: .2rem .4rem;
+ font-size: 90%;
+ color: $code-color;
+ background-color: $code-bg;
+ @include border-radius($border-radius-base);
+}
+
+// User input typically entered via keyboard
+kbd {
+ padding: .2rem .4rem;
+ font-size: 90%;
+ color: $kbd-color;
+ background-color: $kbd-bg;
+ @include border-radius($border-radius-sm);
+ @include box-shadow(inset 0 -.1rem 0 rgba(0,0,0,.25));
+
+ kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ @include box-shadow(none);
+ }
+}
+
+// Blocks of code
+pre {
+ display: block;
+ padding: 1.5rem;
+ margin-top: 0;
+ margin-bottom: 1rem;
+ font-size: 90%;
+ line-height: $line-height-base;
+ color: $pre-color;
+ background-color: $pre-bg;
+ @include border-radius($border-radius-base);
+
+ // Account for some code outputs that place code tags in pre tags
+ code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ background-color: transparent;
+ border-radius: 0;
+ }
+}
+
+// Enable scrollable blocks of code
+.pre-scrollable {
+ max-height: $pre-scrollable-max-height;
+ overflow-y: scroll;
+}
diff --git a/scss/_dropdown.scss b/scss/_dropdown.scss
new file mode 100644
index 000000000..c9f57ba2d
--- /dev/null
+++ b/scss/_dropdown.scss
@@ -0,0 +1,208 @@
+//
+// Dropdown menus
+// --------------------------------------------------
+
+// The dropdown wrapper (div)
+.dropdown {
+ position: relative;
+}
+
+.dropdown-toggle {
+ // Generate the caret automatically
+ &:after {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ content: "";
+ margin-left: .25rem;
+ vertical-align: middle;
+ border-top: $caret-width-base solid;
+ border-right: $caret-width-base solid transparent;
+ border-left: $caret-width-base solid transparent;
+ }
+
+ // Prevent the focus on the dropdown toggle when closing dropdowns
+ &:focus {
+ outline: 0;
+ }
+}
+
+// The dropdown menu (ul)
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: $zindex-dropdown;
+ display: none; // none by default, but block on "open" of the menu
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0; // override default ul
+ list-style: none;
+ font-size: $font-size-base;
+ text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
+ background-color: $dropdown-bg;
+ border: 1px solid $dropdown-border;
+ @include border-radius($border-radius-base);
+ @include box-shadow(0 6px 12px rgba(0,0,0,.175));
+ background-clip: padding-box;
+
+ // Dividers (basically an hr) within the dropdown
+ .divider {
+ @include nav-divider($dropdown-divider-bg);
+ }
+
+ // Links within the dropdown menu
+ > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: $line-height-base;
+ color: $dropdown-link-color;
+ white-space: nowrap; // prevent links from randomly breaking onto new lines
+ }
+}
+
+// Hover/Focus state
+.dropdown-menu > li > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: $dropdown-link-hover-color;
+ background-color: $dropdown-link-hover-bg;
+ }
+}
+
+// Active state
+.dropdown-menu > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $dropdown-link-active-color;
+ text-decoration: none;
+ outline: 0;
+ background-color: $dropdown-link-active-bg;
+ }
+}
+
+// Disabled state
+//
+// Gray out text and ensure the hover/focus state remains gray
+
+.dropdown-menu > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $dropdown-link-disabled-color;
+ }
+
+ // Nuke hover/focus effects
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none; // Remove CSS gradient
+ @include reset-filter();
+ cursor: $cursor-disabled;
+ }
+}
+
+// Open state for the dropdown
+.open {
+ // Show the menu
+ > .dropdown-menu {
+ display: block;
+ }
+
+ // Remove the outline when :focus is triggered
+ > a {
+ outline: 0;
+ }
+}
+
+// Menu positioning
+//
+// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
+// menu with the parent.
+.dropdown-menu-right {
+ left: auto; // Reset the default from `.dropdown-menu`
+ right: 0;
+}
+// With v3, we enabled auto-flipping if you have a dropdown within a right
+// aligned nav component. To enable the undoing of that, we provide an override
+// to restore the default dropdown menu alignment.
+//
+// This is only for left-aligning a dropdown menu within a `.navbar-right` or
+// `.pull-right` nav component.
+.dropdown-menu-left {
+ left: 0;
+ right: auto;
+}
+
+// Dropdown section headers
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: $font-size-sm;
+ line-height: $line-height-base;
+ color: $dropdown-header-color;
+ white-space: nowrap; // as with > li > a
+}
+
+// Backdrop to catch body clicks on mobile, etc.
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: ($zindex-dropdown - 10);
+}
+
+// Right aligned dropdowns
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+// Allow for dropdowns to go bottom up (aka, dropup-menu)
+//
+// Just add .dropup after the standard .dropdown class and you're set, bro.
+// TODO: abstract this so that the navbar fixed styles are not placed here?
+
+.dropup,
+.navbar-fixed-bottom .dropdown {
+ // Reverse the caret
+ .caret {
+ border-top: 0;
+ border-bottom: $caret-width-base solid;
+ content: "";
+ }
+ // Different positioning for bottom up menu
+ .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+ }
+}
+
+
+// Component alignment
+//
+// Reiterate per navbar.less and the modified component alignment there.
+//
+// TODO: remove?
+
+// @include media-sm {
+// .navbar-right {
+// .dropdown-menu {
+// .dropdown-menu-right();
+// }
+// // Necessary for overrides of the default right aligned menu.
+// // Will remove come v4 in all likelihood.
+// .dropdown-menu-left {
+// .dropdown-menu-left();
+// }
+// }
+// }
diff --git a/scss/_forms.scss b/scss/_forms.scss
new file mode 100644
index 000000000..351e66a02
--- /dev/null
+++ b/scss/_forms.scss
@@ -0,0 +1,556 @@
+//
+// Forms
+// --------------------------------------------------
+
+
+// Normalize non-controls
+//
+// Restyle and baseline non-control form elements.
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
+ // so we reset that to ensure it behaves more like a standard block element.
+ // See https://github.com/twbs/bootstrap/issues/12359.
+ min-width: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: $line-height-computed;
+ font-size: ($font-size-base * 1.5);
+ line-height: inherit;
+ color: $legend-color;
+ border: 0;
+ border-bottom: 1px solid $legend-border-color;
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+
+// Normalize form controls
+//
+// While most of our form styles require extra classes, some basic normalization
+// is required to ensure optimum display with or without those classes to better
+// address browser inconsistencies.
+
+// Override content-box in Normalize (* isn't specific enough)
+input[type="search"] {
+ box-sizing: border-box;
+}
+
+// Position radios and checkboxes better
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9; // IE9
+ line-height: normal;
+}
+
+// Set the height of file controls to match text inputs
+input[type="file"] {
+ display: block;
+}
+
+// Make range inputs behave like textual form controls
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+
+// Make multiple select elements height not fixed
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+// Focus for file, radio, and checkbox
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ @include tab-focus();
+}
+
+// Adjust output element
+output {
+ display: block;
+ padding-top: ($padding-base-vertical + 1);
+ font-size: $font-size-base;
+ line-height: $line-height-base;
+ color: $input-color;
+}
+
+
+//
+// Common form controls
+//
+
+// Shared size and type resets for form controls. Apply `.form-control` to any
+// of the following form controls:
+//
+// select
+// textarea
+// input[type="text"]
+// input[type="password"]
+// input[type="datetime"]
+// input[type="datetime-local"]
+// input[type="date"]
+// input[type="month"]
+// input[type="time"]
+// input[type="week"]
+// input[type="number"]
+// input[type="email"]
+// input[type="url"]
+// input[type="search"]
+// input[type="tel"]
+// input[type="color"]
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
+ padding: $padding-base-vertical $padding-base-horizontal;
+ font-size: $font-size-base;
+ line-height: $line-height-base;
+ color: $input-color;
+ background-color: $input-bg;
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+ border: 1px solid $input-border;
+ @include border-radius($input-border-radius);
+ @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+
+ // Customize the `:focus` state to imitate native WebKit styles.
+ @include form-control-focus();
+
+ // Placeholder
+ &::placeholder {
+ color: $input-color-placeholder;
+ }
+
+ // Disabled and read-only inputs
+ //
+ // HTML5 says that controls under a fieldset > legend:first-child won't be
+ // disabled if the fieldset is disabled. Due to implementation difficulty, we
+ // don't honor that edge case; we style them as disabled anyway.
+ &[disabled],
+ &[readonly],
+ fieldset[disabled] & {
+ cursor: $cursor-disabled;
+ background-color: $input-bg-disabled;
+ opacity: 1; // iOS fix for unreadable disabled content
+ }
+
+ // Reset height for `textarea`s
+ &textarea {
+ height: auto;
+ padding-top: $padding-base-horizontal;
+ padding-bottom: $padding-base-horizontal;
+ }
+}
+
+
+// Search inputs in iOS
+//
+// This overrides the extra rounded corners on search inputs in iOS so that our
+// `.form-control` class can properly style them. Note that this cannot simply
+// be added to `.form-control` as it's not specific enough. For details, see
+// https://github.com/twbs/bootstrap/issues/11586.
+
+input[type="search"] {
+ -webkit-appearance: none;
+}
+
+
+// Special styles for iOS temporal inputs
+//
+// In Mobile Safari, setting `display: block` on temporal inputs causes the
+// text within the input to become vertically misaligned. As a workaround, we
+// set a pixel line-height that matches the given height of the input, but only
+// for Safari.
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ input[type="date"],
+ input[type="time"],
+ input[type="datetime-local"],
+ input[type="month"] {
+ line-height: $input-height-base;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm {
+ line-height: $input-height-sm;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg {
+ line-height: $input-height-lg;
+ }
+}
+
+
+// Form groups
+//
+// Designed to help with the organization and spacing of vertical forms. For
+// horizontal forms, use the predefined grid classes.
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+
+// Checkboxes and radios
+//
+// Indent the labels to position radios/checkboxes as hanging controls.
+
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+
+ label {
+ min-height: $line-height-computed; // Ensure the input doesn't jump when there is no text
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+ }
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-left: -20px;
+ margin-top: 4px \9;
+}
+
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
+}
+
+// Radios and checkboxes on same line
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px; // space out consecutive inline controls
+}
+
+// Apply same disabled cursor tweak as for inputs
+// Some special care is needed because <label>s don't inherit their parent's `cursor`.
+//
+// Note: Neither radios nor checkboxes can be readonly.
+input[type="radio"],
+input[type="checkbox"] {
+ &[disabled],
+ &.disabled,
+ fieldset[disabled] & {
+ cursor: $cursor-disabled;
+ }
+}
+// These classes are used directly on <label>s
+.radio-inline,
+.checkbox-inline {
+ &.disabled,
+ fieldset[disabled] & {
+ cursor: $cursor-disabled;
+ }
+}
+// These classes are used on elements with <label> descendants
+.radio,
+.checkbox {
+ &.disabled,
+ fieldset[disabled] & {
+ label {
+ cursor: $cursor-disabled;
+ }
+ }
+}
+
+
+// Static form control text
+//
+// Apply class to a `p` element to make any string of text align with labels in
+// a horizontal form layout.
+
+.form-control-static {
+ // Size it appropriately next to real form controls
+ padding-top: ($padding-base-vertical + 1);
+ padding-bottom: ($padding-base-vertical + 1);
+ // Remove default margin from `p`
+ margin-bottom: 0;
+
+ &.input-lg,
+ &.input-sm {
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+
+// Form control sizing
+//
+// Build on `.form-control` with modifier classes to decrease or increase the
+// height and font-size of form controls.
+//
+// The `.form-group-* form-control` variations are sadly duplicated to avoid the
+// issue documented in https://github.com/twbs/bootstrap/issues/15074.
+
+@include input-size('.input-sm', $input-height-sm, $padding-sm-vertical, $padding-sm-horizontal, $font-size-sm, $line-height-sm, $input-border-radius-sm);
+
+.form-group-sm {
+ @include input-size('.form-control', $input-height-sm, $padding-sm-vertical, $padding-sm-horizontal, $font-size-sm, $line-height-sm, $input-border-radius-sm);
+}
+
+@include input-size('.input-lg', $input-height-lg, $padding-lg-vertical, $padding-lg-horizontal, $font-size-lg, $line-height-lg, $input-border-radius-lg);
+
+.form-group-lg {
+ @include input-size('.form-control', $input-height-lg, $padding-lg-vertical, $padding-lg-horizontal, $font-size-lg, $line-height-lg, $input-border-radius-lg);
+}
+
+
+// Form control feedback states
+//
+// Apply contextual and semantic states to individual form controls.
+
+.has-feedback {
+ // Enable absolute positioning
+ position: relative;
+
+ // Ensure icons don't overlap text
+ .form-control {
+ padding-right: ($input-height-base * 1.25);
+ }
+}
+// Feedback icon
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2; // Ensure icon is above input groups
+ display: block;
+ width: $input-height-base;
+ height: $input-height-base;
+ line-height: $input-height-base;
+ text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback {
+ width: $input-height-lg;
+ height: $input-height-lg;
+ line-height: $input-height-lg;
+}
+.input-sm + .form-control-feedback {
+ width: $input-height-sm;
+ height: $input-height-sm;
+ line-height: $input-height-sm;
+}
+
+// Form validation states
+.has-success {
+ @include form-control-validation($state-success-text, $state-success-text, $state-success-bg);
+}
+.has-warning {
+ @include form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg);
+}
+.has-error {
+ @include form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg);
+}
+
+// Reposition feedback icon if input has visible label above
+.has-feedback label {
+
+ & ~ .form-control-feedback {
+ top: ($line-height-computed + 5); // Height of the `label` and its margin
+ }
+ &.sr-only ~ .form-control-feedback {
+ top: 0;
+ }
+}
+
+
+// Help text
+//
+// Apply to any element you wish to create light text for placement immediately
+// below a form control. Use for general help, formatting, or instructional text.
+
+.help-block {
+ display: block; // account for any element using help-block
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: lighten($text-color, 25%); // lighten the text some for contrast
+}
+
+
+// Inline forms
+//
+// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
+// forms begin stacked on extra small (mobile) devices and then go inline when
+// viewports reach <768px.
+//
+// Requires wrapping inputs and labels with `.form-group` for proper display of
+// default HTML form controls and our custom form controls (e.g., input groups).
+//
+// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
+
+.form-inline {
+
+ // Kick in the inline
+ @include media-sm {
+ // Inline-block all the things for "inline"
+ .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ // In navbar-form, allow folks to *not* use `.form-group`
+ .form-control {
+ display: inline-block;
+ width: auto; // Prevent labels from stacking above inputs in `.form-group`
+ vertical-align: middle;
+ }
+
+ // Make static controls behave like regular ones
+ .form-control-static {
+ display: inline-block;
+ }
+
+ .input-group {
+ display: inline-table;
+ vertical-align: middle;
+
+ .input-group-addon,
+ .input-group-btn,
+ .form-control {
+ width: auto;
+ }
+ }
+
+ // Input groups need that 100% width though
+ .input-group > .form-control {
+ width: 100%;
+ }
+
+ .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ // Remove default margin on radios/checkboxes that were used for stacking, and
+ // then undo the floating of radios and checkboxes to match (which also avoids
+ // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
+ .radio,
+ .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+
+ label {
+ padding-left: 0;
+ }
+ }
+ .radio input[type="radio"],
+ .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+
+ // Re-override the feedback icon.
+ .has-feedback .form-control-feedback {
+ top: 0;
+ }
+ }
+}
+
+
+// Horizontal forms
+//
+// Horizontal forms are built on grid classes and allow you to create forms with
+// labels on the left and inputs on the right.
+
+.form-horizontal {
+
+ // Consistent vertical alignment of radios and checkboxes
+ //
+ // Labels also get some reset styles, but that is scoped to a media query below.
+ .radio,
+ .checkbox,
+ .radio-inline,
+ .checkbox-inline {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-top: ($padding-base-vertical + .1); // Default padding plus a border
+ }
+ // Account for padding we're adding to ensure the alignment and of help text
+ // and other content below items
+ .radio,
+ .checkbox {
+ min-height: ($line-height-computed + ($padding-base-vertical + .1));
+ }
+
+ // Make form groups behave like rows
+ .form-group {
+ @include make-row();
+ }
+
+ // Reset spacing and right align labels, but scope to media queries so that
+ // labels on narrow viewports stack the same as a default form example.
+ @include media-sm {
+ .control-label {
+ text-align: right;
+ margin-bottom: 0;
+ padding-top: ($padding-base-vertical + .1); // Default padding plus a border
+ }
+ }
+
+ // Validation states
+ //
+ // Reposition the icon because it's now within a grid column and columns have
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
+ .has-feedback .form-control-feedback {
+ right: ($grid-gutter-width / 2);
+ }
+
+ // Form group sizes
+ //
+ // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
+ // inputs and labels within a `.form-group`.
+ .form-group-lg {
+ @media (min-width: $screen-sm-min) {
+ .control-label {
+ padding-top: $padding-lg-vertical;
+ }
+ }
+ }
+ .form-group-sm {
+ @media (min-width: $screen-sm-min) {
+ .control-label {
+ padding-top: ($padding-sm-vertical + .1);
+ }
+ }
+ }
+}
diff --git a/scss/_grid.scss b/scss/_grid.scss
new file mode 100644
index 000000000..57a2dd006
--- /dev/null
+++ b/scss/_grid.scss
@@ -0,0 +1,84 @@
+//
+// Grid system
+// --------------------------------------------------
+
+
+// Container widths
+//
+// Set the container width, and override it for fixed navbars in media queries.
+
+.container {
+ @include make-container();
+
+ @media (min-width: $screen-sm-min) {
+ max-width: $container-sm;
+ }
+ @media (min-width: $screen-md-min) {
+ max-width: $container-md;
+ }
+ @media (min-width: $screen-lg-min) {
+ max-width: $container-lg;
+ }
+}
+
+
+// Fluid container
+//
+// Utilizes the mixin meant for fixed width containers, but without any defined
+// width for fluid, full width layouts.
+
+.container-fluid {
+ @include make-container();
+}
+
+
+// Row
+//
+// Rows contain and clear the floats of your columns.
+
+.row {
+ @include make-row();
+}
+
+
+// Columns
+//
+// Common styles for small and large grid columns
+
+@include make-grid-columns();
+
+
+// Extra small grid
+//
+// Columns, offsets, pushes, and pulls for extra small devices like
+// smartphones.
+
+@include make-grid(xs);
+
+
+// Small grid
+//
+// Columns, offsets, pushes, and pulls for the small device range, from phones
+// to tablets.
+
+@include media-sm {
+ @include make-grid(sm);
+}
+
+
+// Medium grid
+//
+// Columns, offsets, pushes, and pulls for the desktop device range.
+
+@include media-md {
+ @include make-grid(md);
+}
+
+
+// Large grid
+//
+// Columns, offsets, pushes, and pulls for the large desktop device range.
+
+@include media-lg {
+ @include make-grid(lg);
+}
diff --git a/scss/_input-group.scss b/scss/_input-group.scss
new file mode 100644
index 000000000..6b9c6bc5e
--- /dev/null
+++ b/scss/_input-group.scss
@@ -0,0 +1,166 @@
+//
+// Input groups
+// --------------------------------------------------
+
+// Base styles
+// -------------------------
+.input-group {
+ position: relative; // For dropdowns
+ display: table;
+ border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
+
+ // Undo padding and float of grid classes
+ &[class*="col-"] {
+ float: none;
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ .form-control {
+ // Ensure that the input is always above the *appended* addon button for
+ // proper border colors.
+ position: relative;
+ z-index: 2;
+
+ // IE9 fubars the placeholder attribute in text inputs and the arrows on
+ // select elements in input groups. To fix it, we float the input. Details:
+ // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
+ float: left;
+
+ width: 100%;
+ margin-bottom: 0;
+ }
+}
+
+// Sizing options
+//
+// Remix the default form control sizing classes into new ones for easier
+// manipulation.
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ @extend .input-lg;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ @extend .input-sm;
+}
+
+
+// Display as table-cell
+// -------------------------
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+
+ &:not(:first-child):not(:last-child) {
+ @include border-radius(0);
+ }
+}
+// Addon and addon wrapper for buttons
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle; // Match the inputs
+}
+
+// Text input groups
+// -------------------------
+.input-group-addon {
+ padding: $padding-base-vertical $padding-base-horizontal;
+ font-size: $font-size-base;
+ font-weight: normal;
+ line-height: 1;
+ color: $input-color;
+ text-align: center;
+ background-color: $input-group-addon-bg;
+ border: 1px solid $input-group-addon-border-color;
+ @include border-radius($border-radius-base);
+
+ // Sizing
+ &.input-sm {
+ padding: $padding-sm-vertical $padding-sm-horizontal;
+ font-size: $font-size-sm;
+ @include border-radius($border-radius-sm);
+ }
+ &.input-lg {
+ padding: $padding-lg-vertical $padding-lg-horizontal;
+ font-size: $font-size-lg;
+ @include border-radius($border-radius-lg);
+ }
+
+ // Nuke default margins from checkboxes and radios to vertically center within.
+ input[type="radio"],
+ input[type="checkbox"] {
+ margin-top: 0;
+ }
+}
+
+// Reset rounded corners
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ @include border-right-radius(0);
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ @include border-left-radius(0);
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+// Button input groups
+// -------------------------
+.input-group-btn {
+ position: relative;
+ // Jankily prevent input button groups from wrapping with `white-space` and
+ // `font-size` in combination with `inline-block` on buttons.
+ font-size: 0;
+ white-space: nowrap;
+
+ // Negative margin for spacing, position for bringing hovered/focused/actived
+ // element above the siblings.
+ > .btn {
+ position: relative;
+ + .btn {
+ margin-left: -1px;
+ }
+ // Bring the "active" button to the front
+ &:hover,
+ &:focus,
+ &:active {
+ z-index: 2;
+ }
+ }
+
+ // Negative margin to only have a 1px border between the two
+ &:first-child {
+ > .btn,
+ > .btn-group {
+ margin-right: -1px;
+ }
+ }
+ &:last-child {
+ > .btn,
+ > .btn-group {
+ margin-left: -1px;
+ }
+ }
+}
diff --git a/scss/_jumbotron.scss b/scss/_jumbotron.scss
new file mode 100644
index 000000000..9b6c3b003
--- /dev/null
+++ b/scss/_jumbotron.scss
@@ -0,0 +1,44 @@
+//
+// Jumbotron
+// --------------------------------------------------
+
+
+.jumbotron {
+ padding: $jumbotron-padding ($jumbotron-padding / 2);
+ margin-bottom: $jumbotron-padding;
+ color: $jumbotron-color;
+ background-color: $jumbotron-bg;
+
+ .container &,
+ .container-fluid & {
+ @include border-radius($border-radius-lg); // Only round corners at higher resolutions if contained in a container
+ }
+
+ .container {
+ max-width: 100%;
+ }
+}
+
+.jumbotron-heading {
+ color: $jumbotron-heading-color;
+}
+
+.jumbotron-hr {
+ border-top-color: darken($jumbotron-bg, 10%);
+}
+
+@include media-sm {
+ .jumbotron {
+ padding: ($jumbotron-padding * 1.6) 0;
+
+ .container &,
+ .container-fluid & {
+ padding-left: ($jumbotron-padding * 2);
+ padding-right: ($jumbotron-padding * 2);
+ }
+ }
+
+ .jumbotron-heading {
+ font-size: ($font-size-base * 4.5);
+ }
+}
diff --git a/scss/_labels.scss b/scss/_labels.scss
new file mode 100644
index 000000000..55d562f8a
--- /dev/null
+++ b/scss/_labels.scss
@@ -0,0 +1,64 @@
+//
+// Labels
+// --------------------------------------------------
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: $label-color;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ @include border-radius();
+
+ // Empty labels collapse automatically
+ &:empty {
+ display: none;
+ }
+
+ // Quick fix for labels in buttons
+ .btn & {
+ position: relative;
+ top: -1px;
+ }
+}
+
+// Add hover effects, but only for links
+a.label {
+ &:hover,
+ &:focus {
+ color: $label-link-hover-color;
+ text-decoration: none;
+ cursor: pointer;
+ }
+}
+
+// Colors
+// Contextual variations (linked labels get darker on :hover)
+
+.label-default {
+ @include label-variant($label-default-bg);
+}
+
+.label-primary {
+ @include label-variant($label-primary-bg);
+}
+
+.label-success {
+ @include label-variant($label-success-bg);
+}
+
+.label-info {
+ @include label-variant($label-info-bg);
+}
+
+.label-warning {
+ @include label-variant($label-warning-bg);
+}
+
+.label-danger {
+ @include label-variant($label-danger-bg);
+}
diff --git a/scss/_list-group.scss b/scss/_list-group.scss
new file mode 100644
index 000000000..26b23ff87
--- /dev/null
+++ b/scss/_list-group.scss
@@ -0,0 +1,124 @@
+//
+// List groups
+// --------------------------------------------------
+
+
+// Base class
+//
+// Easily usable on <ul>, <ol>, or <div>.
+
+.list-group {
+ // No need to set list-style: none; since .list-group-item is block level
+ margin-bottom: 20px;
+ padding-left: 0; // reset padding because ul and ol
+}
+
+
+// Individual list items
+//
+// Use on `li`s or `div`s within the `.list-group` parent.
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ // Place the border on the list items and negative margin up for better styling
+ margin-bottom: -1px;
+ background-color: $list-group-bg;
+ border: 1px solid $list-group-border;
+
+ // Round the first and last items
+ &:first-child {
+ @include border-top-radius($list-group-border-radius);
+ }
+ &:last-child {
+ margin-bottom: 0;
+ @include border-bottom-radius($list-group-border-radius);
+ }
+}
+
+
+// Linked list items
+//
+// Use anchor elements instead of `li`s or `div`s to create linked list items.
+// Includes an extra `.active` modifier class for showing selected items.
+
+a.list-group-item {
+ color: $list-group-link-color;
+
+ .list-group-item-heading {
+ color: $list-group-link-heading-color;
+ }
+
+ // Hover state
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: $list-group-link-hover-color;
+ background-color: $list-group-hover-bg;
+ }
+}
+
+.list-group-item {
+ // Disabled state
+ &.disabled,
+ &.disabled:hover,
+ &.disabled:focus {
+ background-color: $list-group-disabled-bg;
+ color: $list-group-disabled-color;
+ cursor: $cursor-disabled;
+
+ // Force color to inherit for custom content
+ .list-group-item-heading {
+ color: inherit;
+ }
+ .list-group-item-text {
+ color: $list-group-disabled-text-color;
+ }
+ }
+
+ // Active class on item itself, not parent
+ &.active,
+ &.active:hover,
+ &.active:focus {
+ z-index: 2; // Place active items above their siblings for proper border styling
+ color: $list-group-active-color;
+ background-color: $list-group-active-bg;
+ border-color: $list-group-active-border;
+
+ // Force color to inherit for custom content
+ .list-group-item-heading,
+ .list-group-item-heading > small,
+ .list-group-item-heading > .small {
+ color: inherit;
+ }
+ .list-group-item-text {
+ color: $list-group-active-text-color;
+ }
+ }
+}
+
+
+// Contextual variants
+//
+// Add modifier classes to change text and background color on individual items.
+// Organizationally, this must come after the `:hover` states.
+
+@include list-group-item-variant(success, $state-success-bg, $state-success-text);
+@include list-group-item-variant(info, $state-info-bg, $state-info-text);
+@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text);
+@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text);
+
+
+// Custom content options
+//
+// Extra classes for creating well-formatted content within `.list-group-item`s.
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
diff --git a/scss/_media.scss b/scss/_media.scss
new file mode 100644
index 000000000..ee1a600ea
--- /dev/null
+++ b/scss/_media.scss
@@ -0,0 +1,57 @@
+.media {
+ // Proper spacing between instances of .media
+ margin-top: 15px;
+
+ &:first-child {
+ margin-top: 0;
+ }
+}
+
+.media,
+.media-body {
+ zoom: 1;
+ overflow: hidden;
+}
+
+.media-object {
+ display: block;
+}
+
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
+}
+
+.media-left,
+.media > .pull-left {
+ padding-right: 10px;
+}
+
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+
+.media-middle {
+ vertical-align: middle;
+}
+
+.media-bottom {
+ vertical-align: bottom;
+}
+
+// Reset margins on headings for tighter default spacing
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+// Media list variation
+//
+// Undo default ul/ol styles
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
diff --git a/scss/_mixins.scss b/scss/_mixins.scss
new file mode 100644
index 000000000..9d3d289c4
--- /dev/null
+++ b/scss/_mixins.scss
@@ -0,0 +1,59 @@
+// Mixins
+// --------------------------------------------------
+
+// Toggles
+//
+// Used in conjuntion with global variables to enable certain theme features.
+
+@mixin border-radius($radius: $border-radius-base) {
+ @if $enable-rounded {
+ border-radius: $radius;
+ }
+}
+
+@mixin box-shadow($shadow...) {
+ @if $enable-shadows {
+ box-shadow: $shadow;
+ }
+}
+
+@mixin transition($transition...) {
+ @if $enable-transitions {
+ transition: $transition;
+ }
+}
+
+// Utilities
+@import "mixins/media-queries";
+@import "mixins/hide-text";
+@import "mixins/image";
+@import "mixins/label";
+@import "mixins/reset-filter";
+@import "mixins/resize";
+@import "mixins/responsive-visibility";
+@import "mixins/size";
+@import "mixins/tab-focus";
+@import "mixins/text-emphasis";
+@import "mixins/text-overflow";
+
+// // Components
+@import "mixins/alert";
+@import "mixins/buttons";
+@import "mixins/pagination";
+@import "mixins/list-group";
+@import "mixins/nav-divider";
+@import "mixins/forms";
+@import "mixins/progress";
+@import "mixins/table-row";
+
+// // Skins
+@import "mixins/background-variant";
+@import "mixins/border-radius";
+@import "mixins/gradients";
+
+// // Layout
+@import "mixins/clearfix";
+@import "mixins/center-block";
+// @import "mixins/navbar-align";
+@import "mixins/grid-framework";
+@import "mixins/grid";
diff --git a/scss/_modal.scss b/scss/_modal.scss
new file mode 100644
index 000000000..fe8a09262
--- /dev/null
+++ b/scss/_modal.scss
@@ -0,0 +1,147 @@
+//
+// Modals
+// --------------------------------------------------
+
+// .modal-open - body class for killing the scroll
+// .modal - container to scroll within
+// .modal-dialog - positioning shell for the actual modal
+// .modal-content - actual modal w/ bg and corners and shit
+
+// Kill the scroll on the body
+.modal-open {
+ overflow: hidden;
+}
+
+// Container that the modal scrolls within
+.modal {
+ display: none;
+ overflow: hidden;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: $zindex-modal;
+ -webkit-overflow-scrolling: touch;
+
+ // Prevent Chrome on Windows from adding a focus outline. For details, see
+ // https://github.com/twbs/bootstrap/pull/10951.
+ outline: 0;
+
+ // When fading in the modal, animate it to slide down
+ &.fade .modal-dialog {
+ transform: translate(0, -25%);
+ transform: transition .3s ease-out;
+ }
+ &.in .modal-dialog { transform: translate(0, 0); }
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+// Shell div to position the modal with bottom padding
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+
+// Actual modal
+.modal-content {
+ position: relative;
+ background-color: $modal-content-bg;
+ border: 1px solid $modal-content-border-color;
+ border-radius: $border-radius-lg;
+ @include box-shadow(0 3px 9px rgba(0,0,0,.5));
+ background-clip: padding-box;
+ // Remove focus outline from opened modal
+ outline: 0;
+}
+
+// Modal background
+.modal-backdrop {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ background-color: $modal-backdrop-bg;
+ // Fade for backdrop
+ &.fade { opacity: 0; }
+ &.in { opacity: $modal-backdrop-opacity; }
+}
+
+// Modal header
+// Top section of the modal w/ title and dismiss
+.modal-header {
+ padding: $modal-title-padding;
+ border-bottom: 1px solid $modal-header-border-color;
+ min-height: ($modal-title-padding + $modal-title-line-height);
+}
+// Close icon
+.modal-header .close {
+ margin-top: -2px;
+}
+
+// Title text within header
+.modal-title {
+ margin: 0;
+ line-height: $modal-title-line-height;
+}
+
+// Modal body
+// Where all modal content resides (sibling of .modal-header and .modal-footer)
+.modal-body {
+ position: relative;
+ padding: $modal-inner-padding;
+}
+
+// Footer (for actions)
+.modal-footer {
+ padding: $modal-inner-padding;
+ text-align: right; // right align buttons
+ border-top: 1px solid $modal-footer-border-color;
+ @include clearfix(); // clear it in case folks use .pull-* classes on buttons
+
+ // Properly space out buttons
+ .btn + .btn {
+ margin-left: 5px;
+ margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
+ }
+ // but override that for button groups
+ .btn-group .btn + .btn {
+ margin-left: -1px;
+ }
+ // and override it for block buttons as well
+ .btn-block + .btn-block {
+ margin-left: 0;
+ }
+}
+
+// Measure scrollbar width for padding body during modal show/hide
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+
+// Scale up the modal
+@media (min-width: $screen-sm-min) {
+ // Automatically set modal's width for larger viewports
+ .modal-dialog {
+ width: $modal-md;
+ margin: 30px auto;
+ }
+ .modal-content {
+ @include box-shadow(0 5px 15px rgba(0,0,0,.5));
+ }
+
+ // Modal sizes
+ .modal-sm { width: $modal-sm; }
+}
+
+@media (min-width: $screen-md-min) {
+ .modal-lg { width: $modal-lg; }
+}
diff --git a/scss/_nav.scss b/scss/_nav.scss
new file mode 100644
index 000000000..7f4fc45fc
--- /dev/null
+++ b/scss/_nav.scss
@@ -0,0 +1,168 @@
+//
+// Navs
+// --------------------------------------------------
+
+.nav {
+ margin-bottom: 0;
+ @extend .list-unstyled;
+ @include clearfix();
+}
+
+.nav-item {
+ position: relative;
+ display: inline-block;
+}
+
+.nav-link {
+ display: inline-block;
+ padding: $nav-link-padding;
+ line-height: $line-height-base;
+
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: $nav-link-hover-bg;
+ }
+
+ // Disabled state sets text to gray and nukes hover/tab effects
+ .disabled > &,
+ &.disabled {
+ color: $nav-disabled-link-color;
+
+ &,
+ &:hover,
+ &:focus {
+ color: $nav-disabled-link-hover-color;
+ background-color: transparent;
+ cursor: $cursor-disabled;
+ }
+ }
+}
+
+
+//
+// Tabs
+//
+
+.nav-tabs {
+ border-bottom: 1px solid $nav-tabs-border-color;
+
+ .nav-item {
+ float: left;
+ // Make the list-items overlay the bottom border
+ margin-bottom: -1px;
+
+ + .nav-item {
+ margin-left: .2rem;
+ }
+ }
+
+ .nav-link {
+ display: block;
+ border: 1px solid transparent;
+ @include border-radius($border-radius-base $border-radius-base 0 0);
+
+ &:hover,
+ &:focus {
+ border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;
+ }
+ }
+
+ .open > .nav-link,
+ .active > .nav-link,
+ .nav-link.open,
+ .nav-link.active {
+ &,
+ &:hover,
+ &:focus {
+ color: $nav-tabs-active-link-hover-color;
+ background-color: $nav-tabs-active-link-hover-bg;
+ border-color: $nav-tabs-active-link-hover-border-color $nav-tabs-active-link-hover-border-color transparent;
+ }
+ }
+
+ .disabled > .nav-link,
+ .nav-link.disabled {
+ &,
+ &:hover,
+ &:focus {
+ color: $nav-disabled-link-color;
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+}
+
+
+//
+// Pills
+//
+
+.nav-pills {
+ .nav-item {
+ float: left;
+
+ + .nav-item {
+ margin-left: .2rem;
+ }
+ }
+
+ .nav-link {
+ display: block;
+ @include border-radius($nav-pills-border-radius);
+ }
+
+ .open > .nav-link,
+ .active > .nav-link,
+ .nav-link.open,
+ .nav-link.active {
+ &,
+ &:hover,
+ &:focus {
+ color: $component-active-color;
+ background-color: $component-active-bg;
+ cursor: default;
+ }
+ }
+}
+
+.nav-stacked {
+ .nav-item {
+ float: none;
+ display: block;
+
+ + .nav-item {
+ margin-top: .2rem;
+ margin-left: 0;
+ }
+ }
+}
+
+
+//
+// Tabbable tabs
+//
+
+// Hide tabbable panes to start, show them when `.active`
+.tab-content {
+ > .tab-pane {
+ display: none;
+ visibility: hidden;
+ }
+ > .active {
+ display: block;
+ visibility: visible;
+ }
+}
+
+
+//
+// Dropdowns
+//
+
+.nav-tabs .dropdown-menu {
+ // Make dropdown border overlap tab border
+ margin-top: -1px;
+ // Remove the top rounded corners here since there is a hard edge above the menu
+ @include border-top-radius(0);
+}
diff --git a/scss/_navbar.scss b/scss/_navbar.scss
new file mode 100644
index 000000000..04c7c4dd0
--- /dev/null
+++ b/scss/_navbar.scss
@@ -0,0 +1,574 @@
+//
+// Navbars
+// --------------------------------------------------
+
+
+// Wrapper and base class
+//
+// Provide a static navbar from which we expand to create full-width, fixed, and
+// other navbar variations.
+
+.navbar {
+ position: relative;
+ padding: $spacer;
+ /*min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)*/
+ margin-bottom: $navbar-margin-bottom;
+ /*border: 1px solid transparent;*/
+
+ // Prevent floats from breaking the navbar
+ @include clearfix();
+
+ @media (min-width: $grid-float-breakpoint) {
+ @include border-radius($navbar-border-radius);
+ }
+}
+
+
+//
+// Navbar alignment options
+//
+// Display the navbar across the entirety of the page or fixed it to the top or
+// bottom of the page.
+
+// Static top (unfixed, but 100% wide) navbar
+.navbar-static-top {
+ z-index: $zindex-navbar;
+ border-width: 0 0 1px;
+
+ @media (min-width: $grid-float-breakpoint) {
+ @include border-radius(0);
+ }
+}
+
+// Fix the top/bottom navbars when screen real estate supports it
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: $zindex-navbar-fixed;
+
+ // Undo the rounded corners
+ @media (min-width: $grid-float-breakpoint) {
+ @include border-radius(0);
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0; // override .navbar defaults
+ border-width: 1px 0 0;
+}
+
+
+// Brand/project name
+
+.navbar-brand {
+ float: left;
+ padding: .55rem .75rem;
+ margin-right: $spacer;
+ margin-bottom: 0; // For headings
+ font-size: $font-size-lg;
+ line-height: $line-height-computed;
+ /*height: $navbar-height;*/
+
+ > a:hover,
+ > a:focus {
+ text-decoration: none;
+ }
+
+ > img {
+ display: block;
+ }
+}
+
+
+// Navbar toggle
+//
+// Custom button for toggling the `.navbar-collapse`, powered by the collapse
+// JavaScript plugin.
+
+.navbar-toggler {
+ float: left;
+ padding: .55rem .75rem;
+ margin-right: $spacer;
+ margin-bottom: 0; // For headings
+ font-size: $font-size-lg;
+ line-height: $line-height-computed;
+ background: none;
+ border: 0;
+
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ }
+}
+
+
+// Navbar nav links
+//
+// Builds on top of the `.nav` components with its own modifier class to make
+// the nav the full height of the horizontal nav (above 768px).
+
+// .navbar-nav {
+// margin: ($navbar-padding-vertical / 2) -$navbar-padding-horizontal;
+
+// > li > a {
+// padding-top: 10px;
+// padding-bottom: 10px;
+// line-height: $line-height-computed;
+// }
+
+// @media (max-width: $grid-float-breakpoint-max) {
+// // Dropdowns get custom display when collapsed
+// .open .dropdown-menu {
+// position: static;
+// float: none;
+// width: auto;
+// margin-top: 0;
+// background-color: transparent;
+// border: 0;
+// @include box-shadow(none);
+
+// > li > a,
+// .dropdown-header {
+// padding: 5px 15px 5px 25px;
+// }
+
+// > li > a {
+// line-height: $line-height-computed;
+
+// &:hover,
+// &:focus {
+// background-image: none;
+// }
+// }
+// }
+// }
+
+// // Uncollapse the nav
+// @media (min-width: $grid-float-breakpoint) {
+// float: left;
+// margin: 0;
+
+// > li {
+// float: left;
+
+// > a {
+// padding-top: $navbar-padding-vertical;
+// padding-bottom: $navbar-padding-vertical;
+// }
+// }
+// }
+// }
+
+
+// Navbar form
+//
+// Extension of the `.form-inline` with some extra flavor for optimum display in
+// our navbars.
+
+.navbar-form {
+ margin-left: -$navbar-padding-horizontal;
+ margin-right: -$navbar-padding-horizontal;
+ padding: 10px $navbar-padding-horizontal;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ @include box-shadow(inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1));
+
+ // Mixin behavior for optimum display
+ @extend .form-inline;
+
+ .form-group {
+ @media (max-width: $grid-float-breakpoint-max) {
+ margin-bottom: 5px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ // Vertically center in expanded, horizontal navbar
+ // @include navbar-vertical-align($input-height-base);
+
+ // Undo 100% width for pull classes
+ @media (min-width: $grid-float-breakpoint) {
+ width: auto;
+ border: 0;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ @include box-shadow(none);
+ }
+}
+
+
+// Dropdown menus
+
+// Menu position and menu carets
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ @include border-top-radius(0);
+}
+// Menu position and menu caret support for dropups via extra dropup class
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ @include border-top-radius($navbar-border-radius);
+ @include border-bottom-radius(0);
+}
+
+
+// Buttons in navbars
+//
+// Vertically center a button within a navbar (when *not* in a form).
+
+// .navbar-btn {
+// @include navbar-vertical-align($input-height-base);
+
+// &.btn-sm {
+// @include navbar-vertical-align($input-height-sm);
+// }
+// &.btn-xs {
+// @include navbar-vertical-align(22);
+// }
+// }
+
+
+// Text in navbars
+//
+// Add a class to make any element properly align itself vertically within the navbars.
+
+.navbar-text {
+ // @include navbar-vertical-align($line-height-computed);
+
+ @media (min-width: $grid-float-breakpoint) {
+ float: left;
+ margin-left: $navbar-padding-horizontal;
+ margin-right: $navbar-padding-horizontal;
+ }
+}
+
+
+// Component alignment
+//
+// Repurpose the pull utilities as their own navbar utilities to avoid specificity
+// issues with parents and chaining. Only do this when the navbar is uncollapsed
+// though so that navbar contents properly stack and align in mobile.
+//
+// Declared after the navbar components to ensure more specificity on the margins.
+
+@media (min-width: $grid-float-breakpoint) {
+ .navbar-left {
+ @extend .pull-left;
+ }
+ .navbar-right {
+ @extend .pull-right;
+ margin-right: -$navbar-padding-horizontal;
+
+ ~ .navbar-right {
+ margin-right: 0;
+ }
+ }
+}
+
+
+// Alternate navbars
+// --------------------------------------------------
+
+// Default navbar
+.navbar-default {
+ background-color: $navbar-default-bg;
+ border-color: $navbar-default-border;
+
+ .navbar-brand {
+ color: $navbar-default-brand-color;
+ &:hover,
+ &:focus {
+ color: $navbar-default-brand-hover-color;
+ background-color: $navbar-default-brand-hover-bg;
+ }
+ }
+
+ .navbar-text {
+ color: $navbar-default-color;
+ }
+
+ .navbar-nav {
+ > li > a {
+ color: $navbar-default-link-color;
+
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-hover-color;
+ background-color: $navbar-default-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-active-color;
+ background-color: $navbar-default-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-disabled-color;
+ background-color: $navbar-default-link-disabled-bg;
+ }
+ }
+ }
+
+ .navbar-toggle {
+ border-color: $navbar-default-toggle-border-color;
+ &:hover,
+ &:focus {
+ background-color: $navbar-default-toggle-hover-bg;
+ }
+ .icon-bar {
+ background-color: $navbar-default-toggle-icon-bar-bg;
+ }
+ }
+
+ .navbar-collapse,
+ .navbar-form {
+ border-color: $navbar-default-border;
+ }
+
+ // Dropdown menu items
+ .navbar-nav {
+ // Remove background color from open dropdown
+ > .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: $navbar-default-link-active-bg;
+ color: $navbar-default-link-active-color;
+ }
+ }
+
+ @media (max-width: $grid-float-breakpoint-max) {
+ // Dropdowns get custom display when collapsed
+ .open .dropdown-menu {
+ > li > a {
+ color: $navbar-default-link-color;
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-hover-color;
+ background-color: $navbar-default-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-active-color;
+ background-color: $navbar-default-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-disabled-color;
+ background-color: $navbar-default-link-disabled-bg;
+ }
+ }
+ }
+ }
+ }
+
+
+ // Links in navbars
+ //
+ // Add a class to ensure links outside the navbar nav are colored correctly.
+
+ .navbar-link {
+ color: $navbar-default-link-color;
+ &:hover {
+ color: $navbar-default-link-hover-color;
+ }
+ }
+
+ .btn-link {
+ color: $navbar-default-link-color;
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-hover-color;
+ }
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: $navbar-default-link-disabled-color;
+ }
+ }
+ }
+}
+
+// Inverse navbar
+
+.navbar-inverse {
+ background-color: $navbar-inverse-bg;
+ border-color: $navbar-inverse-border;
+
+ .navbar-toggler,
+ .navbar-brand > a,
+ .nav-pills > .nav-item > .nav-link {
+ color: $navbar-inverse-link-color;
+
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-hover-color;
+ }
+ }
+ .nav-pills > .nav-item > .nav-link {
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-active-color;
+ background-color: $navbar-inverse-link-active-bg;
+ }
+ }
+ .nav-pills > .active > .nav-link,
+ .nav-pills > .nav-link.active {
+ color: $navbar-inverse-link-active-color;
+ background-color: $navbar-inverse-link-active-bg;
+ }
+
+
+ .navbar-brand {
+ color: $navbar-inverse-brand-color;
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-brand-hover-color;
+ background-color: $navbar-inverse-brand-hover-bg;
+ }
+ }
+
+ .navbar-text {
+ color: $navbar-inverse-color;
+ }
+
+ .navbar-nav {
+ > li > a {
+ color: $navbar-inverse-link-color;
+
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-hover-color;
+ background-color: $navbar-inverse-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-active-color;
+ background-color: $navbar-inverse-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-disabled-color;
+ background-color: $navbar-inverse-link-disabled-bg;
+ }
+ }
+ }
+
+ // Darken the responsive nav toggle
+ .navbar-toggle {
+ border-color: $navbar-inverse-toggle-border-color;
+ &:hover,
+ &:focus {
+ background-color: $navbar-inverse-toggle-hover-bg;
+ }
+ .icon-bar {
+ background-color: $navbar-inverse-toggle-icon-bar-bg;
+ }
+ }
+
+ .navbar-collapse,
+ .navbar-form {
+ border-color: darken($navbar-inverse-bg, 7%);
+ }
+
+ // Dropdowns
+ .navbar-nav {
+ > .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: $navbar-inverse-link-active-bg;
+ color: $navbar-inverse-link-active-color;
+ }
+ }
+
+ @media (max-width: $grid-float-breakpoint-max) {
+ // Dropdowns get custom display
+ .open .dropdown-menu {
+ > .dropdown-header {
+ border-color: $navbar-inverse-border;
+ }
+ .divider {
+ background-color: $navbar-inverse-border;
+ }
+ > li > a {
+ color: $navbar-inverse-link-color;
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-hover-color;
+ background-color: $navbar-inverse-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-active-color;
+ background-color: $navbar-inverse-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-disabled-color;
+ background-color: $navbar-inverse-link-disabled-bg;
+ }
+ }
+ }
+ }
+ }
+
+ .navbar-link {
+ color: $navbar-inverse-link-color;
+ &:hover {
+ color: $navbar-inverse-link-hover-color;
+ }
+ }
+
+ .btn-link {
+ color: $navbar-inverse-link-color;
+
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-hover-color;
+ }
+
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: $navbar-inverse-link-disabled-color;
+ }
+ }
+ }
+}
diff --git a/scss/_normalize.scss b/scss/_normalize.scss
new file mode 100644
index 000000000..62a085a48
--- /dev/null
+++ b/scss/_normalize.scss
@@ -0,0 +1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+//
+// 1. Set default font family to sans-serif.
+// 2. Prevent iOS text size adjust after orientation change, without disabling
+// user zoom.
+//
+
+html {
+ font-family: sans-serif; // 1
+ -ms-text-size-adjust: 100%; // 2
+ -webkit-text-size-adjust: 100%; // 2
+}
+
+//
+// Remove default margin.
+//
+
+body {
+ margin: 0;
+}
+
+// HTML5 display definitions
+// ==========================================================================
+
+//
+// Correct `block` display not defined for any HTML5 element in IE 8/9.
+// Correct `block` display not defined for `details` or `summary` in IE 10/11
+// and Firefox.
+// Correct `block` display not defined for `main` in IE 11.
+//
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+//
+// 1. Correct `inline-block` display not defined in IE 8/9.
+// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+//
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; // 1
+ vertical-align: baseline; // 2
+}
+
+//
+// Prevent modern browsers from displaying `audio` without controls.
+// Remove excess height in iOS 5 devices.
+//
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+//
+// Address `[hidden]` styling not present in IE 8/9/10.
+// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+//
+
+[hidden],
+template {
+ display: none;
+}
+
+// Links
+// ==========================================================================
+
+//
+// Remove the gray background color from active links in IE 10.
+//
+
+a {
+ background-color: transparent;
+}
+
+//
+// Improve readability when focused and also mouse hovered in all browsers.
+//
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+// Text-level semantics
+// ==========================================================================
+
+//
+// Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+//
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+//
+// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+//
+
+b,
+strong {
+ font-weight: bold;
+}
+
+//
+// Address styling not present in Safari and Chrome.
+//
+
+dfn {
+ font-style: italic;
+}
+
+//
+// Address variable `h1` font-size and margin within `section` and `article`
+// contexts in Firefox 4+, Safari, and Chrome.
+//
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+//
+// Address styling not present in IE 8/9.
+//
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+//
+// Address inconsistent and variable font size in all browsers.
+//
+
+small {
+ font-size: 80%;
+}
+
+//
+// Prevent `sub` and `sup` affecting `line-height` in all browsers.
+//
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+// Embedded content
+// ==========================================================================
+
+//
+// Remove border when inside `a` element in IE 8/9/10.
+//
+
+img {
+ border: 0;
+}
+
+//
+// Correct overflow not hidden in IE 9/10/11.
+//
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+// Grouping content
+// ==========================================================================
+
+//
+// Address margin not present in IE 8/9 and Safari.
+//
+
+figure {
+ margin: 1em 40px;
+}
+
+//
+// Address differences between Firefox and other browsers.
+//
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+//
+// Contain overflow in all browsers.
+//
+
+pre {
+ overflow: auto;
+}
+
+//
+// Address odd `em`-unit font size rendering in all browsers.
+//
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+// Forms
+// ==========================================================================
+
+//
+// Known limitation: by default, Chrome and Safari on OS X allow very limited
+// styling of `select`, unless a `border` property is set.
+//
+
+//
+// 1. Correct color not being inherited.
+// Known issue: affects color of disabled elements.
+// 2. Correct font properties not being inherited.
+// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+//
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; // 1
+ font: inherit; // 2
+ margin: 0; // 3
+}
+
+//
+// Address `overflow` set to `hidden` in IE 8/9/10/11.
+//
+
+button {
+ overflow: visible;
+}
+
+//
+// Address inconsistent `text-transform` inheritance for `button` and `select`.
+// All other form control elements do not inherit `text-transform` values.
+// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+// Correct `select` style inheritance in Firefox.
+//
+
+button,
+select {
+ text-transform: none;
+}
+
+//
+// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+// and `video` controls.
+// 2. Correct inability to style clickable `input` types in iOS.
+// 3. Improve usability and consistency of cursor style between image-type
+// `input` and others.
+//
+
+button,
+html input[type="button"], // 1
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; // 2
+ cursor: pointer; // 3
+}
+
+//
+// Re-set default cursor for disabled elements.
+//
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+//
+// Remove inner padding and border in Firefox 4+.
+//
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+//
+// Address Firefox 4+ setting `line-height` on `input` using `!important` in
+// the UA stylesheet.
+//
+
+input {
+ line-height: normal;
+}
+
+//
+// It's recommended that you don't attempt to style these elements.
+// Firefox's implementation doesn't respect box-sizing, padding, or width.
+//
+// 1. Address box sizing set to `content-box` in IE 8/9/10.
+// 2. Remove excess padding in IE 8/9/10.
+//
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; // 1
+ padding: 0; // 2
+}
+
+//
+// Fix the cursor style for Chrome's increment/decrement buttons. For certain
+// `font-size` values of the `input`, it causes the cursor style of the
+// decrement button to change from `default` to `text`.
+//
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+//
+// 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+// 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+// (include `-moz` to future-proof).
+//
+
+input[type="search"] {
+ -webkit-appearance: textfield; // 1
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; // 2
+ box-sizing: content-box;
+}
+
+//
+// Remove inner padding and search cancel button in Safari and Chrome on OS X.
+// Safari (but not Chrome) clips the cancel button when the search input has
+// padding (and `textfield` appearance).
+//
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+//
+// Define consistent border, margin, and padding.
+//
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+//
+// 1. Correct `color` not being inherited in IE 8/9/10/11.
+// 2. Remove padding so people aren't caught out if they zero out fieldsets.
+//
+
+legend {
+ border: 0; // 1
+ padding: 0; // 2
+}
+
+//
+// Remove default vertical scrollbar in IE 8/9/10/11.
+//
+
+textarea {
+ overflow: auto;
+}
+
+//
+// Don't inherit the `font-weight` (applied by a rule above).
+// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+//
+
+optgroup {
+ font-weight: bold;
+}
+
+// Tables
+// ==========================================================================
+
+//
+// Remove most spacing between table cells.
+//
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/scss/_pager.scss b/scss/_pager.scss
new file mode 100644
index 000000000..2a346879d
--- /dev/null
+++ b/scss/_pager.scss
@@ -0,0 +1,56 @@
+//
+// Pager pagination
+// --------------------------------------------------
+
+
+.pager {
+ padding-left: 0;
+ margin: $line-height-computed 0;
+ list-style: none;
+ text-align: center;
+ @include clearfix();
+
+ li {
+ display: inline;
+
+ > a,
+ > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: $pager-bg;
+ border: 1px solid $pager-border;
+ border-radius: $pager-border-radius;
+ }
+
+ > a:hover,
+ > a:focus {
+ text-decoration: none;
+ background-color: $pager-hover-bg;
+ }
+ }
+
+ .next {
+ > a,
+ > span {
+ float: right;
+ }
+ }
+
+ .previous {
+ > a,
+ > span {
+ float: left;
+ }
+ }
+
+ .disabled {
+ > a,
+ > a:hover,
+ > a:focus,
+ > span {
+ color: $pager-disabled-color;
+ background-color: $pager-bg;
+ cursor: $cursor-disabled;
+ }
+ }
+}
diff --git a/scss/_pagination.scss b/scss/_pagination.scss
new file mode 100644
index 000000000..b0b91c96c
--- /dev/null
+++ b/scss/_pagination.scss
@@ -0,0 +1,89 @@
+//
+// Pagination (multiple pages)
+// --------------------------------------------------
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: $line-height-computed 0;
+ @include border-radius();
+
+ > li {
+ display: inline; // Remove list-style and block-level defaults
+
+ > a,
+ > span {
+ position: relative;
+ float: left; // Collapse white-space
+ padding: $padding-base-vertical $padding-base-horizontal;
+ line-height: $line-height-base;
+ text-decoration: none;
+ color: $pagination-color;
+ background-color: $pagination-bg;
+ border: 1px solid $pagination-border;
+ margin-left: -1px;
+ }
+ &:first-child {
+ > a,
+ > span {
+ margin-left: 0;
+ @include border-left-radius($border-radius-base);
+ }
+ }
+ &:last-child {
+ > a,
+ > span {
+ @include border-right-radius($border-radius-base);
+ }
+ }
+ }
+
+ > li > a,
+ > li > span {
+ &:hover,
+ &:focus {
+ color: $pagination-hover-color;
+ background-color: $pagination-hover-bg;
+ border-color: $pagination-hover-border;
+ }
+ }
+
+ > .active > a,
+ > .active > span {
+ &,
+ &:hover,
+ &:focus {
+ z-index: 2;
+ color: $pagination-active-color;
+ background-color: $pagination-active-bg;
+ border-color: $pagination-active-border;
+ cursor: default;
+ }
+ }
+
+ > .disabled {
+ > span,
+ > span:hover,
+ > span:focus,
+ > a,
+ > a:hover,
+ > a:focus {
+ color: $pagination-disabled-color;
+ background-color: $pagination-disabled-bg;
+ border-color: $pagination-disabled-border;
+ cursor: $cursor-disabled;
+ }
+ }
+}
+
+// Sizing
+// --------------------------------------------------
+
+// Large
+.pagination-lg {
+ @include pagination-size($padding-lg-vertical, $padding-lg-horizontal, $font-size-lg, $border-radius-lg);
+}
+
+// Small
+.pagination-sm {
+ @include pagination-size($padding-sm-vertical, $padding-sm-horizontal, $font-size-sm, $border-radius-sm);
+}
diff --git a/scss/_popover.scss b/scss/_popover.scss
new file mode 100644
index 000000000..c3f9ac165
--- /dev/null
+++ b/scss/_popover.scss
@@ -0,0 +1,130 @@
+//
+// Popovers
+// --------------------------------------------------
+
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: $zindex-popover;
+ display: none;
+ max-width: $popover-max-width;
+ padding: 1px;
+ // Reset font and text propertes given new insertion method
+ font-family: $font-family-base;
+ font-size: $font-size-base;
+ font-weight: normal;
+ line-height: $line-height-base;
+ text-align: left;
+ background-color: $popover-bg;
+ background-clip: padding-box;
+ border: 1px solid $popover-border-color;
+ @include border-radius($border-radius-lg);
+ @include box-shadow(0 5px 10px rgba(0,0,0,.2));
+
+ // Overrides for proper insertion
+ white-space: normal;
+
+ // Offset the popover to account for the popover arrow
+ &.top { margin-top: -$popover-arrow-width; }
+ &.right { margin-left: $popover-arrow-width; }
+ &.bottom { margin-top: $popover-arrow-width; }
+ &.left { margin-left: -$popover-arrow-width; }
+}
+
+.popover-title {
+ margin: 0; // reset heading margin
+ padding: 8px 14px;
+ font-size: $font-size-base;
+ background-color: $popover-title-bg;
+ border-bottom: 1px solid darken($popover-title-bg, 5%);
+ @include border-radius(($border-radius-lg - 1) ($border-radius-lg - 1) 0 0);
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+// Arrows
+//
+// .arrow is outer, .arrow:after is inner
+
+.popover > .arrow {
+ &,
+ &:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+ }
+}
+.popover > .arrow {
+ border-width: $popover-arrow-outer-width;
+}
+.popover > .arrow:after {
+ border-width: $popover-arrow-width;
+ content: "";
+}
+
+.popover {
+ &.top > .arrow {
+ left: 50%;
+ margin-left: -$popover-arrow-outer-width;
+ border-bottom-width: 0;
+ border-top-color: $popover-arrow-outer-color;
+ bottom: -$popover-arrow-outer-width;
+ &:after {
+ content: " ";
+ bottom: 1px;
+ margin-left: -$popover-arrow-width;
+ border-bottom-width: 0;
+ border-top-color: $popover-arrow-color;
+ }
+ }
+ &.right > .arrow {
+ top: 50%;
+ left: -$popover-arrow-outer-width;
+ margin-top: -$popover-arrow-outer-width;
+ border-left-width: 0;
+ border-right-color: $popover-arrow-outer-color;
+ &:after {
+ content: " ";
+ left: 1px;
+ bottom: -$popover-arrow-width;
+ border-left-width: 0;
+ border-right-color: $popover-arrow-color;
+ }
+ }
+ &.bottom > .arrow {
+ left: 50%;
+ margin-left: -$popover-arrow-outer-width;
+ border-top-width: 0;
+ border-bottom-color: $popover-arrow-outer-color;
+ top: -$popover-arrow-outer-width;
+ &:after {
+ content: " ";
+ top: 1px;
+ margin-left: -$popover-arrow-width;
+ border-top-width: 0;
+ border-bottom-color: $popover-arrow-color;
+ }
+ }
+
+ &.left > .arrow {
+ top: 50%;
+ right: -$popover-arrow-outer-width;
+ margin-top: -$popover-arrow-outer-width;
+ border-right-width: 0;
+ border-left-color: $popover-arrow-outer-color;
+ &:after {
+ content: " ";
+ right: 1px;
+ border-right-width: 0;
+ border-left-color: $popover-arrow-color;
+ bottom: -$popover-arrow-width;
+ }
+ }
+}
diff --git a/scss/_print.scss b/scss/_print.scss
new file mode 100644
index 000000000..94ca58f12
--- /dev/null
+++ b/scss/_print.scss
@@ -0,0 +1,107 @@
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+
+// ==========================================================================
+// Print styles.
+// Inlined to avoid the additional HTTP request: h5bp.com/r
+// ==========================================================================
+
+@media print {
+ *,
+ *:before,
+ *:after {
+ background: transparent !important;
+ color: #000 !important; // Black prints faster: h5bp.com/s
+ box-shadow: none !important;
+ text-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ // Don't show links that are fragment identifiers,
+ // or use the `javascript:` pseudo protocol
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group; // h5bp.com/t
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ // Bootstrap specific changes start
+ //
+ // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
+ // Once fixed, we can just straight up remove this.
+ select {
+ background: #fff !important;
+ }
+
+ // Bootstrap components
+ .navbar {
+ display: none;
+ }
+ .btn,
+ .dropup > .btn {
+ > .caret {
+ border-top-color: #000 !important;
+ }
+ }
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+
+ td,
+ th {
+ background-color: #fff !important;
+ }
+ }
+ .table-bordered {
+ th,
+ td {
+ border: 1px solid #ddd !important;
+ }
+ }
+
+ // Bootstrap specific changes end
+}
diff --git a/scss/_progress.scss b/scss/_progress.scss
new file mode 100644
index 000000000..ccfda15f5
--- /dev/null
+++ b/scss/_progress.scss
@@ -0,0 +1,166 @@
+/*csslint empty-rules: false, important: true*/
+
+//
+// Progress bars
+// --------------------------------------------------
+
+
+//
+// Progress animations
+//
+
+@-webkit-keyframes progress-bar-stripes {
+ from { background-position: $line-height-computed 0; }
+ to { background-position: 0 0; }
+}
+
+@keyframes progress-bar-stripes {
+ from { background-position: $line-height-computed 0; }
+ to { background-position: 0 0; }
+}
+
+
+//
+// Basic progress bar
+//
+
+.progress {
+ display: block;
+ width: 100%;
+ height: $line-height-computed;
+ margin-bottom: $line-height-computed;
+}
+.progress[value] {
+ // Reset the default appearance
+ appearance: none;
+ // Remove Firefox and Opera border
+ border: 0;
+ // IE10 uses `color` to set the bar background-color
+ color: #0074d9;
+}
+.progress[value]::-webkit-progress-bar {
+ background-color: #eee;
+ @include border-radius($border-radius-base);
+ @include box-shadow(inset 0 .1rem .1rem rgba(0,0,0,.1));
+}
+.progress[value]::-webkit-progress-value::before {
+ content: attr(value);
+}
+.progress[value]::-webkit-progress-value {
+ background-color: #0074d9;
+ border-top-left-radius: $border-radius-base;
+ border-bottom-left-radius: $border-radius-base;
+}
+.progress[value="100"]::-webkit-progress-value {
+ border-top-right-radius: $border-radius-base;
+ border-bottom-right-radius: $border-radius-base;
+}
+
+// Firefox styles must be entirely separate or it busts Webkit styles.
+//
+// Commented out for now because linter.
+//
+// $-moz-document url-prefix() {
+// .progress[value] {
+// background-color: #eee;
+// .border-radius($border-radius-base);
+// .box-shadow(inset 0 .1rem .1rem rgba(0,0,0,.1));
+// }
+// .progress[value]::-moz-progress-bar {
+// background-color: #0074d9;
+// border-top-left-radius: $border-radius-base;
+// border-bottom-left-radius: $border-radius-base;
+// }
+// .progress[value="0"]::-moz-progress-bar {
+// color: $gray-light;
+// min-width: 2rem;
+// background-color: transparent;
+// background-image: none;
+// }
+// .progress[value="100"]::-moz-progress-bar {
+// border-top-right-radius: $border-radius-base;
+// border-bottom-right-radius: $border-radius-base;
+// }
+// }
+
+// IE9 hacks to accompany custom markup. We don't need to scope this via media queries, but I feel better doing it anyway.
+@media screen and ("min-width:0\0") {
+ .progress {
+ background-color: #eee;
+ @include border-radius($border-radius-base);
+ @include box-shadow(inset 0 .1rem .1rem rgba(0,0,0,.1));
+ }
+ .progress-bar {
+ display: inline-block;
+ height: $line-height-computed;
+ text-indent: -999rem; // Simulate hiding of value as in native `<progress>`
+ background-color: #0074d9;
+ border-top-left-radius: $border-radius-base;
+ border-bottom-left-radius: $border-radius-base;
+ }
+ .progress[width^="0"] {
+ color: $gray-light;
+ min-width: 2rem;
+ background-color: transparent;
+ background-image: none;
+ }
+ .progress[width="100%"] {
+ border-top-right-radius: $border-radius-base;
+ border-bottom-right-radius: $border-radius-base;
+ }
+}
+
+
+//
+// Striped
+//
+
+.progress-striped[value]::-webkit-progress-value {
+ @include gradient-striped();
+ background-size: $line-height-computed $line-height-computed;
+}
+.progress-striped[value]::-moz-progress-bar {
+ @include gradient-striped();
+ background-size: $line-height-computed $line-height-computed;
+}
+@media screen and ("min-width:0\0") {
+ .progress-bar-striped {
+ @include gradient-striped();
+ background-size: $line-height-computed $line-height-computed;
+ }
+}
+
+
+//
+// Animated
+//
+
+.progress-animated[value]::-webkit-progress-value {
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-animated[value]::-moz-progress-bar {
+ animation: progress-bar-stripes 2s linear infinite;
+}
+@media screen and ("min-width:0\0") {
+ .progress-animated .progress-bar-striped {
+ animation: progress-bar-stripes 2s linear infinite;
+ }
+}
+
+
+//
+// Variations
+//
+
+.progress-success {
+ @include progress-variant($progress-bar-success-bg);
+}
+.progress-info {
+ @include progress-variant($progress-bar-info-bg);
+}
+.progress-warning {
+ @include progress-variant($progress-bar-warning-bg);
+}
+.progress-danger {
+ @include progress-variant($progress-bar-danger-bg);
+}
diff --git a/scss/_responsive-embed.scss b/scss/_responsive-embed.scss
new file mode 100644
index 000000000..c1fa8f848
--- /dev/null
+++ b/scss/_responsive-embed.scss
@@ -0,0 +1,35 @@
+// Embeds responsive
+//
+// Credit: Nicolas Gallagher and SUIT CSS.
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+
+ .embed-responsive-item,
+ iframe,
+ embed,
+ object,
+ video {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ height: 100%;
+ width: 100%;
+ border: 0;
+ }
+
+ // Modifier class for 16:9 aspect ratio
+ &.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+ }
+
+ // Modifier class for 4:3 aspect ratio
+ &.embed-responsive-4by3 {
+ padding-bottom: 75%;
+ }
+}
diff --git a/scss/_scaffolding.scss b/scss/_scaffolding.scss
new file mode 100644
index 000000000..4736c82b2
--- /dev/null
+++ b/scss/_scaffolding.scss
@@ -0,0 +1,147 @@
+//
+// Scaffolding
+// --------------------------------------------------
+
+
+// Reset the box-sizing
+//
+// Heads up! This reset may cause conflicts with some third-party widgets.
+// For recommendations on resolving such conflicts, see
+// http://getbootstrap.com/getting-started/#third-box-sizing
+*,
+*:before,
+*:after {
+ box-sizing: border-box;
+}
+
+
+// Body reset
+
+html {
+ font-size: ($font-size-root)px;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+body {
+ font-family: $font-family-base;
+ font-size: $font-size-base;
+ line-height: $line-height-base;
+ color: $text-color;
+ background-color: $body-bg;
+}
+
+// Reset fonts for relevant elements
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+
+// Links
+
+a {
+ color: $link-color;
+ text-decoration: none;
+
+ &:hover,
+ &:focus {
+ color: $link-hover-color;
+ text-decoration: $link-hover-decoration;
+ }
+
+ &:focus {
+ @include tab-focus();
+ }
+}
+
+
+// Figures
+//
+// We reset this here because previously Normalize had no `figure` margins. This
+// ensures we don't break anyone's use of the element.
+
+figure {
+ margin: 0;
+}
+
+
+// Images
+
+img {
+ vertical-align: middle;
+}
+
+// Responsive images (ensure images don't scale beyond their parents)
+.img-responsive {
+ @include img-responsive();
+}
+
+// Rounded corners
+.img-rounded {
+ @include border-radius($border-radius-lg);
+}
+
+// Image thumbnails
+.img-thumbnail {
+ padding: $thumbnail-padding;
+ line-height: $line-height-base;
+ background-color: $thumbnail-bg;
+ border: 1px solid $thumbnail-border;
+ border-radius: $thumbnail-border-radius;
+ transition: all .2s ease-in-out;
+ @include box-shadow(0 1px 2px rgba(0,0,0,.075));
+
+ // Keep them at most 100% wide
+ @include img-responsive(inline-block);
+}
+
+// Perfect circle
+.img-circle {
+ border-radius: 50%; // set radius in percents
+}
+
+
+// Horizontal rules
+
+hr {
+ margin-top: $line-height-computed;
+ margin-bottom: $line-height-computed;
+ border: 0;
+ border-top: 1px solid $hr-border;
+}
+
+
+// Only display content to screen readers
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0,0,0,0);
+ border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+// Credit: HTML5 Boilerplate
+
+.sr-only-focusable {
+ &:active,
+ &:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+ }
+}
diff --git a/scss/_tables.scss b/scss/_tables.scss
new file mode 100644
index 000000000..a47aa8e9c
--- /dev/null
+++ b/scss/_tables.scss
@@ -0,0 +1,314 @@
+//
+// Tables
+// --------------------------------------------------
+
+table {
+ background-color: $table-bg;
+}
+caption {
+ padding-top: $table-cell-padding;
+ padding-bottom: $table-cell-padding;
+ color: $text-muted;
+ text-align: left;
+}
+th {
+ text-align: left;
+}
+
+
+// Baseline styles
+
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: $line-height-computed;
+ // Cells
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ padding: $table-cell-padding;
+ line-height: $line-height-base;
+ vertical-align: top;
+ border-top: 1px solid $table-border-color;
+ }
+ }
+ }
+ // Bottom align for column headings
+ > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid $table-border-color;
+ }
+ // Remove top border from thead by default
+// > caption + thead,
+// > colgroup + thead,
+// > thead:first-child {
+// > tr:first-child {
+// > th,
+// > td {
+// border-top: 0;
+// }
+// }
+// }
+ // Account for multiple tbody instances
+ > tbody + tbody {
+ border-top: 2px solid $table-border-color;
+ }
+
+ // Nesting
+// .table {
+// background-color: $body-bg;
+// }
+}
+
+
+// Condensed table w/ half padding
+
+.table-sm {
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ padding: $table-sm-cell-padding;
+ }
+ }
+ }
+}
+
+
+// Bordered version
+//
+// Add borders all around the table and between all the columns.
+
+.table-bordered {
+ border: 1px solid $table-border-color;
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ border: 1px solid $table-border-color;
+ }
+ }
+ }
+ > thead > tr {
+ > th,
+ > td {
+ border-bottom-width: 2px;
+ }
+ }
+}
+
+
+// Zebra-striping
+//
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+
+.table-striped {
+ > tbody > tr:nth-child(odd) {
+ background-color: $table-bg-accent;
+ }
+}
+
+
+// Hover effect
+//
+// Placed here since it has to come after the potential zebra striping
+
+.table-hover {
+ > tbody > tr:hover {
+ background-color: $table-bg-hover;
+ }
+}
+
+
+// Table cell sizing
+//
+// Reset default table behavior
+
+table col[class*="col-"] {
+ position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+ float: none;
+ display: table-column;
+}
+table {
+ td,
+ th {
+ &[class*="col-"] {
+ position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+ float: none;
+ display: table-cell;
+ }
+ }
+}
+
+
+// Table backgrounds
+//
+// Exact selectors below required to override `.table-striped` and prevent
+// inheritance to nested tables.
+
+// Generate the contextual variants
+@include table-row-variant(active, $table-bg-active);
+@include table-row-variant(success, $state-success-bg);
+@include table-row-variant(info, $state-info-bg);
+@include table-row-variant(warning, $state-warning-bg);
+@include table-row-variant(danger, $state-danger-bg);
+
+
+// Responsive tables
+//
+// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
+// by enabling horizontal scrolling. Only applies <768px. Everything above that
+// will display normally.
+
+.table-responsive {
+ overflow-x: auto;
+ min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)
+
+ @media screen and (max-width: $screen-xs-max) {
+ width: 100%;
+ margin-bottom: ($line-height-computed * 0.75);
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid $table-border-color;
+
+ // Tighten up spacing
+ > .table {
+ margin-bottom: 0;
+
+ // Ensure the content doesn't wrap
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ white-space: nowrap;
+ }
+ }
+ }
+ }
+
+ // Special overrides for the bordered tables
+ > .table-bordered {
+ border: 0;
+
+ // Nuke the appropriate borders so that the parent can handle them
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th:first-child,
+ > td:first-child {
+ border-left: 0;
+ }
+ > th:last-child,
+ > td:last-child {
+ border-right: 0;
+ }
+ }
+ }
+
+ // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
+ // chances are there will be only one `tr` in a `thead` and that would
+ // remove the border altogether.
+ > tbody,
+ > tfoot {
+ > tr:last-child {
+ > th,
+ > td {
+ border-bottom: 0;
+ }
+ }
+ }
+
+ }
+ }
+}
+
+
+.table > .thead-inverse {
+ > tr > th {
+ color: #fff;
+ background-color: $gray-dark;
+ }
+}
+.table > .thead-default {
+ > tr > th {
+ color: $gray;
+ background-color: $gray-lighter;
+ }
+}
+
+.table-inverse {
+ color: $gray-lighter;
+ background-color: $gray-dark;
+
+ &.table-bordered {
+ border: 0;
+ }
+
+ > thead,
+ > tbody {
+ > tr {
+ > th,
+ > td {
+ border-color: $gray;
+ }
+ }
+ }
+}
+
+
+.table-reflow {
+
+ thead {
+ float: left;
+ }
+
+ tbody {
+ display: block;
+ white-space: nowrap;
+ }
+
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ border-top: 1px solid $table-border-color;
+ border-left: 1px solid $table-border-color;
+
+ &:last-child {
+ border-right: 1px solid $table-border-color;
+ }
+ }
+ }
+
+ &:last-child {
+ > tr:last-child {
+ > th,
+ > td {
+ border-bottom: 1px solid $table-border-color;
+ }
+ }
+ }
+ }
+
+ tr {
+ float: left;
+
+ th,
+ td {
+ display: block !important;
+ border: 1px solid $table-border-color;
+ }
+ }
+}
diff --git a/scss/_tooltip.scss b/scss/_tooltip.scss
new file mode 100644
index 000000000..e738f8ddc
--- /dev/null
+++ b/scss/_tooltip.scss
@@ -0,0 +1,103 @@
+//
+// Tooltips
+// --------------------------------------------------
+
+
+// Base class
+.tooltip {
+ position: absolute;
+ z-index: $zindex-tooltip;
+ display: block;
+ visibility: visible;
+ // Reset font and text propertes given new insertion method
+ font-family: $font-family-base;
+ font-size: $font-size-sm;
+ font-weight: normal;
+ line-height: 1.4;
+ opacity: 0;
+
+ &.in { opacity: $tooltip-opacity; }
+ &.top { margin-top: -3px; padding: $tooltip-arrow-width 0; }
+ &.right { margin-left: 3px; padding: 0 $tooltip-arrow-width; }
+ &.bottom { margin-top: 3px; padding: $tooltip-arrow-width 0; }
+ &.left { margin-left: -3px; padding: 0 $tooltip-arrow-width; }
+}
+
+// Wrapper for the tooltip content
+.tooltip-inner {
+ max-width: $tooltip-max-width;
+ padding: 3px 8px;
+ color: $tooltip-color;
+ text-align: center;
+ text-decoration: none;
+ background-color: $tooltip-bg;
+ @include border-radius($border-radius-base);
+}
+
+// Arrows
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1
+.tooltip {
+ &.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -$tooltip-arrow-width;
+ border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
+ border-top-color: $tooltip-arrow-color;
+ }
+ &.top-left .tooltip-arrow {
+ bottom: 0;
+ right: $tooltip-arrow-width;
+ margin-bottom: -$tooltip-arrow-width;
+ border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
+ border-top-color: $tooltip-arrow-color;
+ }
+ &.top-right .tooltip-arrow {
+ bottom: 0;
+ left: $tooltip-arrow-width;
+ margin-bottom: -$tooltip-arrow-width;
+ border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
+ border-top-color: $tooltip-arrow-color;
+ }
+ &.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -$tooltip-arrow-width;
+ border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;
+ border-right-color: $tooltip-arrow-color;
+ }
+ &.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -$tooltip-arrow-width;
+ border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;
+ border-left-color: $tooltip-arrow-color;
+ }
+ &.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -$tooltip-arrow-width;
+ border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
+ border-bottom-color: $tooltip-arrow-color;
+ }
+ &.bottom-left .tooltip-arrow {
+ top: 0;
+ right: $tooltip-arrow-width;
+ margin-top: -$tooltip-arrow-width;
+ border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
+ border-bottom-color: $tooltip-arrow-color;
+ }
+ &.bottom-right .tooltip-arrow {
+ top: 0;
+ left: $tooltip-arrow-width;
+ margin-top: -$tooltip-arrow-width;
+ border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
+ border-bottom-color: $tooltip-arrow-color;
+ }
+}
diff --git a/scss/_type.scss b/scss/_type.scss
new file mode 100644
index 000000000..4269b4526
--- /dev/null
+++ b/scss/_type.scss
@@ -0,0 +1,233 @@
+//
+// Typography
+// --------------------------------------------------
+
+
+// Headings
+// -------------------------
+
+h1, h2, h3, h4, h5, h6,
+.h1, .h2, .h3, .h4, .h5, .h6 {
+ margin-top: 0;
+ font-family: $headings-font-family;
+ font-weight: $headings-font-weight;
+ line-height: $headings-line-height;
+ color: $headings-color;
+
+ small,
+ .small {
+ font-weight: normal;
+ line-height: 1;
+ color: $headings-small-color;
+ }
+}
+
+h1, .h1,
+h2, .h2,
+h3, .h3 {
+ margin-bottom: ($line-height-computed / 2);
+
+ small,
+ .small {
+ font-size: 65%;
+ }
+}
+h4, .h4,
+h5, .h5,
+h6, .h6 {
+ margin-bottom: ($line-height-computed / 2);
+
+ small,
+ .small {
+ font-size: 75%;
+ }
+}
+
+h1, .h1 { font-size: $font-size-h1; }
+h2, .h2 { font-size: $font-size-h2; }
+h3, .h3 { font-size: $font-size-h3; }
+h4, .h4 { font-size: $font-size-h4; }
+h5, .h5 { font-size: $font-size-h5; }
+h6, .h6 { font-size: $font-size-h6; }
+
+
+// Body text
+// -------------------------
+
+p {
+ margin-top: 0;
+ margin-bottom: 1rem;
+}
+
+.lead {
+ font-size: 1.25rem;
+ font-weight: 300;
+}
+
+
+// Emphasis & misc
+// -------------------------
+
+// Ex: (12px small font / 14px base font) * 100% = about 85%
+small,
+.small {
+ font-size: floor((100% * $font-size-sm / $font-size-base));
+}
+
+mark,
+.mark {
+ background-color: $state-warning-bg;
+ padding: .2em;
+}
+
+
+// Page header
+// -------------------------
+
+// .page-header {
+// padding-bottom: (($line-height-computed / 2) - 1);
+// margin: ($line-height-computed * 2) 0 @line-height-computed;
+// border-bottom: 1px solid @page-header-border-color;
+// }
+
+
+// Lists
+// -------------------------
+
+// Unordered and Ordered lists
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: ($line-height-computed / 2);
+ ul,
+ ol {
+ margin-bottom: 0;
+ }
+}
+
+// List options
+
+// Unstyled keeps list items block level, just removes default browser padding and list-style
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+// Inline turns list items into inline-block
+.list-inline {
+ @extend list-unstyled();
+ margin-left: -5px;
+
+ > li {
+ display: inline-block;
+ padding-left: 5px;
+ padding-right: 5px;
+ }
+}
+
+// Description Lists
+dl {
+ margin-top: 0; // Remove browser default
+ margin-bottom: $line-height-computed;
+}
+dt,
+dd {
+ line-height: $line-height-base;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 0; // Undo browser default
+}
+
+// Horizontal description lists
+//
+// Defaults to being stacked without any of the below styles applied, until the
+// grid breakpoint is reached (default of ~768px).
+
+.dl-horizontal {
+ dd {
+ @include clearfix(); // Clear the floated `dt` if an empty `dd` is present
+ }
+
+ @media (min-width: $grid-float-breakpoint) {
+ dt {
+ float: left;
+ width: ($dl-horizontal-offset - 20);
+ clear: left;
+ text-align: right;
+ @include text-overflow();
+ }
+ dd {
+ margin-left: $dl-horizontal-offset;
+ }
+ }
+}
+
+
+// Misc
+// -------------------------
+
+// Abbreviations and acronyms
+abbr[title],
+// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted $abbr-border-color;
+}
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+// Blockquotes
+blockquote {
+ padding: ($line-height-computed / 2) $line-height-computed;
+ margin: 0 0 $line-height-computed;
+ font-size: $blockquote-font-size;
+ border-left: 5px solid $blockquote-border-color;
+
+ p,
+ ul,
+ ol {
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ footer {
+ display: block;
+ font-size: 80%; // back to default font-size
+ line-height: $line-height-base;
+ color: $blockquote-small-color;
+
+ &:before {
+ content: '\2014 \00A0'; // em dash, nbsp
+ }
+ }
+}
+
+// Opposite alignment of blockquote
+.blockquote-reverse {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid $blockquote-border-color;
+ border-left: 0;
+ text-align: right;
+
+ // Account for citation
+ footer {
+ &:before { content: ''; }
+ &:after {
+ content: '\00A0 \2014'; // nbsp, em dash
+ }
+ }
+}
+
+// Addresses
+address {
+ margin-bottom: $line-height-computed;
+ font-style: normal;
+ line-height: $line-height-base;
+}
diff --git a/scss/_utilities-responsive.scss b/scss/_utilities-responsive.scss
new file mode 100644
index 000000000..ef9b52ce0
--- /dev/null
+++ b/scss/_utilities-responsive.scss
@@ -0,0 +1,148 @@
+//
+// Responsive: Utility classes
+// --------------------------------------------------
+
+
+// IE10 in Windows (Phone) 8
+//
+// Support for responsive views via media queries is kind of borked in IE10, for
+// Surface/desktop in split view and for Windows Phone 8. This particular fix
+// must be accompanied by a snippet of JavaScript to sniff the user agent and
+// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
+// our Getting Started page for more information on this bug.
+//
+// For more information, see the following:
+//
+// Issue: https://github.com/twbs/bootstrap/issues/10497
+// Docs: http://getbootstrap.com/getting-started/#support-ie10-width
+// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/
+// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
+
+@-ms-viewport {
+ width: device-width;
+}
+
+
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+
+.visible-xs-block {
+ @include media-xs {
+ display: block !important;
+ }
+}
+.visible-xs-inline {
+ @include media-xs {
+ display: inline !important;
+ }
+}
+.visible-xs-inline-block {
+ @include media-xs {
+ display: inline-block !important;
+ }
+}
+
+.visible-sm-block {
+ @include media-sm-max {
+ display: block !important;
+ }
+}
+.visible-sm-inline {
+ @include media-sm-max {
+ display: inline !important;
+ }
+}
+.visible-sm-inline-block {
+ @include media-sm-max {
+ display: inline-block !important;
+ }
+}
+
+.visible-md-block {
+ @include media-md-max {
+ display: block !important;
+ }
+}
+.visible-md-inline {
+ @include media-md-max {
+ display: inline !important;
+ }
+}
+.visible-md-inline-block {
+ @include media-md-max {
+ display: inline-block !important;
+ }
+}
+
+.visible-lg-block {
+ @include media-lg {
+ display: block !important;
+ }
+}
+.visible-lg-inline {
+ @include media-lg {
+ display: inline !important;
+ }
+}
+.visible-lg-inline-block {
+ @include media-lg {
+ display: inline-block !important;
+ }
+}
+
+@include media-sm-max {
+ @include responsive-invisibility('.hidden-sm');
+}
+
+@include media-md-max {
+ @include responsive-invisibility('.hidden-md');
+}
+
+@include media-lg {
+ @include responsive-invisibility('.hidden-lg');
+}
+
+
+// Print utilities
+//
+// Media queries are placed on the inside to be mixin-friendly.
+
+.visible-print-block {
+ display: none !important;
+
+ @media print {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+
+ @media print {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+
+ @media print {
+ display: inline-block !important;
+ }
+}
+
+.hidden-print {
+ @media print {
+ @include responsive-invisibility('.hidden-print');
+ }
+}
diff --git a/scss/_utilities.scss b/scss/_utilities.scss
new file mode 100644
index 000000000..8cc6fa1ef
--- /dev/null
+++ b/scss/_utilities.scss
@@ -0,0 +1,122 @@
+//
+// Utility classes
+// --------------------------------------------------
+
+
+// Floats
+.clearfix {
+ @include clearfix();
+}
+.center-block {
+ @include center-block();
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+
+
+// Inverse
+.inverse {
+ color: $gray-lighter;
+ background-color: $gray-dark;
+}
+
+// Spacing
+.p-a {
+ padding: $spacer;
+}
+.p-h {
+ padding-left: $spacer;
+ padding-right: $spacer;
+}
+.p-v {
+ padding-top: $spacer;
+ padding-bottom: $spacer;
+}
+
+// Positioning
+.pos-f-t {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: $zindex-navbar-fixed;
+}
+
+
+// Toggling content
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ @include text-hide();
+}
+
+
+// Hide from screenreaders and browsers
+//
+// Credit: HTML5 Boilerplate
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+
+
+// For Affix plugin
+.affix {
+ position: fixed;
+}
+
+// Alignment
+.text-left { text-align: left; }
+.text-right { text-align: right; }
+.text-center { text-align: center; }
+.text-justify { text-align: justify; }
+.text-nowrap { white-space: nowrap; }
+
+// Transformation
+.text-lowercase { text-transform: lowercase; }
+.text-uppercase { text-transform: uppercase; }
+.text-capitalize { text-transform: capitalize; }
+
+// Contextual colors
+
+.text-muted {
+ color: $text-muted;
+}
+
+@include text-emphasis-variant('.text-primary', $brand-primary);
+
+@include text-emphasis-variant('.text-success', $state-success-text);
+
+@include text-emphasis-variant('.text-info', $state-info-text);
+
+@include text-emphasis-variant('.text-warning', $state-warning-text);
+
+@include text-emphasis-variant('.text-danger', $state-danger-text);
+
+// Contextual backgrounds
+// For now we'll leave these alongside the text classes until v4 when we can
+// safely shift things around (per SemVer rules).
+
+.bg-primary {
+ // Given the contrast here, this is the only class to have its color inverted
+ // automatically.
+ color: #fff;
+}
+
+@include bg-variant('.bg-primary', $brand-primary);
+
+@include bg-variant('.bg-success', $state-success-bg);
+
+@include bg-variant('.bg-info', $state-info-bg);
+
+@include bg-variant('.bg-warning', $state-warning-bg);
+
+@include bg-variant('.bg-danger', $state-danger-bg);
diff --git a/scss/_variables.scss b/scss/_variables.scss
new file mode 100644
index 000000000..92b2a5fa1
--- /dev/null
+++ b/scss/_variables.scss
@@ -0,0 +1,777 @@
+//
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+$gray-dark: #373a3c;
+$gray-darker: $gray-dark; // TODO: remove
+$gray: #55595c;
+$gray-light: #818a91;
+$gray-lighter: #eceeef;
+$gray-lightest: #f7f7f9;
+
+$brand-primary: #0275d8;
+$brand-success: #5cb85c;
+$brand-info: #5bc0de;
+$brand-warning: #f0ad4e;
+$brand-danger: #d9534f;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+$body-bg: #fff;
+//** Global text color on `<body>`.
+$text-color: $gray-dark;
+
+//** Global textual link color.
+$link-color: $brand-primary;
+//** Link hover color set via `darken()` function.
+$link-hover-color: darken($link-color, 15%);
+//** Link hover decoration.
+$link-hover-decoration: underline;
+
+
+//== Global settings
+//
+//## Quickly modify global styling by enabling or disabling features.
+
+$enable-rounded: true !default;
+$enable-shadows: true !default;
+$enable-gradients: true !default;
+$enable-transitions: true !default;
+
+$spacer: 1rem;
+$border-width: .075rem;
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
+$font-family-serif: Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+$font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+$font-family-base: $font-family-sans-serif;
+
+//** Pixel value used to responsively scale all typography. Applied to the `<html>` element.
+$font-size-root: 16;
+//** Sets the `<body>` and more to the root pixel value.
+$font-size-base: 1rem;
+$font-size-lg: 1.25rem;
+$font-size-sm: .85rem;
+$font-size-xs: .75rem;
+
+$font-size-h1: 3rem;
+$font-size-h2: 2.5rem;
+$font-size-h3: 2rem;
+$font-size-h4: 1.5rem;
+$font-size-h5: 1.25rem;
+$font-size-h6: 1rem;
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base: 1.5;
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed: ($font-size-root * $line-height-base);
+
+//** By default, this inherits from the `<body>`.
+$headings-font-family: inherit;
+$headings-font-weight: 500;
+$headings-line-height: 1.1;
+$headings-color: inherit;
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+$padding-base-vertical: .5rem;
+$padding-base-horizontal: .75rem;
+
+$padding-lg-vertical: .75rem;
+$padding-lg-horizontal: 1.5rem;
+
+$padding-sm-vertical: .3rem;
+$padding-sm-horizontal: .75rem;
+
+$padding-xs-vertical: .2rem;
+$padding-xs-horizontal: .5rem;
+
+$line-height-lg: 1.33;
+$line-height-sm: 1.5;
+
+$border-radius-base: .25rem;
+$border-radius-lg: .3rem;
+$border-radius-sm: .2rem;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color: #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg: $brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+$caret-width-base: .3em;
+//** Carets increase slightly in size for larger components.
+$caret-width-large: $caret-width-base;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+$table-cell-padding: .75rem;
+//** Padding for cells in `.table-sm`.
+$table-sm-cell-padding: .3rem;
+
+//** Default background color used for all tables.
+$table-bg: transparent;
+//** Background color used for `.table-striped`.
+$table-bg-accent: #f9f9f9;
+//** Background color used for `.table-hover`.
+$table-bg-hover: #f5f5f5;
+$table-bg-active: $table-bg-hover;
+
+//** Border color for table and cell borders.
+$table-border-color: $gray-lighter;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+$btn-font-weight: normal;
+
+$btn-primary-color: #fff;
+$btn-primary-bg: $brand-primary;
+$btn-primary-border: darken($btn-primary-bg, 5%);
+
+$btn-secondary-color: $gray-dark;
+$btn-secondary-bg: #fff;
+$btn-secondary-border: $gray-lighter;
+
+$btn-info-color: #fff;
+$btn-info-bg: $brand-info;
+$btn-info-border: darken($btn-info-bg, 5%);
+
+$btn-success-color: #fff;
+$btn-success-bg: $brand-success;
+$btn-success-border: darken($btn-success-bg, 5%);
+
+$btn-warning-color: #fff;
+$btn-warning-bg: $brand-warning;
+$btn-warning-border: darken($btn-warning-bg, 5%);
+
+$btn-danger-color: #fff;
+$btn-danger-bg: $brand-danger;
+$btn-danger-border: darken($btn-danger-bg, 5%);
+
+$btn-link-disabled-color: $gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+$input-bg: #fff;
+//** `<input disabled>` background color
+$input-bg-disabled: $gray-lighter;
+
+//** Text color for `<input>`s
+$input-color: $gray;
+//** `<input>` border color
+$input-border: #ccc;
+
+// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
+//** Default `.form-control` border radius
+$input-border-radius: $border-radius-base;
+//** Large `.form-control` border radius
+$input-border-radius-lg: $border-radius-lg;
+//** Small `.form-control` border radius
+$input-border-radius-sm: $border-radius-sm;
+
+//** Border color for inputs on focus
+$input-border-focus: #66afe9;
+$input-box-shadow-focus: rgba(102,175,233,.6);
+
+//** Placeholder text color
+$input-color-placeholder: #999;
+
+//** Default `.form-control` height
+$input-height-base: (($font-size-base * $line-height-base) + ($padding-base-vertical * 2) + ($border-width * 2));
+//** Large `.form-control` height
+$input-height-lg: (($font-size-lg * $line-height-lg) + ($padding-lg-vertical * 2) + ($border-width * 2));
+//** Small `.form-control` height
+$input-height-sm: (($font-size-sm * $line-height-sm) + ($padding-sm-vertical * 2) + ($border-width * 2));
+
+$legend-color: $gray-dark;
+$legend-border-color: #e5e5e5;
+
+//** Background color for textual input addons
+$input-group-addon-bg: $gray-lighter;
+//** Border color for textual input addons
+$input-group-addon-border-color: $input-border;
+
+//** Disabled cursor for form controls and buttons.
+$cursor-disabled: not-allowed;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+$dropdown-bg: #fff;
+//** Dropdown menu `border-color`.
+$dropdown-border: rgba(0,0,0,.15);
+//** Divider color for between dropdown items.
+$dropdown-divider-bg: #e5e5e5;
+
+//** Dropdown link text color.
+$dropdown-link-color: $gray-dark;
+//** Hover color for dropdown links.
+$dropdown-link-hover-color: darken($gray-dark, 5%);
+//** Hover background for dropdown links.
+$dropdown-link-hover-bg: #f5f5f5;
+
+//** Active dropdown menu item text color.
+$dropdown-link-active-color: $component-active-color;
+//** Active dropdown menu item background color.
+$dropdown-link-active-bg: $component-active-bg;
+
+//** Disabled dropdown menu item background color.
+$dropdown-link-disabled-color: $gray-light;
+
+//** Text color for headers within dropdown menus.
+$dropdown-header-color: $gray-light;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+$zindex-navbar: 1000;
+$zindex-dropdown: 1000;
+$zindex-popover: 1060;
+$zindex-tooltip: 1070;
+$zindex-navbar-fixed: 1030;
+$zindex-modal: 1040;
+
+
+//== Media queries breakpoints
+//
+//## Define the minimum and maximum dimensions at which your layout will change, adapting to different screen sizes.
+
+// Large screen / wide desktop
+$screen-lg-min: 75em;
+
+// Medium screen / desktop
+$screen-md-min: 62em;
+$screen-md-max: ($screen-lg-min - .1);
+
+// Small screen / tablet
+$screen-sm-min: 48em;
+$screen-sm-max: ($screen-md-min - .1);
+
+// Extra small screen / phone
+$screen-xs-max: ($screen-sm-min - .1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+$grid-columns: 12;
+//** Padding between columns. Gets divided in half for the left and right.
+$grid-gutter-width: 1.5rem;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+$grid-float-breakpoint: $screen-sm-min;
+//** Point at which the navbar begins collapsing.
+$grid-float-breakpoint-max: ($grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+//** For `$screen-sm-min` and up.
+$container-sm: 45rem; // 720
+
+//** For `$screen-md-min` and up.
+$container-md: 60rem; // 960
+
+//** For `$screen-lg-min` and up.
+$container-lg: 72.25rem; // 1140
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+// $navbar-height: 50px;
+$navbar-margin-bottom: $line-height-computed;
+$navbar-border-radius: $border-radius-base;
+$navbar-padding-horizontal: $spacer;
+$navbar-padding-vertical: ($spacer / 2);
+$navbar-collapse-max-height: 340px;
+
+$navbar-default-color: #777;
+$navbar-default-bg: #f8f8f8;
+$navbar-default-border: darken($navbar-default-bg, 6.5%);
+
+// Navbar links
+$navbar-default-link-color: #777;
+$navbar-default-link-hover-color: #333;
+$navbar-default-link-hover-bg: transparent;
+$navbar-default-link-active-color: #555;
+$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%);
+$navbar-default-link-disabled-color: #ccc;
+$navbar-default-link-disabled-bg: transparent;
+
+// Navbar brand label
+$navbar-default-brand-color: $navbar-default-link-color;
+$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%);
+$navbar-default-brand-hover-bg: transparent;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg: #ddd;
+$navbar-default-toggle-icon-bar-bg: #888;
+$navbar-default-toggle-border-color: #ddd;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color: lighten($gray-light, 12%);
+$navbar-inverse-bg: #373a3c;
+$navbar-inverse-border: darken($navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+$navbar-inverse-link-color: lighten($gray-light, 15%);
+$navbar-inverse-link-hover-color: #fff;
+$navbar-inverse-link-hover-bg: transparent;
+$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color;
+$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%);
+$navbar-inverse-link-disabled-color: #444;
+$navbar-inverse-link-disabled-bg: transparent;
+
+// Inverted navbar brand label
+$navbar-inverse-brand-color: $navbar-inverse-link-color;
+$navbar-inverse-brand-hover-color: #fff;
+$navbar-inverse-brand-hover-bg: transparent;
+
+// Inverted navbar toggle
+$navbar-inverse-toggle-hover-bg: #333;
+$navbar-inverse-toggle-icon-bar-bg: #fff;
+$navbar-inverse-toggle-border-color: #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+$nav-link-padding: .6em 1em;
+$nav-link-hover-bg: $gray-lighter;
+
+$nav-disabled-link-color: $gray-light;
+$nav-disabled-link-hover-color: $gray-light;
+
+//== Tabs
+$nav-tabs-border-color: #ddd;
+
+$nav-tabs-link-hover-border-color: $gray-lighter;
+
+$nav-tabs-active-link-hover-bg: $body-bg;
+$nav-tabs-active-link-hover-color: $gray;
+$nav-tabs-active-link-hover-border-color: #ddd;
+
+$nav-tabs-justified-link-border-color: #ddd;
+$nav-tabs-justified-active-link-border-color: $body-bg;
+
+//== Pills
+$nav-pills-border-radius: $border-radius-base;
+$nav-pills-active-link-hover-bg: $component-active-bg;
+$nav-pills-active-link-hover-color: $component-active-color;
+
+
+//== Pagination
+//
+//##
+
+$pagination-color: $link-color;
+$pagination-bg: #fff;
+$pagination-border: #ddd;
+
+$pagination-hover-color: $link-hover-color;
+$pagination-hover-bg: $gray-lighter;
+$pagination-hover-border: #ddd;
+
+$pagination-active-color: #fff;
+$pagination-active-bg: $brand-primary;
+$pagination-active-border: $brand-primary;
+
+$pagination-disabled-color: $gray-light;
+$pagination-disabled-bg: #fff;
+$pagination-disabled-border: #ddd;
+
+
+//== Pager
+//
+//##
+
+$pager-bg: $pagination-bg;
+$pager-border: $pagination-border;
+$pager-border-radius: 15px;
+
+$pager-hover-bg: $pagination-hover-bg;
+
+$pager-active-bg: $pagination-active-bg;
+$pager-active-color: $pagination-active-color;
+
+$pager-disabled-color: $pagination-disabled-color;
+
+
+//== Jumbotron
+//
+//##
+
+$jumbotron-padding: 2rem;
+$jumbotron-color: inherit;
+$jumbotron-bg: $gray-lighter;
+$jumbotron-heading-color: inherit;
+// $jumbotron-font-size: ceil(($font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+$state-success-text: #3c763d;
+$state-success-bg: #dff0d8;
+$state-success-border: darken($state-success-bg, 5%);
+
+$state-info-text: #31708f;
+$state-info-bg: #d9edf7;
+$state-info-border: darken($state-info-bg, 7%);
+
+$state-warning-text: #8a6d3b;
+$state-warning-bg: #fcf8e3;
+$state-warning-border: darken($state-warning-bg, 5%);
+
+$state-danger-text: #a94442;
+$state-danger-bg: #f2dede;
+$state-danger-border: darken($state-danger-bg, 5%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+$tooltip-max-width: 200px;
+//** Tooltip text color
+$tooltip-color: #fff;
+//** Tooltip background color
+$tooltip-bg: #000;
+$tooltip-opacity: .9;
+
+//** Tooltip arrow width
+$tooltip-arrow-width: 5px;
+//** Tooltip arrow color
+$tooltip-arrow-color: $tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+$popover-bg: #fff;
+//** Popover maximum width
+$popover-max-width: 276px;
+//** Popover border color
+$popover-border-color: rgba(0,0,0,.2);
+//** Popover fallback border color
+$popover-fallback-border-color: #ccc;
+
+//** Popover title background color
+$popover-title-bg: darken($popover-bg, 3%);
+
+//** Popover arrow width
+$popover-arrow-width: 10px;
+//** Popover arrow color
+$popover-arrow-color: $popover-bg;
+
+//** Popover outer arrow width
+$popover-arrow-outer-width: ($popover-arrow-width + 1);
+//** Popover outer arrow color
+$popover-arrow-outer-color: fadein($popover-border-color, 5%);
+//** Popover outer arrow fallback color
+$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+$label-default-bg: $gray-light;
+//** Primary label background color
+$label-primary-bg: $brand-primary;
+//** Success label background color
+$label-success-bg: $brand-success;
+//** Info label background color
+$label-info-bg: $brand-info;
+//** Warning label background color
+$label-warning-bg: $brand-warning;
+//** Danger label background color
+$label-danger-bg: $brand-danger;
+
+//** Default label text color
+$label-color: #fff;
+//** Default text color of a linked label
+$label-link-hover-color: #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+$modal-inner-padding: 15px;
+
+//** Padding applied to the modal title
+$modal-title-padding: 15px;
+//** Modal title line-height
+$modal-title-line-height: $line-height-base;
+
+//** Background color of modal content area
+$modal-content-bg: #fff;
+//** Modal content border color
+$modal-content-border-color: rgba(0,0,0,.2);
+
+//** Modal backdrop background color
+$modal-backdrop-bg: #000;
+//** Modal backdrop opacity
+$modal-backdrop-opacity: .5;
+//** Modal header border color
+$modal-header-border-color: #e5e5e5;
+//** Modal footer border color
+$modal-footer-border-color: $modal-header-border-color;
+
+$modal-lg: 900px;
+$modal-md: 600px;
+$modal-sm: 300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+$alert-padding: 15px;
+$alert-border-radius: $border-radius-base;
+$alert-link-font-weight: bold;
+
+$alert-success-bg: $state-success-bg;
+$alert-success-text: $state-success-text;
+$alert-success-border: $state-success-border;
+
+$alert-info-bg: $state-info-bg;
+$alert-info-text: $state-info-text;
+$alert-info-border: $state-info-border;
+
+$alert-warning-bg: $state-warning-bg;
+$alert-warning-text: $state-warning-text;
+$alert-warning-border: $state-warning-border;
+
+$alert-danger-bg: $state-danger-bg;
+$alert-danger-text: $state-danger-text;
+$alert-danger-border: $state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+$progress-bg: #f5f5f5;
+//** Progress bar text color
+$progress-bar-color: #fff;
+//** Variable for setting rounded corners on progress bar.
+$progress-border-radius: $border-radius-base;
+
+//** Default progress bar color
+$progress-bar-bg: $brand-primary;
+//** Success progress bar color
+$progress-bar-success-bg: $brand-success;
+//** Warning progress bar color
+$progress-bar-warning-bg: $brand-warning;
+//** Danger progress bar color
+$progress-bar-danger-bg: $brand-danger;
+//** Info progress bar color
+$progress-bar-info-bg: $brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+$list-group-bg: #fff;
+//** `.list-group-item` border color
+$list-group-border: #ddd;
+//** List group border radius
+$list-group-border-radius: $border-radius-base;
+
+//** Background color of single list items on hover
+$list-group-hover-bg: #f5f5f5;
+//** Text color of active list items
+$list-group-active-color: $component-active-color;
+//** Background color of active list items
+$list-group-active-bg: $component-active-bg;
+//** Border color of active list elements
+$list-group-active-border: $list-group-active-bg;
+//** Text color for content within active list items
+$list-group-active-text-color: lighten($list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+$list-group-disabled-color: $gray-light;
+//** Background color of disabled list items
+$list-group-disabled-bg: $gray-lighter;
+//** Text color for content within disabled list items
+$list-group-disabled-text-color: $list-group-disabled-color;
+
+$list-group-link-color: #555;
+$list-group-link-hover-color: $list-group-link-color;
+$list-group-link-heading-color: #333;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+$thumbnail-padding: .25rem;
+//** Thumbnail background color
+$thumbnail-bg: $body-bg;
+//** Thumbnail border color
+$thumbnail-border: #ddd;
+//** Thumbnail border radius
+$thumbnail-border-radius: $border-radius-base;
+
+
+//== Badges
+//
+//##
+
+$badge-color: #fff;
+//** Linked badge text color on hover
+$badge-link-hover-color: #fff;
+$badge-bg: $gray-light;
+
+//** Badge text color in active nav link
+$badge-active-color: $link-color;
+//** Badge background color in active nav link
+$badge-active-bg: #fff;
+
+$badge-font-weight: bold;
+$badge-line-height: 1;
+$badge-border-radius: 2em;
+
+
+//== Breadcrumbs
+//
+//##
+
+$breadcrumb-padding-vertical: .75rem;
+$breadcrumb-padding-horizontal: 1rem;
+
+//** Breadcrumb background color
+$breadcrumb-bg: $gray-lighter;
+//** Text color for the generated divider between breadcrumb items
+$breadcrumb-divider-color: $gray-light;
+//** Text color of current page in the breadcrumb
+$breadcrumb-active-color: $gray-light;
+//** Textual divider for between breadcrumb elements
+$breadcrumb-divider: "/";
+
+
+//== Carousel
+//
+//##
+
+$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
+
+$carousel-control-color: #fff;
+$carousel-control-width: 15%;
+$carousel-control-opacity: .5;
+$carousel-control-font-size: 20px;
+
+$carousel-indicator-active-bg: #fff;
+$carousel-indicator-border-color: #fff;
+
+$carousel-caption-color: #fff;
+
+
+//== Close
+//
+//##
+
+$close-font-weight: bold;
+$close-color: #000;
+$close-text-shadow: 0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+$code-color: #d44950;
+$code-bg: #f7f7f9;
+
+$kbd-color: #fff;
+$kbd-bg: #333;
+
+$pre-bg: #f7f7f9;
+$pre-color: $gray-dark;
+$pre-border-color: #ccc;
+$pre-scrollable-max-height: 340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+$component-offset-horizontal: 180px;
+//** Text muted color
+$text-muted: $gray-light;
+//** Abbreviations and acronyms border color
+$abbr-border-color: $gray-light;
+//** Headings small color
+$headings-small-color: $gray-light;
+//** Blockquote small color
+$blockquote-small-color: $gray-light;
+//** Blockquote font size
+$blockquote-font-size: ($font-size-base * 1.25);
+//** Blockquote border color
+$blockquote-border-color: $gray-lighter;
+//** Page header border color
+$page-header-border-color: $gray-lighter;
+//** Width of horizontal description list titles
+$dl-horizontal-offset: $component-offset-horizontal;
+//** Horizontal line color.
+$hr-border: $gray-lighter;
diff --git a/scss/bootstrap.scss b/scss/bootstrap.scss
new file mode 100644
index 000000000..6c8445ee5
--- /dev/null
+++ b/scss/bootstrap.scss
@@ -0,0 +1,47 @@
+// Core variables and mixins
+@import "variables";
+@import "mixins";
+
+// // Reset and dependencies
+@import "normalize";
+@import "print";
+
+// Core CSS
+@import "scaffolding";
+@import "type";
+@import "code";
+@import "grid";
+@import "tables";
+@import "forms";
+@import "buttons";
+
+// // Components
+@import "animation";
+@import "dropdown";
+@import "button-group";
+@import "input-group";
+@import "nav";
+@import "navbar";
+@import "card";
+@import "breadcrumb";
+@import "pagination";
+@import "pager";
+@import "labels";
+@import "badge";
+@import "jumbotron";
+@import "alert";
+@import "progress";
+@import "media";
+@import "list-group";
+@import "responsive-embed";
+@import "close";
+
+// Components w/ JavaScript
+@import "modal";
+@import "tooltip";
+@import "popover";
+@import "carousel";
+
+// Utility classes
+@import "utilities";
+@import "utilities-responsive";
diff --git a/scss/mixins/_alert.scss b/scss/mixins/_alert.scss
new file mode 100644
index 000000000..3faf0b5a5
--- /dev/null
+++ b/scss/mixins/_alert.scss
@@ -0,0 +1,14 @@
+// Alerts
+
+@mixin alert-variant($background, $border, $text-color) {
+ background-color: $background;
+ border-color: $border;
+ color: $text-color;
+
+ hr {
+ border-top-color: darken($border, 5%);
+ }
+ .alert-link {
+ color: darken($text-color, 10%);
+ }
+}
diff --git a/scss/mixins/_background-variant.scss b/scss/mixins/_background-variant.scss
new file mode 100644
index 000000000..4993bd2b8
--- /dev/null
+++ b/scss/mixins/_background-variant.scss
@@ -0,0 +1,11 @@
+// Contextual backgrounds
+
+// [converter] $parent hack
+@mixin bg-variant($parent, $color) {
+ #{$parent} {
+ background-color: $color;
+ }
+ a#{$parent}:hover {
+ background-color: darken($color, 10%);
+ }
+}
diff --git a/scss/mixins/_border-radius.scss b/scss/mixins/_border-radius.scss
new file mode 100644
index 000000000..0b76c3004
--- /dev/null
+++ b/scss/mixins/_border-radius.scss
@@ -0,0 +1,21 @@
+// Single side border-radius
+
+@mixin border-top-radius($radius) {
+ border-top-right-radius: $radius;
+ border-top-left-radius: $radius;
+}
+
+@mixin border-right-radius($radius) {
+ border-bottom-right-radius: $radius;
+ border-top-right-radius: $radius;
+}
+
+@mixin border-bottom-radius($radius) {
+ border-bottom-right-radius: $radius;
+ border-bottom-left-radius: $radius;
+}
+
+@mixin border-left-radius($radius) {
+ border-bottom-left-radius: $radius;
+ border-top-left-radius: $radius;
+}
diff --git a/scss/mixins/_buttons.scss b/scss/mixins/_buttons.scss
new file mode 100644
index 000000000..7233b4dc2
--- /dev/null
+++ b/scss/mixins/_buttons.scss
@@ -0,0 +1,56 @@
+// Button variants
+//
+// Easily pump out default styles, as well as :hover, :focus, :active,
+// and disabled options for all buttons
+
+@mixin button-variant($color, $background, $border) {
+ color: $color;
+ background-color: $background;
+ border-color: $border;
+// $shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);
+// .box-shadow($shadow);
+
+ &:hover,
+ &:focus,
+ &.focus,
+ &:active,
+ &.active,
+ .open > &.dropdown-toggle {
+ color: $color;
+ background-color: darken($background, 10%);
+ border-color: darken($border, 12%);
+ }
+ &:active,
+ &.active,
+ .open > &.dropdown-toggle {
+ // Remove the gradient for the pressed/active state
+ background-image: none;
+ @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+ }
+ &.disabled,
+ &[disabled],
+ fieldset[disabled] & {
+ &,
+ &:hover,
+ &:focus,
+ &.focus,
+ &:active,
+ &.active {
+ background-color: $background;
+ border-color: $border;
+ }
+ }
+
+ .badge {
+ color: $background;
+ background-color: $color;
+ }
+}
+
+// Button sizes
+@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
+ padding: $padding-vertical $padding-horizontal;
+ font-size: $font-size;
+ line-height: $line-height;
+ @include border-radius($border-radius);
+}
diff --git a/scss/mixins/_center-block.scss b/scss/mixins/_center-block.scss
new file mode 100644
index 000000000..e06fb5e27
--- /dev/null
+++ b/scss/mixins/_center-block.scss
@@ -0,0 +1,7 @@
+// Center-align a block level element
+
+@mixin center-block() {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
diff --git a/scss/mixins/_clearfix.scss b/scss/mixins/_clearfix.scss
new file mode 100644
index 000000000..dc3e2ab42
--- /dev/null
+++ b/scss/mixins/_clearfix.scss
@@ -0,0 +1,22 @@
+// Clearfix
+//
+// For modern browsers
+// 1. The space content is one way to avoid an Opera bug when the
+// contenteditable attribute is included anywhere else in the document.
+// Otherwise it causes space to appear at the top and bottom of elements
+// that are clearfixed.
+// 2. The use of `table` rather than `block` is only necessary if using
+// `:before` to contain the top-margins of child elements.
+//
+// Source: http://nicolasgallagher.com/micro-clearfix-hack/
+
+@mixin clearfix() {
+ &:before,
+ &:after {
+ content: " "; // 1
+ display: table; // 2
+ }
+ &:after {
+ clear: both;
+ }
+}
diff --git a/scss/mixins/_forms.scss b/scss/mixins/_forms.scss
new file mode 100644
index 000000000..0c057e874
--- /dev/null
+++ b/scss/mixins/_forms.scss
@@ -0,0 +1,88 @@
+// Form validation states
+//
+// Used in _forms.scss to generate the form validation CSS for warnings, errors,
+// and successes.
+
+@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) {
+ // Color the label and help text
+ .help-block,
+ .control-label,
+ .radio,
+ .checkbox,
+ .radio-inline,
+ .checkbox-inline,
+ &.radio label,
+ &.checkbox label,
+ &.radio-inline label,
+ &.checkbox-inline label {
+ color: $text-color;
+ }
+ // Set the border and box shadow on specific inputs to match
+ .form-control {
+ border-color: $border-color;
+ @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
+
+ &:focus {
+ border-color: darken($border-color, 10%);
+ $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%);
+ @include box-shadow($shadow);
+ }
+ }
+ // Set validation states also for addons
+ .input-group-addon {
+ color: $text-color;
+ border-color: $border-color;
+ background-color: $background-color;
+ }
+ // Optional feedback icon
+ .form-control-feedback {
+ color: $text-color;
+ }
+}
+
+// Form control focus state
+//
+// Generate a customized focus state and for any input with the specified color,
+// which defaults to the `@input-border-focus` variable.
+//
+// We highly encourage you to not customize the default value, but instead use
+// this to tweak colors on an as-needed basis. This aesthetic change is based on
+// WebKit's default styles, but applicable to a wider range of browsers. Its
+// usability and accessibility should be taken into account with any change.
+//
+// Example usage: change the default blue border and shadow to white for better
+// contrast against a dark gray background.
+@mixin form-control-focus() {
+ &:focus {
+ border-color: $input-border-focus;
+ outline: 0;
+ $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $input-box-shadow-focus;
+ @include box-shadow($shadow);
+ }
+}
+
+// Form control sizing
+//
+// Relative text size, padding, and border-radii changes for form controls. For
+// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
+// element gets special love because it's special, and that's a fact!
+
+@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
+ #{$parent} {
+ height: $input-height;
+ padding: $padding-vertical $padding-horizontal;
+ font-size: $font-size;
+ line-height: $line-height;
+ @include border-radius($border-radius);
+ }
+
+ select#{$parent} {
+ height: $input-height;
+ line-height: $input-height;
+ }
+
+ textarea#{$parent},
+ select[multiple]#{$parent} {
+ height: auto;
+ }
+}
diff --git a/scss/mixins/_gradients.scss b/scss/mixins/_gradients.scss
new file mode 100644
index 000000000..05118c8b6
--- /dev/null
+++ b/scss/mixins/_gradients.scss
@@ -0,0 +1,56 @@
+// Gradients
+
+// Horizontal gradient, from left to right
+//
+// Creates two color stops, start and end, by specifying a color and position for each color stop.
+// Color stops are not available in IE9 and below.
+@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
+ background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
+ background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12
+ background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down
+}
+
+// Vertical gradient, from top to bottom
+//
+// Creates two color stops, start and end, by specifying a color and position for each color stop.
+// Color stops are not available in IE9 and below.
+@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
+ background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
+ background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Opera 12
+ background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down
+}
+
+@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {
+ background-repeat: repeat-x;
+ background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+
+ background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12
+ background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+}
+@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
+ background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
+ background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
+ background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback
+}
+@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
+ background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);
+ background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);
+ background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
+}
+@mixin gradient-radial($inner-color: #555, $outer-color: #333) {
+ background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);
+ background-image: radial-gradient(circle, $inner-color, $outer-color);
+ background-repeat: no-repeat;
+}
+@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {
+ background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
+ background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
+} \ No newline at end of file
diff --git a/scss/mixins/_grid-framework.scss b/scss/mixins/_grid-framework.scss
new file mode 100644
index 000000000..13c27c374
--- /dev/null
+++ b/scss/mixins/_grid-framework.scss
@@ -0,0 +1,81 @@
+// Framework grid generation
+//
+// Used only by Bootstrap to generate the correct number of grid classes given
+// any value of `$grid-columns`.
+
+// [converter] This is defined recursively in LESS, but Sass supports real loops
+@mixin make-grid-columns($i: 1, $list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}") {
+ @for $i from (1 + 1) through $grid-columns {
+ $list: "#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}";
+ }
+ #{$list} {
+ position: relative;
+ // Prevent columns from collapsing when empty
+ min-height: 1px;
+ // Inner gutter via padding
+ padding-left: ($grid-gutter-width / 2);
+ padding-right: ($grid-gutter-width / 2);
+ }
+}
+
+
+// [converter] This is defined recursively in LESS, but Sass supports real loops
+@mixin float-grid-columns($class, $i: 1, $list: ".col-#{$class}-#{$i}") {
+ @for $i from (1 + 1) through $grid-columns {
+ $list: "#{$list}, .col-#{$class}-#{$i}";
+ }
+ #{$list} {
+ float: left;
+ }
+}
+
+
+@mixin calc-grid-column($index, $class, $type) {
+ @if ($type == width) and ($index > 0) {
+ .col-#{$class}-#{$index} {
+ width: percentage(($index / $grid-columns));
+ }
+ }
+ @if ($type == push) and ($index > 0) {
+ .col-#{$class}-push-#{$index} {
+ left: percentage(($index / $grid-columns));
+ }
+ }
+ @if ($type == push) and ($index == 0) {
+ .col-#{$class}-push-0 {
+ left: auto;
+ }
+ }
+ @if ($type == pull) and ($index > 0) {
+ .col-#{$class}-pull-#{$index} {
+ right: percentage(($index / $grid-columns));
+ }
+ }
+ @if ($type == pull) and ($index == 0) {
+ .col-#{$class}-pull-0 {
+ right: auto;
+ }
+ }
+ @if ($type == offset) {
+ .col-#{$class}-offset-#{$index} {
+ margin-left: percentage(($index / $grid-columns));
+ }
+ }
+}
+
+// [converter] This is defined recursively in LESS, but Sass supports real loops
+@mixin loop-grid-columns($columns, $class, $type) {
+ @for $i from 0 through $columns {
+ @include calc-grid-column($i, $class, $type);
+ }
+}
+
+
+// Create grid for specific class
+@mixin make-grid($class) {
+ @include float-grid-columns($class);
+ @include loop-grid-columns($grid-columns, $class, width);
+ @include loop-grid-columns($grid-columns, $class, pull);
+ @include loop-grid-columns($grid-columns, $class, push);
+ @include loop-grid-columns($grid-columns, $class, offset);
+} \ No newline at end of file
diff --git a/scss/mixins/_grid.scss b/scss/mixins/_grid.scss
new file mode 100644
index 000000000..aceaeeb4c
--- /dev/null
+++ b/scss/mixins/_grid.scss
@@ -0,0 +1,41 @@
+/// Grid system
+//
+// Generate semantic grid columns with these mixins.
+
+@mixin make-container($gutter: $grid-gutter-width) {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: ($gutter / 2);
+ padding-right: ($gutter / 2);
+ @include clearfix();
+}
+
+@mixin make-row($gutter: $grid-gutter-width) {
+ margin-left: ($gutter / -2);
+ margin-right: ($gutter / -2);
+ @include clearfix();
+}
+
+@mixin make-col($gutter: $grid-gutter-width) {
+ position: relative;
+ float: left;
+ min-height: 1px;
+ padding-left: ($gutter / 2);
+ padding-right: ($gutter / 2);
+}
+
+@mixin make-col-span($columns) {
+ width: percentage(($columns / $grid-columns));
+}
+
+@mixin make-col-offset($columns) {
+ margin-left: percentage(($columns / $grid-columns));
+}
+
+@mixin make-col-push($columns) {
+ left: percentage(($columns / $grid-columns));
+}
+
+@mixin make-col-pull($columns) {
+ right: percentage(($columns / $grid-columns));
+}
diff --git a/scss/mixins/_hide-text.scss b/scss/mixins/_hide-text.scss
new file mode 100644
index 000000000..daed5fb7a
--- /dev/null
+++ b/scss/mixins/_hide-text.scss
@@ -0,0 +1,8 @@
+// CSS image replacement
+@mixin text-hide() {
+ font: "0/0" a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
diff --git a/scss/mixins/_image.scss b/scss/mixins/_image.scss
new file mode 100644
index 000000000..f25e0ab21
--- /dev/null
+++ b/scss/mixins/_image.scss
@@ -0,0 +1,35 @@
+// Image Mixins
+// - Responsive image
+// - Retina image
+
+
+// Responsive image
+//
+// Keep images from scaling beyond the width of their parents.
+
+@mixin img-responsive($display: block) {
+ display: $display;
+ max-width: 100%; // Part 1: Set a maximum relative to the parent
+ height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
+}
+
+
+// Retina image
+//
+// Short retina mixin for setting background-image and -size. Note that the
+// spelling of `min--moz-device-pixel-ratio` is intentional.
+
+@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
+ background-image: url("#{file-1x}");
+
+ @media
+ only screen and (-webkit-min-device-pixel-ratio: 2),
+ only screen and ( min--moz-device-pixel-ratio: 2),
+ only screen and ( -o-min-device-pixel-ratio: 2/1),
+ only screen and ( min-device-pixel-ratio: 2),
+ only screen and ( min-resolution: 192dpi),
+ only screen and ( min-resolution: 2dppx) {
+ background-image: url("#{file-2x}");
+ background-size: $width-1x $height-1x;
+ }
+}
diff --git a/scss/mixins/_label.scss b/scss/mixins/_label.scss
new file mode 100644
index 000000000..eda6dfd29
--- /dev/null
+++ b/scss/mixins/_label.scss
@@ -0,0 +1,12 @@
+// Labels
+
+@mixin label-variant($color) {
+ background-color: $color;
+
+ &[href] {
+ &:hover,
+ &:focus {
+ background-color: darken($color, 10%);
+ }
+ }
+}
diff --git a/scss/mixins/_list-group.scss b/scss/mixins/_list-group.scss
new file mode 100644
index 000000000..0683d340c
--- /dev/null
+++ b/scss/mixins/_list-group.scss
@@ -0,0 +1,30 @@
+// List Groups
+
+@mixin list-group-item-variant($state, $background, $color) {
+ .list-group-item-#{state} {
+ color: $color;
+ background-color: $background;
+ }
+
+ a.list-group-item-#{state} {
+ color: $color;
+
+ .list-group-item-heading {
+ color: inherit;
+ }
+
+ &:hover,
+ &:focus {
+ color: $color;
+ background-color: darken($background, 5%);
+ }
+
+ &.active,
+ &.active:hover,
+ &.active:focus {
+ color: #fff;
+ background-color: $color;
+ border-color: $color;
+ }
+ }
+}
diff --git a/scss/mixins/_media-queries.scss b/scss/mixins/_media-queries.scss
new file mode 100644
index 000000000..b4e16ed88
--- /dev/null
+++ b/scss/mixins/_media-queries.scss
@@ -0,0 +1,25 @@
+// Media query mixins
+
+@mixin media-xs() {
+ @media (max-width: $screen-xs-max) { @content }
+}
+
+@mixin media-sm() {
+ @media (min-width: $screen-sm-min) { @content }
+}
+
+@mixin media-sm-max() {
+ @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { @content }
+}
+
+@mixin media-md() {
+ @media (min-width: $screen-md-min) { @content }
+}
+
+@mixin media-md-max() {
+ @media (min-width: $screen-md-min) and (max-width: $screen-md-max) { @content }
+}
+
+@mixin media-lg() {
+ @media (min-width: $screen-lg-min) { @content }
+}
diff --git a/scss/mixins/_nav-divider.scss b/scss/mixins/_nav-divider.scss
new file mode 100644
index 000000000..2e6da02a4
--- /dev/null
+++ b/scss/mixins/_nav-divider.scss
@@ -0,0 +1,10 @@
+// Horizontal dividers
+//
+// Dividers (basically an hr) within dropdowns and nav lists
+
+@mixin nav-divider($color: #e5e5e5) {
+ height: 1px;
+ margin: (($line-height-computed / 2) - 1) 0;
+ overflow: hidden;
+ background-color: $color;
+}
diff --git a/scss/mixins/_navbar-align.scss b/scss/mixins/_navbar-align.scss
new file mode 100644
index 000000000..c454a4ffe
--- /dev/null
+++ b/scss/mixins/_navbar-align.scss
@@ -0,0 +1,9 @@
+// Navbar vertical align
+//
+// Vertically center elements in the navbar.
+// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
+
+// @mixin navbar-vertical-align($element-height) {
+// margin-top: (($navbar-height - $element-height) / 2);
+// margin-bottom: (($navbar-height - $element-height) / 2);
+// }
diff --git a/scss/mixins/_pagination.scss b/scss/mixins/_pagination.scss
new file mode 100644
index 000000000..43fff6863
--- /dev/null
+++ b/scss/mixins/_pagination.scss
@@ -0,0 +1,23 @@
+// Pagination
+
+@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) {
+ > li {
+ > a,
+ > span {
+ padding: $padding-vertical $padding-horizontal;
+ font-size: $font-size;
+ }
+ &:first-child {
+ > a,
+ > span {
+ @include border-left-radius($border-radius);
+ }
+ }
+ &:last-child {
+ > a,
+ > span {
+ @include border-right-radius($border-radius);
+ }
+ }
+ }
+}
diff --git a/scss/mixins/_progress.scss b/scss/mixins/_progress.scss
new file mode 100644
index 000000000..9c3212ae8
--- /dev/null
+++ b/scss/mixins/_progress.scss
@@ -0,0 +1,17 @@
+// Progress bars
+
+@mixin progress-variant($color) {
+ &[value]::-webkit-progress-value {
+ background-color: $color;
+ }
+
+ &[value]::-moz-progress-bar {
+ background-color: $color;
+ }
+
+ @media screen and ("min-width:0\0") {
+ .progress-bar {
+ background-color: $color;
+ }
+ }
+}
diff --git a/scss/mixins/_reset-filter.scss b/scss/mixins/_reset-filter.scss
new file mode 100644
index 000000000..a7c7f22c5
--- /dev/null
+++ b/scss/mixins/_reset-filter.scss
@@ -0,0 +1,8 @@
+// Reset filters for IE
+//
+// When you need to remove a gradient background, do not forget to use this to reset
+// the IE filter for IE9 and below.
+
+@mixin reset-filter() {
+ filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)";
+}
diff --git a/scss/mixins/_resize.scss b/scss/mixins/_resize.scss
new file mode 100644
index 000000000..83fa63791
--- /dev/null
+++ b/scss/mixins/_resize.scss
@@ -0,0 +1,6 @@
+// Resize anything
+
+@mixin resizable($direction) {
+ resize: $direction; // Options: horizontal, vertical, both
+ overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
+}
diff --git a/scss/mixins/_responsive-visibility.scss b/scss/mixins/_responsive-visibility.scss
new file mode 100644
index 000000000..9867db013
--- /dev/null
+++ b/scss/mixins/_responsive-visibility.scss
@@ -0,0 +1,21 @@
+// Responsive utilities
+
+//
+// More easily include all the states for responsive-utilities.less.
+// [converter] $parent hack
+@mixin responsive-visibility($parent) {
+ #{$parent} {
+ display: block !important;
+ }
+ table#{$parent} { display: table; }
+ tr#{$parent} { display: table-row !important; }
+ th#{$parent},
+ td#{$parent} { display: table-cell !important; }
+}
+
+// [converter] $parent hack
+@mixin responsive-invisibility($parent) {
+ #{$parent} {
+ display: none !important;
+ }
+}
diff --git a/scss/mixins/_size.scss b/scss/mixins/_size.scss
new file mode 100644
index 000000000..abbe2463c
--- /dev/null
+++ b/scss/mixins/_size.scss
@@ -0,0 +1,10 @@
+// Sizing shortcuts
+
+@mixin size($width, $height) {
+ width: $width;
+ height: $height;
+}
+
+@mixin square($size) {
+ @include size($size, $size);
+}
diff --git a/scss/mixins/_tab-focus.scss b/scss/mixins/_tab-focus.scss
new file mode 100644
index 000000000..7df0ae7ca
--- /dev/null
+++ b/scss/mixins/_tab-focus.scss
@@ -0,0 +1,9 @@
+// WebKit-style focus
+
+@mixin tab-focus() {
+ // Default
+ outline: thin dotted;
+ // WebKit
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
diff --git a/scss/mixins/_table-row.scss b/scss/mixins/_table-row.scss
new file mode 100644
index 000000000..136795081
--- /dev/null
+++ b/scss/mixins/_table-row.scss
@@ -0,0 +1,28 @@
+// Tables
+
+@mixin table-row-variant($state, $background) {
+ // Exact selectors below required to override `.table-striped` and prevent
+ // inheritance to nested tables.
+ .table > thead > tr,
+ .table > tbody > tr,
+ .table > tfoot > tr {
+ > td.#{$state},
+ > th.#{$state},
+ &.#{$state} > td,
+ &.#{$state} > th {
+ background-color: $background;
+ }
+ }
+
+ // Hover states for `.table-hover`
+ // Note: this is not available for cells or rows within `thead` or `tfoot`.
+ .table-hover > tbody > tr {
+ > td.#{$state}:hover,
+ > th.#{$state}:hover,
+ &.#{$state}:hover > td,
+ &:hover > .#{$state},
+ &.#{$state}:hover > th {
+ background-color: darken($background, 5%);
+ }
+ }
+}
diff --git a/scss/mixins/_text-emphasis.scss b/scss/mixins/_text-emphasis.scss
new file mode 100644
index 000000000..4424a38d4
--- /dev/null
+++ b/scss/mixins/_text-emphasis.scss
@@ -0,0 +1,10 @@
+// Typography
+
+@mixin text-emphasis-variant($parent, $color) {
+ #{$parent} {
+ color: $color;
+ }
+ a#{$parent}:hover {
+ color: darken($color, 10%);
+ }
+}
diff --git a/scss/mixins/_text-overflow.scss b/scss/mixins/_text-overflow.scss
new file mode 100644
index 000000000..3be7baa8b
--- /dev/null
+++ b/scss/mixins/_text-overflow.scss
@@ -0,0 +1,8 @@
+// Text overflow
+// Requires inline-block or block for proper styling
+
+@mixin text-overflow() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+} \ No newline at end of file