diff options
Diffstat (limited to 'app/assets/stylesheets')
43 files changed, 4860 insertions, 0 deletions
diff --git a/app/assets/stylesheets/README b/app/assets/stylesheets/README new file mode 100644 index 0000000..2865272 --- /dev/null +++ b/app/assets/stylesheets/README @@ -0,0 +1,23 @@ +The stylesheets we use are based on bootstrap, with some significant changes: + +(1) We do not use bootstrap layout. Instead, see superfluid.scss + +(2) We do use the fluid grid system of bootstrap, but not the fixed grid system. + + For example, this is valid: + + <div class="row-fluid"> + <div class="span12"> + Level 1 of column + <div class="row-fluid"> + <div class="span6">Level 2</div> + <div class="span6">Level 2</div> + </div> + </div> + </div> + + but <div class="row"> is not supported + + we keep the default of twelve columns. + +(3) see app/assets/stylesheets/bootstrap.scss for the custom ways we partially include bootstrap.
\ No newline at end of file diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss new file mode 100644 index 0000000..144bcf2 --- /dev/null +++ b/app/assets/stylesheets/application.scss @@ -0,0 +1,33 @@ +// +// VARIABLES +// + +$baseFontSize: 14px; +$baseFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif !default; +$baseLineHeight: 22px; + +// Default 940px grid +$gridColumns: 12 !default; +$gridColumnWidth: 60px !default; +$gridGutterWidth: 20px !default; +$gridRowWidth: ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1)); + +// Fluid grid +$fluidGridColumnWidth: 6.382978723% !default; +$fluidGridGutterWidth: 2.127659574% !default; + +// +// IMPORT LIBRARIES +// + +@import "bootstrap"; +@import "superfluid"; + +// +// IMPORT LOCAL SCSS +// + +@import "mixins"; +@import "typography"; +@import "leap"; + diff --git a/app/assets/stylesheets/bootstrap.scss b/app/assets/stylesheets/bootstrap.scss new file mode 100644 index 0000000..0ba3b62 --- /dev/null +++ b/app/assets/stylesheets/bootstrap.scss @@ -0,0 +1,58 @@ +// +// this is a modified bootstrap.scss that only includes some parts of bootstrap. +// see bootstrap/bootstrap.scss for the full deal. +// + +// Core variables and mixins +@import "bootstrap/variables"; // Modify this for custom colors, font-sizes, etc +@import "bootstrap/mixins"; + +// CSS Reset +@import "bootstrap/reset"; + +// Grid system and page structure +@import "bootstrap/scaffolding"; +@import "bootstrap/grid"; +@import "bootstrap/responsive"; +//@import "bootstrap/layouts"; + +// Base CSS +@import "bootstrap/type"; +@import "bootstrap/code"; +@import "bootstrap/forms"; +@import "bootstrap/tables"; + +// Components: common +@import "bootstrap/sprites"; +@import "bootstrap/dropdowns"; +//@import "bootstrap/wells"; +@import "bootstrap/component-animations"; +@import "bootstrap/close"; + +// Components: Buttons & Alerts +@import "bootstrap/buttons"; +@import "bootstrap/button-groups"; +@import "bootstrap/alerts"; // Note: alerts share common CSS with buttons and thus have styles in buttons.scss + +// Components: Nav +@import "bootstrap/navs"; +//@import "bootstrap/navbar"; +//@import "bootstrap/breadcrumbs"; +//@import "bootstrap/pagination"; +//@import "bootstrap/pager"; + +// Components: Popovers +@import "bootstrap/modals"; +@import "bootstrap/tooltip"; +@import "bootstrap/popovers"; + +// Components: Misc +@import "bootstrap/thumbnails"; +@import "bootstrap/labels"; +@import "bootstrap/progress-bars"; +@import "bootstrap/accordion"; +@import "bootstrap/carousel"; +@import "bootstrap/hero-unit"; + +// Utility classes +@import "bootstrap/utilities"; // Has to be last to override when necessary diff --git a/app/assets/stylesheets/bootstrap/README b/app/assets/stylesheets/bootstrap/README new file mode 100644 index 0000000..521c306 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/README @@ -0,0 +1,11 @@ +Eventually, we want to migrate more of the CSS over to using "Bootstrap" + + http://twitter.github.com/bootstrap + +In this directories is a copy of bootstrap converted to SCSS: + + https://github.com/jlong/sass-twitter-bootstrap + +To update the files in this directory, run this command (in this directory!) + + curl https://nodeload.github.com/jlong/sass-twitter-bootstrap/tarball/master | tar -vxz --transform 's/.*lib\///' --overwrite --wildcards '*/lib/*.scss'
\ No newline at end of file diff --git a/app/assets/stylesheets/bootstrap/_accordion.scss b/app/assets/stylesheets/bootstrap/_accordion.scss new file mode 100644 index 0000000..311fa85 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_accordion.scss @@ -0,0 +1,28 @@ +// ACCORDION +// --------- + + +// Parent container +.accordion { + margin-bottom: $baseLineHeight; +} + +// Group == heading + body +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + @include border-radius(4px); +} +.accordion-heading { + border-bottom: 0; +} +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +// Inner needs the styles because you can't animate properly with any styles on the element +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} diff --git a/app/assets/stylesheets/bootstrap/_alerts.scss b/app/assets/stylesheets/bootstrap/_alerts.scss new file mode 100644 index 0000000..4c4b9e7 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_alerts.scss @@ -0,0 +1,70 @@ +// ALERT STYLES +// ------------ + +// Base alert styles +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: $baseLineHeight; + text-shadow: 0 1px 0 rgba(255,255,255,.5); + background-color: $warningBackground; + border: 1px solid $warningBorder; + @include border-radius(4px); +} +.alert, +.alert-heading { + color: $warningText; +} + +// Adjust close link position +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 18px; +} + +// Alternate styles +// ---------------- + +.alert-success { + background-color: $successBackground; + border-color: $successBorder; +} +.alert-success, +.alert-success .alert-heading { + color: $successText; +} +.alert-danger, +.alert-error { + background-color: $errorBackground; + border-color: $errorBorder; +} +.alert-danger, +.alert-error, +.alert-danger .alert-heading, +.alert-error .alert-heading { + color: $errorText; +} +.alert-info { + background-color: $infoBackground; + border-color: $infoBorder; +} +.alert-info, +.alert-info .alert-heading { + color: $infoText; +} + + +// Block alerts +// ------------------------ +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} +.alert-block p + p { + margin-top: 5px; +} diff --git a/app/assets/stylesheets/bootstrap/_breadcrumbs.scss b/app/assets/stylesheets/bootstrap/_breadcrumbs.scss new file mode 100644 index 0000000..3d47d25 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_breadcrumbs.scss @@ -0,0 +1,22 @@ +// BREADCRUMBS +// ----------- + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 $baseLineHeight; + @include gradient-vertical($white, #f5f5f5); + border: 1px solid #ddd; + @include border-radius(3px); + @include box-shadow(inset 0 1px 0 $white); + li { + display: inline-block; + text-shadow: 0 1px 0 $white; + } + .divider { + padding: 0 5px; + color: $grayLight; + } + .active a { + color: $grayDark; + } +} diff --git a/app/assets/stylesheets/bootstrap/_button-groups.scss b/app/assets/stylesheets/bootstrap/_button-groups.scss new file mode 100644 index 0000000..7b573eb --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_button-groups.scss @@ -0,0 +1,147 @@ +// BUTTON GROUPS +// ------------- + + +// Make the div behave like a button +.btn-group { + position: relative; + @include clearfix(); // clears the floated buttons + @include ie7-restore-left-whitespace(); +} + +// Space out series of button groups +.btn-group + .btn-group { + margin-left: 5px; +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-top: $baseLineHeight / 2; + margin-bottom: $baseLineHeight / 2; + .btn-group { + display: inline-block; + @include ie7-inline-block(); + } +} + +// Float them, remove border radius, then re-add to first and last elements +.btn-group .btn { + position: relative; + float: left; + margin-left: -1px; + @include 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; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.btn-group .btn:last-child, +.btn-group .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +// Reset corners for large buttons +.btn-group .btn.large:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.btn-group .btn.large:last-child, +.btn-group .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} + +// On hover/focus/active, bring the proper btn to front +.btn-group .btn:hover, +.btn-group .btn:focus, +.btn-group .btn:active, +.btn-group .btn.active { + z-index: 2; +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; + $shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + @include box-shadow($shadow); + *padding-top: 5px; + *padding-bottom: 5px; +} + +.btn-group.open { + // IE7's z-index only goes to the nearest positioned ancestor, which would + // make the menu appear below buttons that appeared later on the page + *z-index: $zindexDropdown; + + // Reposition menu on open and round all corners + .dropdown-menu { + display: block; + margin-top: 1px; + @include border-radius(5px); + } + + .dropdown-toggle { + background-image: none; + $shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + @include box-shadow($shadow); + } +} + +// Reposition the caret +.btn .caret { + margin-top: 7px; + margin-left: 0; +} +.btn:hover .caret, +.open.btn-group .caret { + @include opacity(100); +} + + +// Account for other colors +.btn-primary, +.btn-danger, +.btn-info, +.btn-success, +.btn-inverse { + .caret { + border-top-color: $white; + @include opacity(75); + } +} + +// Small button dropdowns +.btn-small .caret { + margin-top: 4px; +} diff --git a/app/assets/stylesheets/bootstrap/_buttons.scss b/app/assets/stylesheets/bootstrap/_buttons.scss new file mode 100644 index 0000000..d0c4ee6 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_buttons.scss @@ -0,0 +1,183 @@ +// BUTTON STYLES +// ------------- + + +// Base styles +// -------------------------------------------------- + +// Core +.btn { + display: inline-block; + padding: 4px 10px 4px; + margin-bottom: 0; // For input.btn + font-size: $baseFontSize; + line-height: $baseLineHeight; + color: $grayDark; + text-align: center; + text-shadow: 0 1px 1px rgba(255,255,255,.75); + vertical-align: middle; + @include buttonBackground($white, darken($white, 10%)); + border: 1px solid #ccc; + border-bottom-color: #bbb; + @include border-radius(4px); + $shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + @include box-shadow($shadow); + cursor: pointer; + + // Give IE7 some love + @include reset-filter(); + @include ie7-restore-left-whitespace(); +} + +// Hover state +.btn:hover { + color: $grayDark; + text-decoration: none; + background-color: darken($white, 10%); + background-position: 0 -15px; + + // transition is only when going to hover, otherwise the background + // behind the gradient (there for IE<=9 fallback) gets mismatched + @include transition(background-position .1s linear); +} + +// Focus state for keyboard and accessibility +.btn:focus { + @include tab-focus(); +} + +// Active state +.btn.active, +.btn:active { + background-image: none; + $shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + @include box-shadow($shadow); + background-color: darken($white, 10%); + background-color: darken($white, 15%) #{"\9"}; + outline: 0; +} + +// Disabled state +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + background-color: darken($white, 10%); + @include opacity(65); + @include box-shadow(none); +} + + +// Button Sizes +// -------------------------------------------------- + +// Large +.btn-large { + padding: 9px 14px; + font-size: $baseFontSize + 2px; + line-height: normal; + @include border-radius(5px); +} +.btn-large [class^="icon-"] { + margin-top: 1px; +} + +// Small +.btn-small { + padding: 5px 9px; + font-size: $baseFontSize - 2px; + line-height: $baseLineHeight - 2px; +} +.btn-small [class^="icon-"] { + margin-top: -1px; +} + +// Mini +.btn-mini { + padding: 2px 6px; + font-size: $baseFontSize - 2px; + line-height: $baseLineHeight - 4px; +} + + +// Alternate buttons +// -------------------------------------------------- + +// Set text color +// ------------------------- +.btn-primary, +.btn-primary:hover, +.btn-warning, +.btn-warning:hover, +.btn-danger, +.btn-danger:hover, +.btn-success, +.btn-success:hover, +.btn-info, +.btn-info:hover, +.btn-inverse, +.btn-inverse:hover { + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + color: $white; +} +// Provide *some* extra contrast for those who can get it +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-dark.active { + color: rgba(255,255,255,.75); +} + +// Set the backgrounds +// ------------------------- +.btn-primary { + @include buttonBackground($primaryButtonBackground, adjust-hue($primaryButtonBackground, 20)); +} +// Warning appears are orange +.btn-warning { + @include buttonBackground(lighten($orange, 15%), $orange); +} +// Danger and error appear as red +.btn-danger { + @include buttonBackground(#ee5f5b, #bd362f); +} +// Success appears as green +.btn-success { + @include buttonBackground(#62c462, #51a351); +} +// Info appears as a neutral blue +.btn-info { + @include buttonBackground(#5bc0de, #2f96b4); +} +// Inverse appears as dark gray +.btn-inverse { + @include buttonBackground(#454545, #262626); +} + + +// Cross-browser Jank +// -------------------------------------------------- + +button.btn, +input[type="submit"].btn { + + // Firefox 3.6 only I believe + &::-moz-focus-inner { + padding: 0; + border: 0; + } + + // IE7 has some default padding on button controls + *padding-top: 2px; + *padding-bottom: 2px; + &.large { + *padding-top: 7px; + *padding-bottom: 7px; + } + &.small { + *padding-top: 3px; + *padding-bottom: 3px; + } +} diff --git a/app/assets/stylesheets/bootstrap/_carousel.scss b/app/assets/stylesheets/bootstrap/_carousel.scss new file mode 100644 index 0000000..ffba3d0 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_carousel.scss @@ -0,0 +1,121 @@ +// CAROUSEL +// -------- + +.carousel { + position: relative; + margin-bottom: $baseLineHeight; + line-height: 1; +} + +.carousel-inner { + overflow: hidden; + width: 100%; + position: relative; +} + +.carousel { + + .item { + display: none; + position: relative; + @include transition(.6s ease-in-out left); + } + + // Account for jankitude on images + .item > img { + display: block; + line-height: 1; + } + + .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: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: $white; + text-align: center; + background: $grayDarker; + border: 3px solid $white; + @include border-radius(23px); + @include opacity(50); + + // we can't have this transition here + // because webkit cancels the carousel + // animation if you trip this while + // in the middle of another animation + // ;_; + // .transition(opacity .2s linear); + + // Reposition the right one + &.right { + left: auto; + right: 15px; + } + + // Hover state + &:hover { + color: $white; + text-decoration: none; + @include opacity(90); + } +} + +// Caption for text below images +// ----------------------------- + +.carousel-caption { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 10px 15px 5px; + background: $grayDark; + background: rgba(0,0,0,.75); +} +.carousel-caption h4, +.carousel-caption p { + color: $white; +} diff --git a/app/assets/stylesheets/bootstrap/_close.scss b/app/assets/stylesheets/bootstrap/_close.scss new file mode 100644 index 0000000..5d31836 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_close.scss @@ -0,0 +1,18 @@ +// CLOSE ICONS +// ----------- + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: $baseLineHeight; + color: $black; + text-shadow: 0 1px 0 rgba(255,255,255,1); + @include opacity(20); + &:hover { + color: $black; + text-decoration: none; + @include opacity(40); + cursor: pointer; + } +} diff --git a/app/assets/stylesheets/bootstrap/_code.scss b/app/assets/stylesheets/bootstrap/_code.scss new file mode 100644 index 0000000..546a0b9 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_code.scss @@ -0,0 +1,57 @@ +// Code.scss +// Code typography styles for the <code> and <pre> elements +// -------------------------------------------------------- + +// Inline and block code styles +code, +pre { + padding: 0 3px 2px; + @include font-family-monospace; + font-size: $baseFontSize - 1; + color: $grayDark; + @include border-radius(3px); +} + +// Inline code +code { + padding: 3px 4px; + color: #d14; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +// Blocks of code +pre { + display: block; + padding: ($baseLineHeight - 1) / 2; + margin: 0 0 $baseLineHeight / 2; + font-size: 12px; + line-height: $baseLineHeight; + background-color: #f5f5f5; + border: 1px solid #ccc; // fallback for IE7-8 + border: 1px solid rgba(0,0,0,.15); + @include border-radius(4px); + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + word-wrap: break-word; + + // Make prettyprint styles more spaced out for readability + &.prettyprint { + margin-bottom: $baseLineHeight; + } + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + color: inherit; + background-color: transparent; + border: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} diff --git a/app/assets/stylesheets/bootstrap/_component-animations.scss b/app/assets/stylesheets/bootstrap/_component-animations.scss new file mode 100644 index 0000000..d985b6a --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_component-animations.scss @@ -0,0 +1,18 @@ +// COMPONENT ANIMATIONS +// -------------------- + +.fade { + @include transition(opacity .15s linear); + opacity: 0; + &.in { + opacity: 1; + } +} + +.collapse { + @include transition(height .35s ease); + position:relative; + overflow:hidden; + height: 0; + &.in { height: auto; } +} diff --git a/app/assets/stylesheets/bootstrap/_dropdowns.scss b/app/assets/stylesheets/bootstrap/_dropdowns.scss new file mode 100644 index 0000000..87b9efe --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_dropdowns.scss @@ -0,0 +1,130 @@ +// DROPDOWN MENUS +// -------------- + +// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns +.dropdown { + position: relative; +} +.dropdown-toggle { + // The caret makes the toggle a bit too tall in IE7 + *margin-bottom: -3px; +} +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + text-indent: -99999px; + // IE7 won't do the border trick if there's a text indent, but it doesn't + // do the content that text-indent is hiding, either, so we're ok. + *text-indent: 0; + vertical-align: top; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid $black; + @include opacity(30); + content: "\2193"; +} +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} +.dropdown:hover .caret, +.open.dropdown .caret { + @include opacity(100); +} +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: $zindexDropdown; + float: left; + display: none; // none by default, but block on "open" of the menu + min-width: 160px; + _width: 160px; + padding: 4px 0; + margin: 0; // override default ul + list-style: none; + background-color: $white; + border-color: #ccc; + border-color: rgba(0,0,0,.2); + border-style: solid; + border-width: 1px; + @include border-radius(0 0 5px 5px); + @include box-shadow(0 5px 10px rgba(0,0,0,.2)); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + *border-right-width: 2px; + *border-bottom-width: 2px; + + // Allow for dropdowns to go bottom up (aka, dropup-menu) + &.bottom-up { + top: auto; + bottom: 100%; + margin-bottom: 2px; + } + + // Dividers (basically an hr) within the dropdown + .divider { + height: 1px; + margin: 5px 1px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid $white; + + // IE7 needs a set width since we gave a height. Restricting just + // to IE7 to keep the 1px left/right space in other browsers. + // It is unclear where IE is getting the extra space that we need + // to negative-margin away, but so it goes. + *width: 100%; + *margin: -5px 0 5px; + } + + // Links within the dropdown menu + a { + display: block; + padding: 3px 15px; + clear: both; + font-weight: normal; + line-height: $baseLineHeight; + color: $gray; + white-space: nowrap; + } +} + +// Hover state +.dropdown-menu li > a:hover, +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { + color: $white; + text-decoration: none; + background-color: $linkColor; +} + +// Open state for the dropdown +.dropdown.open { + // IE7's z-index only goes to the nearest positioned ancestor, which would + // make the menu appear below buttons that appeared later on the page + *z-index: $zindexDropdown; + + .dropdown-toggle { + color: $white; + background: #ccc; + background: rgba(0,0,0,.3); + } + .dropdown-menu { + display: block; + } +} + +// Typeahead +.typeahead { + margin-top: 2px; // give it some space to breathe + @include border-radius(4px); +} diff --git a/app/assets/stylesheets/bootstrap/_forms.scss b/app/assets/stylesheets/bootstrap/_forms.scss new file mode 100644 index 0000000..b2033f7 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_forms.scss @@ -0,0 +1,522 @@ +// Forms.scss +// Base styles for various input types, form layouts, and states +// ------------------------------------------------------------- + + +// GENERAL STYLES +// -------------- + +// Make all forms have space below them +form { + margin: 0 0 $baseLineHeight; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +// Groups of fields with labels on top (legends) +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: $baseLineHeight * 1.5; + font-size: $baseFontSize * 1.5; + line-height: $baseLineHeight * 2; + color: $grayDark; + border: 0; + border-bottom: 1px solid #eee; + + // Small + small { + font-size: $baseLineHeight * .75; + color: $grayLight; + } +} + +// Set font for forms +label, +input, +button, +select, +textarea { + @include font-shorthand(); // Set size, weight, line-height here +} +input, +button, +select, +textarea { + @include font-family-sans-serif(); // And only set font-family here for those that need it (note the missing label element) +} + +// Identify controls by their labels +label { + display: block; + margin-bottom: 5px; + color: $grayDark; +} + +// Inputs, Textareas, Selects +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: $baseLineHeight; + padding: 4px; + margin-bottom: 9px; + font-size: $baseFontSize; + line-height: $baseLineHeight; + color: $gray; + border: 1px solid #ccc; + @include border-radius(3px); +} +.uneditable-textarea { + width: auto; + height: auto; +} + +// Inputs within a label +label input, +label textarea, +label select { + display: block; +} + +// Mini reset for unique input types +input[type="image"], +input[type="checkbox"], +input[type="radio"] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; /* IE7 */ + line-height: normal; + cursor: pointer; + @include border-radius(0); + border: 0 \9; /* IE9 and down */ +} +input[type="image"] { + border: 0; +} + +// Reset the file input to browser defaults +input[type="file"] { + width: auto; + padding: initial; + line-height: initial; + border: initial; + background-color: $white; + background-color: initial; + @include box-shadow(none); +} + +// Help out input buttons +input[type="button"], +input[type="reset"], +input[type="submit"] { + width: auto; + height: auto; +} + +// Set the height of select and file controls to match text inputs +select, +input[type="file"] { + height: 28px; /* In IE7, the height of the select element cannot be changed by height, only font-size */ + *margin-top: 4px; /* For IE7, add top margin to align select with labels */ + line-height: 28px; +} + +// Reset line-height for IE +input[type="file"] { + line-height: 18px \9; +} + +// Chrome on Linux and Mobile Safari need background-color +select { + width: 220px; // default input width + 10px of padding that doesn't get applied + background-color: $white; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Remove shadow from image inputs +input[type="image"] { + @include box-shadow(none); +} + +// Make textarea height behave +textarea { + height: auto; +} + +// Hidden inputs +input[type="hidden"] { + display: none; +} + + + +// CHECKBOXES & RADIOS +// ------------------- + +// Indent the labels to position radios/checkboxes as hanging +.radio, +.checkbox { + padding-left: 18px; +} +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -18px; +} + +// Move the options list down to align with labels +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; // has to be padding because margin collaspes +} + +// Radios and checkboxes on same line +// TODO v3: Convert .inline to .control-inline +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; // space out consecutive inline controls +} + + + +// FOCUS STATE +// ----------- + +input, +textarea { + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + $transition: border linear .2s, box-shadow linear .2s; + @include transition($transition); +} +input:focus, +textarea:focus { + border-color: rgba(82,168,236,.8); + $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + @include box-shadow($shadow); + outline: 0; + outline: thin dotted \9; /* IE6-9 */ +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus, +select:focus { + @include box-shadow(none); // override for file inputs + @include tab-focus(); +} + + + +// INPUT SIZES +// ----------- + +// General classes for quick sizes +.input-mini { width: 60px; } +.input-small { width: 90px; } +.input-medium { width: 150px; } +.input-large { width: 210px; } +.input-xlarge { width: 270px; } +.input-xxlarge { width: 530px; } + +// Grid style input sizes +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input { + float: none; + margin-left: 0; +} + + + +// GRID SIZING FOR INPUTS +// ---------------------- + +@include inputGridSystem-generate($gridColumns, $gridColumnWidth, $gridGutterWidth); + + + + +// DISABLED STATE +// -------------- + +// Disabled and read-only inputs +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; + cursor: not-allowed; +} + + + + +// FORM FIELD FEEDBACK STATES +// -------------------------- + +// Warning +.control-group.warning { + @include formFieldState($warningText, $warningText, $warningBackground); +} +// Error +.control-group.error { + @include formFieldState($errorText, $errorText, $errorBackground); +} +// Success +.control-group.success { + @include formFieldState($successText, $successText, $successBackground); +} + +// HTML5 invalid states +// Shares styles with the .control-group.error above +input:focus:required:invalid, +textarea:focus:required:invalid, +select:focus:required:invalid { + color: #b94a48; + border-color: #ee5f5b; + &:focus { + border-color: darken(#ee5f5b, 10%); + @include box-shadow(0 0 6px lighten(#ee5f5b, 20%)); + } +} + + + +// FORM ACTIONS +// ------------ + +.form-actions { + padding: ($baseLineHeight - 1) 20px $baseLineHeight; + margin-top: $baseLineHeight; + margin-bottom: $baseLineHeight; + background-color: #f5f5f5; + border-top: 1px solid #ddd; +} + +// For text that needs to appear as an input but should not be an input +.uneditable-input { + display: block; + background-color: $white; + border-color: #eee; + @include box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); + cursor: not-allowed; +} + +// Placeholder text gets special styles; can't be bundled together though for some reason +@include placeholder($grayLight); + + + +// HELP TEXT +// --------- + +.help-block { + display: block; // account for any element using help-block + margin-top: 5px; + margin-bottom: 0; + color: $grayLight; +} + +.help-inline { + display: inline-block; + @include ie7-inline-block(); + margin-bottom: 9px; + vertical-align: middle; + padding-left: 5px; +} + + + +// INPUT GROUPS +// ------------ + +// Allow us to put symbols and text within the input field for a cleaner look +.input-prepend, +.input-append { + margin-bottom: 5px; + @include clearfix(); // Clear the float to prevent wrapping + input, + .uneditable-input { + @include border-radius(0 3px 3px 0); + &:focus { + position: relative; + z-index: 2; + } + } + .uneditable-input { + border-left-color: #ccc; + } + .add-on { + float: left; + display: block; + width: auto; + min-width: 16px; + height: $baseLineHeight; + margin-right: -1px; + padding: 4px 5px; + font-weight: normal; + line-height: $baseLineHeight; + color: $grayLight; + text-align: center; + text-shadow: 0 1px 0 $white; + background-color: #f5f5f5; + border: 1px solid #ccc; + @include border-radius(3px 0 0 3px); + } + .active { + background-color: lighten($green, 30); + border-color: $green; + } +} +.input-prepend { + .add-on { + *margin-top: 1px; /* IE6-7 */ + } +} +.input-append { + input, + .uneditable-input { + float: left; + @include border-radius(3px 0 0 3px); + } + .uneditable-input { + border-left-color: #eee; + border-right-color: #ccc; + } + .add-on { + margin-right: 0; + margin-left: -1px; + @include border-radius(0 3px 3px 0); + } + input:first-child { + // In IE7, having a hasLayout container (from clearfix's zoom:1) can make the first input + // inherit the sum of its ancestors' margins. + *margin-left: -160px; + + &+.add-on { + *margin-left: -21px; + } + } +} + + + +// SEARCH FORM +// ----------- + +.search-query { + padding-left: 14px; + padding-right: 14px; + margin-bottom: 0; // remove the default margin on all inputs + @include border-radius(14px); +} + + + +// HORIZONTAL & VERTICAL FORMS +// --------------------------- + +// Common properties +// ----------------- + +.form-search, +.form-inline, +.form-horizontal { + input, + textarea, + select, + .help-inline, + .uneditable-input { + display: inline-block; + margin-bottom: 0; + } + // Re-hide hidden elements due to specifity + .hide { + display: none; + } +} +.form-search label, +.form-inline label, +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + display: inline-block; +} +// Make the prepend and append add-on vertical-align: middle; +.form-search .input-append .add-on, +.form-inline .input-prepend .add-on, +.form-search .input-append .add-on, +.form-inline .input-prepend .add-on { + vertical-align: middle; +} +// Inline checkbox/radio labels +.form-search .radio, +.form-inline .radio, +.form-search .checkbox, +.form-inline .checkbox { + margin-bottom: 0; + vertical-align: middle; +} + +// Margin to space out fieldsets +.control-group { + margin-bottom: $baseLineHeight / 2; +} + +// Legend collapses margin, so next element is responsible for spacing +legend + .control-group { + margin-top: $baseLineHeight; + -webkit-margin-top-collapse: separate; +} + +// Horizontal-specific styles +// -------------------------- + +.form-horizontal { + // Increase spacing between groups + .control-group { + margin-bottom: $baseLineHeight; + @include clearfix(); + } + // Float the labels left + .control-label { + float: left; + width: 140px; + padding-top: 5px; + text-align: right; + } + // Move over all input controls and content + .controls { + margin-left: 160px; + } + // Move over buttons in .form-actions to align with .controls + .form-actions { + padding-left: 160px; + } +} diff --git a/app/assets/stylesheets/bootstrap/_grid.scss b/app/assets/stylesheets/bootstrap/_grid.scss new file mode 100644 index 0000000..11cc819 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_grid.scss @@ -0,0 +1,8 @@ +// GRID SYSTEM +// ----------- + +// Fixed (940px) +//@include gridSystem-generate($gridColumns, $gridColumnWidth, $gridGutterWidth); + +// Fluid (940px) +@include fluidGridSystem-generate($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth); diff --git a/app/assets/stylesheets/bootstrap/_hero-unit.scss b/app/assets/stylesheets/bootstrap/_hero-unit.scss new file mode 100644 index 0000000..ef219b2 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_hero-unit.scss @@ -0,0 +1,20 @@ +// HERO UNIT +// --------- + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + background-color: #f5f5f5; + @include border-radius(6px); + h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + } + p { + font-size: 18px; + font-weight: 200; + line-height: $baseLineHeight * 1.5; + } +} diff --git a/app/assets/stylesheets/bootstrap/_labels.scss b/app/assets/stylesheets/bootstrap/_labels.scss new file mode 100644 index 0000000..6a2ed80 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_labels.scss @@ -0,0 +1,32 @@ +// LABELS +// ------ + +// Base +.label { + padding: 2px 4px 3px; + font-size: $baseFontSize * .85; + font-weight: bold; + color: $white; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + background-color: $grayLight; + @include border-radius(3px); +} + +// Hover state +.label:hover { + color: $white; + text-decoration: none; +} + +// Colors +.label-important { background-color: $errorText; } +.label-important:hover { background-color: darken($errorText, 10%); } + +.label-warning { background-color: $orange; } +.label-warning:hover { background-color: darken($orange, 10%); } + +.label-success { background-color: $successText; } +.label-success:hover { background-color: darken($successText, 10%); } + +.label-info { background-color: $infoText; } +.label-info:hover { background-color: darken($infoText, 10%); } diff --git a/app/assets/stylesheets/bootstrap/_layouts.scss b/app/assets/stylesheets/bootstrap/_layouts.scss new file mode 100644 index 0000000..b9bae1d --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_layouts.scss @@ -0,0 +1,17 @@ +// +// Layouts +// Fixed-width and fluid (with sidebar) layouts +// -------------------------------------------- + + +// Container (centered, fixed-width layouts) +.container { + @include container-fixed(); +} + +// Fluid layouts (left aligned, with sidebar, min- & max-width content) +.container-fluid { + padding-left: $gridGutterWidth; + padding-right: $gridGutterWidth; + @include clearfix(); +} diff --git a/app/assets/stylesheets/bootstrap/_mixins.scss b/app/assets/stylesheets/bootstrap/_mixins.scss new file mode 100644 index 0000000..e437ce3 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_mixins.scss @@ -0,0 +1,578 @@ +// Mixins.scss +// Snippets of reusable CSS to develop faster and keep code readable +// ----------------------------------------------------------------- + + +// UTILITY MIXINS +// -------------------------------------------------- + +// Clearfix +// -------- +// For clearing floats like a boss h5bp.com/q +@mixin clearfix() { + *zoom: 1; + &:before, + &:after { + display: table; + content: ""; + } + &:after { + clear: both; + } +} + +// Webkit-style focus +// ------------------ +@mixin tab-focus() { + // Default + outline: thin dotted #333; + // Webkit + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +// Center-align a block level element +// ---------------------------------- +@mixin center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} + +// IE7 inline-block +// ---------------- +@mixin ie7-inline-block() { + *display: inline; /* IE7 inline-block hack */ + *zoom: 1; +} + +// IE7 likes to collapse whitespace on either side of the inline-block elements. +// Ems because we're attempting to match the width of a space character. Left +// version is for form buttons, which typically come after other elements, and +// right version is for icons, which come before. Applying both is ok, but it will +// mean that space between those elements will be .6em (~2 space characters) in IE7, +// instead of the 1 space in other browsers. +@mixin ie7-restore-left-whitespace() { + *margin-left: .3em; + + &:first-child { + *margin-left: 0; + } +} + +@mixin ie7-restore-right-whitespace() { + *margin-right: .3em; + + &:last-child { + *margin-left: 0; + } +} + +// Sizing shortcuts +// ------------------------- +@mixin size($height: 5px, $width: 5px) { + width: $width; + height: $height; +} +@mixin square($size: 5px) { + @include size($size, $size); +} + +// Placeholder text +// ------------------------- +@mixin placeholder($color: $placeholderText) { + :-moz-placeholder { + color: $color; + } + ::-webkit-input-placeholder { + color: $color; + } +} + +// Text overflow +// ------------------------- +// Requires inline-block or block for proper styling +@mixin text-overflow() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + + + +// FONTS +// -------------------------------------------------- + +// Font Stacks +@mixin font-family-serif { + font-family: Georgia, "Times New Roman", Times, serif; +} +@mixin font-family-sans-serif { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +@mixin font-family-monospace { + font-family: Menlo, Monaco, "Courier New", monospace; +} +@mixin font-shorthand($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { + font-size: $size; + font-weight: $weight; + line-height: $lineHeight; +} +@mixin font-serif($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { + @include font-family-serif; + @include font-shorthand($size, $weight, $lineHeight); +} +@mixin font-sans-serif($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { + @include font-family-sans-serif; + @include font-shorthand($size, $weight, $lineHeight); +} +@mixin font-monospace($size: $baseFontSize, $weight: normal, $lineHeight: $baseLineHeight) { + @include font-family-monospace; + @include font-shorthand($size, $weight, $lineHeight); +} + + + +// GRID SYSTEM +// -------------------------------------------------- + +// Site container +// ------------------------- +@mixin container-fixed() { + width: $gridRowWidth; + margin-left: auto; + margin-right: auto; + @include clearfix(); +} + +// Le grid system +// ------------------------- +@mixin gridSystem-columns ($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $columns) { + width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1)); +} +@mixin gridSystem-offset($gridColumnWidth, $gridGutterWidth, $columns) { + margin-left: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1)) + ($gridGutterWidth * 2); +} +@mixin gridSystem-gridColumn($gridGutterWidth) { + float: left; + margin-left: $gridGutterWidth; +} + +// Take these values and mixins, and make 'em do their thang +@mixin gridSystem-generate($gridColumns, $gridColumnWidth, $gridGutterWidth) { + // Row surrounds the columns + .row { + margin-left: $gridGutterWidth * -1; + @include clearfix(); + } + // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks $dhg) + [class*="span"] { + @include gridSystem-gridColumn($gridGutterWidth); + } + // Default columns + .span1 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 1); } + .span2 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 2); } + .span3 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 3); } + .span4 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 4); } + .span5 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 5); } + .span6 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 6); } + .span7 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 7); } + .span8 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 8); } + .span9 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 9); } + .span10 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 10); } + .span11 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 11); } + .span12, + .container { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 12); } + // Offset column options + .offset1 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 1); } + .offset2 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 2); } + .offset3 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 3); } + .offset4 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 4); } + .offset5 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 5); } + .offset6 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 6); } + .offset7 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 7); } + .offset8 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 8); } + .offset9 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 9); } + .offset10 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 10); } + .offset11 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 11); } +} + +// Fluid grid system +// ------------------------- +@mixin fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, $columns) { + width: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1)); +} +@mixin fluidGridSystem-gridColumn($fluidGridGutterWidth) { + float: left; + margin-left: $fluidGridGutterWidth; +} +// Take these values and mixins, and make 'em do their thang +@mixin fluidGridSystem-generate($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth) { + // Row surrounds the columns + .row-fluid { + width: 100%; + @include clearfix(); + + // Find all .span# classes within .row and give them the necessary properties for grid columns (supported by all browsers back to IE7, thanks $dhg) + > [class*="span"] { + @include fluidGridSystem-gridColumn($fluidGridGutterWidth); + } + > [class*="span"]:first-child { + margin-left: 0; + } + // Default columns + > .span1 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 1); } + > .span2 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 2); } + > .span3 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 3); } + > .span4 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 4); } + > .span5 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 5); } + > .span6 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 6); } + > .span7 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 7); } + > .span8 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 8); } + > .span9 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 9); } + > .span10 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 10); } + > .span11 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 11); } + > .span12 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 12); } + } +} + + + +// Input grid system +// ------------------------- +@mixin inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $columns) { + width: (($gridColumnWidth) * $columns) + ($gridGutterWidth * ($columns - 1)) - 10; +} +@mixin inputGridSystem-generate($gridColumns, $gridColumnWidth, $gridGutterWidth) { + input, + textarea, + .uneditable-input { + &.span1 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 1); } + &.span2 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 2); } + &.span3 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 3); } + &.span4 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 4); } + &.span5 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 5); } + &.span6 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 6); } + &.span7 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 7); } + &.span8 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 8); } + &.span9 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 9); } + &.span10 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 10); } + &.span11 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 11); } + &.span12 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 12); } + } +} + +// Make a Grid +// ------------------------- +// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior +@mixin makeRow() { + margin-left: $gridGutterWidth * -1; + @include clearfix(); +} +@mixin makeColumn($columns: 1) { + float: left; + margin-left: $gridGutterWidth; + width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1)); +} + + + +// Form field states (used in forms.scss) +// -------------------------------------------------- + +// Mixin for form field states +@mixin formFieldState($textColor: #555, $borderColor: #ccc, $backgroundColor: #f5f5f5) { + // Set the text color + > label, + .help-block, + .help-inline { + color: $textColor; + } + // Style inputs accordingly + input, + select, + textarea { + color: $textColor; + border-color: $borderColor; + &:focus { + border-color: darken($borderColor, 10%); + @include box-shadow(0 0 6px lighten($borderColor, 20%)); + } + } + // Give a small background color for input-prepend/-append + .input-prepend .add-on, + .input-append .add-on { + color: $textColor; + background-color: $backgroundColor; + border-color: $textColor; + } +} + + + +// CSS3 PROPERTIES +// -------------------------------------------------- + +// Border Radius +@mixin border-radius($radius: 5px) { + -webkit-border-radius: $radius; + -moz-border-radius: $radius; + border-radius: $radius; +} + +// Drop shadows +@mixin box-shadow($shadow: 0 1px 3px rgba(0,0,0,.25)) { + -webkit-box-shadow: $shadow; + -moz-box-shadow: $shadow; + box-shadow: $shadow; +} + +// Transitions +@mixin transition($transition) { + -webkit-transition: $transition; + -moz-transition: $transition; + -ms-transition: $transition; + -o-transition: $transition; + transition: $transition; +} + +// Transformations +@mixin rotate($degrees) { + -webkit-transform: rotate($degrees); + -moz-transform: rotate($degrees); + -ms-transform: rotate($degrees); + -o-transform: rotate($degrees); + transform: rotate($degrees); +} +@mixin scale($ratio) { + -webkit-transform: scale($ratio); + -moz-transform: scale($ratio); + -ms-transform: scale($ratio); + -o-transform: scale($ratio); + transform: scale($ratio); +} +@mixin translate($x: 0, $y: 0) { + -webkit-transform: translate($x, $y); + -moz-transform: translate($x, $y); + -ms-transform: translate($x, $y); + -o-transform: translate($x, $y); + transform: translate($x, $y); +} +@mixin skew($x: 0, $y: 0) { + -webkit-transform: skew($x, $y); + -moz-transform: skew($x, $y); + -ms-transform: skew($x, $y); + -o-transform: skew($x, $y); + transform: skew($x, $y); +} +@mixin translate3d($x: 0, $y: 0, $z: 0) { + -webkit-transform: translate($x, $y, $z); + -moz-transform: translate($x, $y, $z); + -ms-transform: translate($x, $y, $z); + -o-transform: translate($x, $y, $z); + transform: translate($x, $y, $z); +} + +// Background clipping +// Heads up: FF 3.6 and under need "padding" instead of "padding-box" +@mixin background-clip($clip) { + -webkit-background-clip: $clip; + -moz-background-clip: $clip; + background-clip: $clip; +} + +// Background sizing +@mixin background-size($size){ + -webkit-background-size: $size; + -moz-background-size: $size; + -o-background-size: $size; + background-size: $size; +} + + +// Box sizing +@mixin box-sizing($boxmodel) { + -webkit-box-sizing: $boxmodel; + -moz-box-sizing: $boxmodel; + box-sizing: $boxmodel; +} + +// User select +// For selecting text on the page +@mixin user-select($select) { + -webkit-user-select: $select; + -moz-user-select: $select; + -o-user-select: $select; + user-select: $select; +} + +// Resize anything +@mixin resizable($direction: both) { + resize: $direction; // Options: horizontal, vertical, both + overflow: auto; // Safari fix +} + +// CSS3 Content Columns +@mixin content-columns($columnCount, $columnGap: $gridColumnGutter) { + -webkit-column-count: $columnCount; + -moz-column-count: $columnCount; + column-count: $columnCount; + -webkit-column-gap: $columnGap; + -moz-column-gap: $columnGap; + column-gap: $columnGap; +} + +// Opacity +@mixin opacity($opacity: 100) { + opacity: $opacity / 100; + filter: alpha(opacity=$opacity); +} + + + +// BACKGROUNDS +// -------------------------------------------------- + +// Add an alphatransparency value to any background or border color (via Elyse Holladay) +@mixin translucent-background($color: $white, $alpha: 1) { + background-color: hsla(hue($color), saturation($color), lightness($color), $alpha); +} +@mixin translucent-border($color: $white, $alpha: 1) { + border-color: hsla(hue($color), saturation($color), lightness($color), $alpha); + @include background-clip(padding-box); +} + + + +// Gradients +@mixin gradient-horizontal($startColor: #555, $endColor: #333) { + background-color: $endColor; + background-image: -moz-linear-gradient(left, $startColor, $endColor); // FF 3.6+ + background-image: -ms-linear-gradient(left, $startColor, $endColor); // IE10 + background-image: -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(left, $startColor, $endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(left, $startColor, $endColor); // Opera 11.10 + background-image: linear-gradient(left, $startColor, $endColor); // Le standard + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=1), $startColor, $endColor; // IE9 and down +} +@mixin gradient-vertical($startColor: #555, $endColor: #333) { + background-color: mix($startColor, $endColor, 60%); + background-image: -moz-linear-gradient(top, $startColor, $endColor); // FF 3.6+ + background-image: -ms-linear-gradient(top, $startColor, $endColor); // IE10 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), to($endColor)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, $startColor, $endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(top, $startColor, $endColor); // Opera 11.10 + background-image: linear-gradient(top, $startColor, $endColor); // The standard + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0),$startColor,$endColor; // IE9 and down +} +@mixin gradient-directional($startColor: #555, $endColor: #333, $deg: 45deg) { + background-color: $endColor; + background-repeat: repeat-x; + background-image: -moz-linear-gradient($deg, $startColor, $endColor); // FF 3.6+ + background-image: -ms-linear-gradient($deg, $startColor, $endColor); // IE10 + background-image: -webkit-linear-gradient($deg, $startColor, $endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient($deg, $startColor, $endColor); // Opera 11.10 + background-image: linear-gradient($deg, $startColor, $endColor); // The standard +} +@mixin gradient-vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) { + background-color: mix($midColor, $endColor, 80%); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), color-stop($colorStop, $midColor), to($endColor)); + background-image: -webkit-linear-gradient($startColor, $midColor $colorStop, $endColor); + background-image: -moz-linear-gradient(top, $startColor, $midColor $colorStop, $endColor); + background-image: -ms-linear-gradient($startColor, $midColor $colorStop, $endColor); + background-image: -o-linear-gradient($startColor, $midColor $colorStop, $endColor); + background-image: linear-gradient($startColor, $midColor $colorStop, $endColor); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0), $startColor, $endColor; // IE9 and down, gets no color-stop at all the proper fallback +} +@mixin gradient-radial($innerColor: #555, $outerColor: #333) { + background-color: $outerColor; + background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($innerColor), to($outerColor)); + background-image: -webkit-radial-gradient(circle, $innerColor, $outerColor); + background-image: -moz-radial-gradient(circle, $innerColor, $outerColor); + background-image: -ms-radial-gradient(circle, $innerColor, $outerColor); + background-repeat: no-repeat; + // Opera cannot do radial gradients yet +} +@mixin gradient-striped($color,$angle: -45deg) { + background-color: $color; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + //background-image: linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + } + +// Gradient Bar Colors for buttons and alerts +@mixin gradientBar($primaryColor, $secondaryColor) { + @include gradient-vertical($primaryColor, $secondaryColor); + border-color: $secondaryColor $secondaryColor darken($secondaryColor, 15%); + border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fade-in(rgba(0,0,0,.1), 0.15); +} + +// Reset filters for IE +@mixin reset-filter() { + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} + +// Mixin for generating button backgrounds +// --------------------------------------- +@mixin buttonBackground($startColor, $endColor) { + // gradientBar will set the background to a pleasing blend of these, to support IE<=9 + @include gradientBar($startColor, $endColor); + @include reset-filter(); + + // in these cases the gradient won't cover the background, so we override + &:hover, &:active, &.active, &.disabled, &[disabled] { + background-color: $endColor; + } + + // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves + &:active, + &.active { + background-color: darken($endColor, 10%) #{"\9"}; + } +} + + +// COMPONENT MIXINS +// -------------------------------------------------- + +// POPOVER ARROWS +// ------------------------- +// For tipsies and popovers +@mixin popoverArrow-top($arrowWidth: 5px) { + bottom: 0; + left: 50%; + margin-left: -$arrowWidth; + border-left: $arrowWidth solid transparent; + border-right: $arrowWidth solid transparent; + border-top: $arrowWidth solid $black; +} +@mixin popoverArrow-left($arrowWidth: 5px) { + top: 50%; + right: 0; + margin-top: -$arrowWidth; + border-top: $arrowWidth solid transparent; + border-bottom: $arrowWidth solid transparent; + border-left: $arrowWidth solid $black; +} +@mixin popoverArrow-bottom($arrowWidth: 5px) { + top: 0; + left: 50%; + margin-left: -$arrowWidth; + border-left: $arrowWidth solid transparent; + border-right: $arrowWidth solid transparent; + border-bottom: $arrowWidth solid $black; +} +@mixin popoverArrow-right($arrowWidth: 5px) { + top: 50%; + left: 0; + margin-top: -$arrowWidth; + border-top: $arrowWidth solid transparent; + border-bottom: $arrowWidth solid transparent; + border-right: $arrowWidth solid $black; +} diff --git a/app/assets/stylesheets/bootstrap/_modals.scss b/app/assets/stylesheets/bootstrap/_modals.scss new file mode 100644 index 0000000..1e3a176 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_modals.scss @@ -0,0 +1,84 @@ +// MODALS +// ------ + +// Recalculate z-index where appropriate +.modal-open { + .dropdown-menu { z-index: $zindexDropdown + $zindexModal; } + .dropdown.open { *z-index: $zindexDropdown + $zindexModal; } + .popover { z-index: $zindexPopover + $zindexModal; } + .tooltip { z-index: $zindexTooltip + $zindexModal; } +} + +// Background +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: $zindexModalBackdrop; + background-color: $black; + // Fade for backdrop + &.fade { opacity: 0; } +} + +.modal-backdrop, +.modal-backdrop.fade.in { + @include opacity(80); +} + +// Base modal +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: $zindexModal; + max-height: 500px; + overflow: auto; + width: 560px; + margin: -250px 0 0 -280px; + background-color: $white; + border: 1px solid #999; + border: 1px solid rgba(0,0,0,.3); + *border: 1px solid #999; /* IE6-7 */ + @include border-radius(6px); + @include box-shadow(0 3px 7px rgba(0,0,0,0.3)); + @include background-clip(padding-box); + &.fade { + @include transition(opacity .3s linear); + // @include transition(top .3s ease-out); + top: -25%; + } + &.fade.in { top: 50%; } +} +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; + // Close icon + .close { margin-top: 2px; } +} + +// Body (where all modal content resises) +.modal-body { + padding: 15px; +} +// Remove bottom margin if need be +.modal-body .modal-form { + margin-bottom: 0; +} + +// Footer (for actions) +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + @include border-radius(0 0 6px 6px); + @include box-shadow(inset 0 1px 0 $white); + @include clearfix(); + .btn { + float: right; + margin-left: 5px; + margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs + } +} diff --git a/app/assets/stylesheets/bootstrap/_navbar.scss b/app/assets/stylesheets/bootstrap/_navbar.scss new file mode 100644 index 0000000..a702092 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_navbar.scss @@ -0,0 +1,299 @@ +// NAVBAR (FIXED AND STATIC) +// ------------------------- + + +// COMMON STYLES +// ------------- + +.navbar { + overflow: visible; + margin-bottom: $baseLineHeight; +} + +// Gradient is applied to it's own element because overflow visible is not honored by IE when filter is present +.navbar-inner { + padding-left: 20px; + padding-right: 20px; + @include gradient-vertical($navbarBackgroundHighlight, $navbarBackground); + @include border-radius(4px); + $shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1); + @include box-shadow($shadow); +} + +// Navbar button for toggling navbar items in responsive layouts +.btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-left: 5px; + margin-right: 5px; + @include buttonBackground($navbarBackgroundHighlight, $navbarBackground); + $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); + @include box-shadow($shadow); +} +.btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + @include border-radius(1px); + @include box-shadow(0 1px 0 rgba(0,0,0,.25)); +} +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} +// Override the default collapsed state +.nav-collapse.collapse { + height: auto; +} + + +// Brand, links, text, and buttons +.navbar { + // Hover and active states + .brand:hover { + text-decoration: none; + } + // Website or project name + .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; // negative indent to left-align the text down the page + font-size: 20px; + font-weight: 200; + line-height: 1; + color: $white; + } + // Plain text in topbar + .navbar-text { + margin-bottom: 0; + line-height: 40px; + color: $navbarText; + a:hover { + color: $white; + background-color: transparent; + } + } + // Buttons in navbar + .btn, + .btn-group { + margin-top: 5px; // make buttons vertically centered in navbar + } + .btn-group .btn { + margin-top: 0; // then undo the margin here so we don't accidentally double it + } +} + +// Navbar forms +.navbar-form { + margin-bottom: 0; // remove default bottom margin + @include clearfix(); + input, + select { + display: inline-block; + margin-top: 5px; + margin-bottom: 0; + } + .radio, + .checkbox { + margin-top: 5px; + } + input[type="image"], + input[type="checkbox"], + input[type="radio"] { + margin-top: 3px; + } + .input-append, + .input-prepend { + margin-top: 6px; + white-space: nowrap; // preven two items from separating within a .navbar-form that has .pull-left + input { + margin-top: 0; // remove the margin on top since it's on the parent + } + } +} + +// Navbar search +.navbar-search { + position: relative; + float: left; + margin-top: 6px; + margin-bottom: 0; + .search-query { + padding: 4px 9px; + @include font-sans-serif(13px, normal, 1); + color: $white; + color: rgba(255,255,255,.75); + background: #666; + background: rgba(255,255,255,.3); + border: 1px solid #111; + $shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0px rgba(255,255,255,.15); + @include box-shadow($shadow); + @include transition(none); + + // Placeholder text gets special styles; can't be bundled together though for some reason + @include placeholder($grayLighter); + + // Hover states + &:hover { + color: $white; + background-color: $grayLight; + background-color: rgba(255,255,255,.5); + } + // Focus states (we use .focused since IE7-8 and down doesn't support :focus) + &:focus, + &.focused { + padding: 5px 10px; + color: $grayDark; + text-shadow: 0 1px 0 $white; + background-color: $white; + border: 0; + @include box-shadow(0 0 3px rgba(0,0,0,.15)); + outline: 0; + } + } +} + + +// FIXED NAVBAR +// ------------ + +.navbar-fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: $zindexFixedNavbar; +} +.navbar-fixed-top .navbar-inner { + padding-left: 0; + padding-right: 0; + @include border-radius(0); +} + + +// NAVIGATION +// ---------- + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} +.navbar .nav.pull-right { + float: right; // redeclare due to specificity +} +.navbar .nav > li { + display: block; + float: left; +} + +// Links +.navbar .nav > li > a { + float: none; + padding: 10px 10px 11px; + line-height: 19px; + color: $navbarLinkColor; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); +} +// Hover +.navbar .nav > li > a:hover { + background-color: $navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover from .active + color: $navbarLinkColorHover; + text-decoration: none; +} + +// Active nav items +.navbar .nav .active > a, +.navbar .nav .active > a:hover { + color: $navbarLinkColorHover; + text-decoration: none; + background-color: $navbarBackground; +} + +// Dividers (basically a vertical hr) +.navbar .divider-vertical { + height: $navbarHeight; + width: 1px; + margin: 0 9px; + overflow: hidden; + background-color: $navbarBackground; + border-right: 1px solid $navbarBackgroundHighlight; +} + +// Secondary (floated right) nav in topbar +.navbar .nav.pull-right { + margin-left: 10px; + margin-right: 0; +} + + + +// Dropdown menus +// -------------- + +// Menu position and menu carets +.navbar .dropdown-menu { + margin-top: 1px; + @include border-radius(4px); + &:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0,0,0,.2); + position: absolute; + top: -7px; + left: 9px; + } + &:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid $white; + position: absolute; + top: -6px; + left: 10px; + } +} + +// Dropdown toggle caret +.navbar .nav .dropdown-toggle .caret, +.navbar .nav .open.dropdown .caret { + border-top-color: $white; +} +.navbar .nav .active .caret { + @include opacity(100); +} + +// Remove background color from open dropdown +.navbar .nav .open > .dropdown-toggle, +.navbar .nav .active > .dropdown-toggle, +.navbar .nav .open.active > .dropdown-toggle { + background-color: transparent; +} + +// Dropdown link on hover +.navbar .nav .active > .dropdown-toggle:hover { + color: $white; +} + +// Right aligned menus need alt position +.navbar .nav.pull-right .dropdown-menu { + left: auto; + right: 0; + &:before { + left: auto; + right: 12px; + } + &:after { + left: auto; + right: 13px; + } +} diff --git a/app/assets/stylesheets/bootstrap/_navs.scss b/app/assets/stylesheets/bootstrap/_navs.scss new file mode 100644 index 0000000..0f59458 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_navs.scss @@ -0,0 +1,353 @@ +// NAVIGATIONS +// ----------- + + + +// BASE CLASS +// ---------- + +.nav { + margin-left: 0; + margin-bottom: $baseLineHeight; + list-style: none; +} + +// Make links block level +.nav > li > a { + display: block; +} +.nav > li > a:hover { + text-decoration: none; + background-color: $grayLighter; +} + +// Nav headers (for dropdowns and lists) +.nav .nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: $baseLineHeight; + color: $grayLight; + text-shadow: 0 1px 0 rgba(255,255,255,.5); + text-transform: uppercase; +} +// Space them out when they follow another list item (link) +.nav li + .nav-header { + margin-top: 9px; +} + + +// NAV LIST +// -------- + +.nav-list { + padding-left: 14px; + padding-right: 14px; + margin-bottom: 0; +} +.nav-list > li > a, +.nav-list .nav-header { + margin-left: -15px; + margin-right: -15px; + text-shadow: 0 1px 0 rgba(255,255,255,.5); +} +.nav-list > li > a { + padding: 3px 15px; +} +.nav-list .active > a, +.nav-list .active > a:hover { + color: $white; + text-shadow: 0 -1px 0 rgba(0,0,0,.2); + background-color: $linkColor; +} +.nav-list [class^="icon-"] { + margin-right: 2px; +} + + + +// TABS AND PILLS +// ------------- + +// Common styles +.nav-tabs, +.nav-pills { + @include clearfix(); +} +.nav-tabs > li, +.nav-pills > li { + float: left; +} +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; // keeps the overall height an even number +} + +// TABS +// ---- + +// Give the tabs something to sit on +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +// Make the list-items overlay the bottom border +.nav-tabs > li { + margin-bottom: -1px; +} + +// Actual tabs (as links) +.nav-tabs > li > a { + padding-top: 9px; + padding-bottom: 9px; + border: 1px solid transparent; + @include border-radius(4px 4px 0 0); + &:hover { + border-color: $grayLighter $grayLighter #ddd; + } +} +// Active state, and it's :hover to override normal :hover +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { + color: $gray; + background-color: $white; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} + +// PILLS +// ----- + +// Links rendered as pills +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + @include border-radius(5px); +} + +// Active state +.nav-pills .active > a, +.nav-pills .active > a:hover { + color: $white; + background-color: $linkColor; +} + + + +// STACKED NAV +// ----------- + +// Stacked tabs and pills +.nav-stacked > li { + float: none; +} +.nav-stacked > li > a { + margin-right: 0; // no need for the gap between nav items +} + +// Tabs +.nav-tabs.nav-stacked { + border-bottom: 0; +} +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + @include border-radius(0); +} +.nav-tabs.nav-stacked > li:first-child > a { + @include border-radius(4px 4px 0 0); +} +.nav-tabs.nav-stacked > li:last-child > a { + @include border-radius(0 0 4px 4px); +} +.nav-tabs.nav-stacked > li > a:hover { + border-color: #ddd; + z-index: 2; +} + +// Pills +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; // decrease margin to match sizing of stacked tabs +} + + + +// DROPDOWNS +// --------- + +// Position the menu +.nav-tabs .dropdown-menu, +.nav-pills .dropdown-menu { + margin-top: 1px; + border-width: 1px; +} +.nav-pills .dropdown-menu { + @include border-radius(4px); +} + +// Default dropdown links +// ------------------------- +// Make carets use linkColor to start +.nav-tabs .dropdown-toggle .caret, +.nav-pills .dropdown-toggle .caret { + border-top-color: $linkColor; + margin-top: 6px; +} +.nav-tabs .dropdown-toggle:hover .caret, +.nav-pills .dropdown-toggle:hover .caret { + border-top-color: $linkColorHover; +} + +// Active dropdown links +// ------------------------- +.nav-tabs .active .dropdown-toggle .caret, +.nav-pills .active .dropdown-toggle .caret { + border-top-color: $grayDark; +} + +// Active:hover dropdown links +// ------------------------- +.nav > .dropdown.active > a:hover { + color: $black; + cursor: pointer; +} + +// Open dropdowns +// ------------------------- +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > .open.active > a:hover { + color: $white; + background-color: $grayLight; + border-color: $grayLight; +} +.nav .open .caret, +.nav .open.active .caret, +.nav .open a:hover .caret { + border-top-color: $white; + @include opacity(100); +} + +// Dropdowns in stacked tabs +.tabs-stacked .open > a:hover { + border-color: $grayLight; +} + + + +// TABBABLE +// -------- + + +// COMMON STYLES +// ------------- + +// Clear any floats +.tabbable { + @include clearfix(); +} +.tab-content { + overflow: hidden; // prevent content from running below tabs +} + +// Remove border on bottom, left, right +.tabs-below .nav-tabs, +.tabs-right .nav-tabs, +.tabs-left .nav-tabs { + border-bottom: 0; +} + +// Show/hide tabbable areas +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} +.tab-content > .active, +.pill-content > .active { + display: block; +} + + +// BOTTOM +// ------ + +.tabs-below .nav-tabs { + border-top: 1px solid #ddd; +} +.tabs-below .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} +.tabs-below .nav-tabs > li > a { + @include border-radius(0 0 4px 4px); + &:hover { + border-bottom-color: transparent; + border-top-color: #ddd; + } +} +.tabs-below .nav-tabs .active > a, +.tabs-below .nav-tabs .active > a:hover { + border-color: transparent #ddd #ddd #ddd; +} + +// LEFT & RIGHT +// ------------ + +// Common styles +.tabs-left .nav-tabs > li, +.tabs-right .nav-tabs > li { + float: none; +} +.tabs-left .nav-tabs > li > a, +.tabs-right .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +// Tabs on the left +.tabs-left .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} +.tabs-left .nav-tabs > li > a { + margin-right: -1px; + @include border-radius(4px 0 0 4px); +} +.tabs-left .nav-tabs > li > a:hover { + border-color: $grayLighter #ddd $grayLighter $grayLighter; +} +.tabs-left .nav-tabs .active > a, +.tabs-left .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: $white; +} + +// Tabs on the right +.tabs-right .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} +.tabs-right .nav-tabs > li > a { + margin-left: -1px; + @include border-radius(0 4px 4px 0); +} +.tabs-right .nav-tabs > li > a:hover { + border-color: $grayLighter $grayLighter $grayLighter #ddd; +} +.tabs-right .nav-tabs .active > a, +.tabs-right .nav-tabs .active > a:hover { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: $white; +} diff --git a/app/assets/stylesheets/bootstrap/_pager.scss b/app/assets/stylesheets/bootstrap/_pager.scss new file mode 100644 index 0000000..12f4da2 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_pager.scss @@ -0,0 +1,30 @@ +// PAGER +// ----- + +.pager { + margin-left: 0; + margin-bottom: $baseLineHeight; + list-style: none; + text-align: center; + @include clearfix(); +} +.pager li { + display: inline; +} +.pager a { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + @include border-radius(15px); +} +.pager a:hover { + text-decoration: none; + background-color: #f5f5f5; +} +.pager .next a { + float: right; +} +.pager .previous a { + float: left; +} diff --git a/app/assets/stylesheets/bootstrap/_pagination.scss b/app/assets/stylesheets/bootstrap/_pagination.scss new file mode 100644 index 0000000..6957128 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_pagination.scss @@ -0,0 +1,55 @@ +// PAGINATION +// ---------- + +.pagination { + height: $baseLineHeight * 2; + margin: $baseLineHeight 0; + } +.pagination ul { + display: inline-block; + @include ie7-inline-block(); + margin-left: 0; + margin-bottom: 0; + @include border-radius(3px); + @include box-shadow(0 1px 2px rgba(0,0,0,.05)); +} +.pagination li { + display: inline; + } +.pagination a { + float: left; + padding: 0 14px; + line-height: ($baseLineHeight * 2) - 2; + text-decoration: none; + border: 1px solid #ddd; + border-left-width: 0; +} +.pagination a:hover, +.pagination .active a { + background-color: #f5f5f5; +} +.pagination .active a { + color: $grayLight; + cursor: default; +} +.pagination .disabled a, +.pagination .disabled a:hover { + color: $grayLight; + background-color: transparent; + cursor: default; +} +.pagination li:first-child a { + border-left-width: 1px; + @include border-radius(3px 0 0 3px); +} +.pagination li:last-child a { + @include border-radius(0 3px 3px 0); +} + +// Centered +.pagination-centered { + text-align: center; +} +.pagination-right { + text-align: right; +} diff --git a/app/assets/stylesheets/bootstrap/_popovers.scss b/app/assets/stylesheets/bootstrap/_popovers.scss new file mode 100644 index 0000000..a20f2d5 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_popovers.scss @@ -0,0 +1,49 @@ +// POPOVERS +// -------- + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: $zindexPopover; + display: none; + padding: 5px; + &.top { margin-top: -5px; } + &.right { margin-left: 5px; } + &.bottom { margin-top: 5px; } + &.left { margin-left: -5px; } + &.top .arrow { @include popoverArrow-top(); } + &.right .arrow { @include popoverArrow-right(); } + &.bottom .arrow { @include popoverArrow-bottom(); } + &.left .arrow { @include popoverArrow-left(); } + .arrow { + position: absolute; + width: 0; + height: 0; + } +} +.popover-inner { + padding: 3px; + width: 280px; + overflow: hidden; + background: $black; // has to be full background declaration for IE fallback + background: rgba(0,0,0,.8); + @include border-radius(6px); + @include box-shadow(0 3px 7px rgba(0,0,0,0.3)); +} +.popover-title { + padding: 9px 15px; + line-height: 1; + background-color: #f5f5f5; + border-bottom:1px solid #eee; + @include border-radius(3px 3px 0 0); +} +.popover-content { + padding: 14px; + background-color: $white; + @include border-radius(0 0 3px 3px); + @include background-clip(padding-box); + p, ul, ol { + margin-bottom: 0; + } +} diff --git a/app/assets/stylesheets/bootstrap/_progress-bars.scss b/app/assets/stylesheets/bootstrap/_progress-bars.scss new file mode 100644 index 0000000..91dbbef --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_progress-bars.scss @@ -0,0 +1,95 @@ +// PROGRESS BARS +// ------------- + + +// ANIMATIONS +// ---------- + +// Webkit +@-webkit-keyframes progress-bar-stripes { + from { background-position: 0 0; } + to { background-position: 40px 0; } +} + +// Firefox +@-moz-keyframes progress-bar-stripes { + from { background-position: 0 0; } + to { background-position: 40px 0; } +} + +// Spec +@keyframes progress-bar-stripes { + from { background-position: 0 0; } + to { background-position: 40px 0; } +} + + + +// THE BARS +// -------- + +// Outer container +.progress { + overflow: hidden; + height: 18px; + margin-bottom: 18px; + @include gradient-vertical(#f5f5f5, #f9f9f9); + @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); + @include border-radius(4px); +} + +// Bar of progress +.progress .bar { + width: 0%; + height: 18px; + color: $white; + font-size: 12px; + text-align: center; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + @include gradient-vertical(#149bdf, #0480be); + @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); + @include box-sizing(border-box); + @include transition(width .6s ease); +} + +// Striped bars +.progress-striped .bar { + @include gradient-striped(#62c462); + @include background-size(40px 40px); +} + +// Call animation for the active one +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + + + +// COLORS +// ------ + +// Danger (red) +.progress-danger .bar { + @include gradient-vertical(#ee5f5b, #c43c35); +} +.progress-danger.progress-striped .bar { + @include gradient-striped(#ee5f5b); +} + +// Success (green) +.progress-success .bar { + @include gradient-vertical(#62c462, #57a957); +} +.progress-success.progress-striped .bar { + @include gradient-striped(#62c462); +} + +// Info (teal) +.progress.info .bar { + @include gradient-vertical(#5bc0de, #339bb9); +} +.progress-info.progress-striped .bar { + @include gradient-striped(#5bc0de); +} diff --git a/app/assets/stylesheets/bootstrap/_reset.scss b/app/assets/stylesheets/bootstrap/_reset.scss new file mode 100644 index 0000000..26d3f36 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_reset.scss @@ -0,0 +1,126 @@ +// Reset.scss +// Adapted from Normalize.css http://github.com/necolas/normalize.css +// ------------------------------------------------------------------------ + +// Display in IE6-9 and FF3 +// ------------------------- + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +// Display block in IE6-9 and FF3 +// ------------------------- + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +// Prevents modern browsers from displaying 'audio' without controls +// ------------------------- + +audio:not([controls]) { + display: none; +} + +// Base settings +// ------------------------- + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +// Focus states +a:focus { + @include tab-focus(); +} +// Hover & Active +a:hover, +a:active { + outline: 0; +} + +// Prevents sub and sup affecting line-height in all browsers +// ------------------------- + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} + +// Img border in a's and image quality +// ------------------------- + +img { + max-width: 100%; + height: auto; + border: 0; + -ms-interpolation-mode: bicubic; +} + +// Forms +// ------------------------- + +// Font size in all browsers, margin changes, misc consistency +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +button, +input { + *overflow: visible; // Inner spacing ie IE6/7 + line-height: normal; // FF3/4 have !important on line-height in UA stylesheet +} +button::-moz-focus-inner, +input::-moz-focus-inner { // Inner padding and border oddities in FF3/4 + padding: 0; + border: 0; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; // Cursors on all buttons applied consistently + -webkit-appearance: button; // Style clickable inputs in iOS +} +input[type="search"] { // Appearance in Safari/Chrome + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5 +} +textarea { + overflow: auto; // Remove vertical scrollbar in IE6-9 + vertical-align: top; // Readability and alignment cross-browser +} diff --git a/app/assets/stylesheets/bootstrap/_scaffolding.scss b/app/assets/stylesheets/bootstrap/_scaffolding.scss new file mode 100644 index 0000000..3312d01 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_scaffolding.scss @@ -0,0 +1,33 @@ +// Scaffolding +// Basic and global styles for generating a grid system, structural layout, and page templates +// ------------------------------------------------------------------------------------------- + + +// STRUCTURAL LAYOUT +// ----------------- + +.clearfix { + @include clearfix(); +} + +body { + margin: 0; + font-family: $baseFontFamily; + font-size: $baseFontSize; + line-height: $baseLineHeight; + color: $textColor; + background-color: $white; +} + + +// LINKS +// ----- + +a { + color: $linkColor; + text-decoration: none; +} +a:hover { + color: $linkColorHover; + text-decoration: underline; +} diff --git a/app/assets/stylesheets/bootstrap/_sprites.scss b/app/assets/stylesheets/bootstrap/_sprites.scss new file mode 100644 index 0000000..493e9f7 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_sprites.scss @@ -0,0 +1,158 @@ +// SPRITES +// Glyphs and icons for buttons, nav, and more +// ------------------------------------------- + + +// ICONS +// ----- + +// All icons receive the styles of the <i> tag with a base class +// of .i and are then given a unique class to add width, height, +// and background-position. Your resulting HTML will look like +// <i class="icon-inbox"></i>. + +// For the white version of the icons, just add the .icon-white class: +// <i class="icon-inbox icon-white"></i> + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + line-height: 14px; + vertical-align: text-top; + background-image: url($iconSpritePath); + background-position: 14px 14px; + background-repeat: no-repeat; + + @include ie7-restore-right-whitespace(); +} +.icon-white { + background-image: url($iconWhiteSpritePath); +} + +.icon-glass { background-position: 0 0; } +.icon-music { background-position: -24px 0; } +.icon-search { background-position: -48px 0; } +.icon-envelope { background-position: -72px 0; } +.icon-heart { background-position: -96px 0; } +.icon-star { background-position: -120px 0; } +.icon-star-empty { background-position: -144px 0; } +.icon-user { background-position: -168px 0; } +.icon-film { background-position: -192px 0; } +.icon-th-large { background-position: -216px 0; } +.icon-th { background-position: -240px 0; } +.icon-th-list { background-position: -264px 0; } +.icon-ok { background-position: -288px 0; } +.icon-remove { background-position: -312px 0; } +.icon-zoom-in { background-position: -336px 0; } +.icon-zoom-out { background-position: -360px 0; } +.icon-off { background-position: -384px 0; } +.icon-signal { background-position: -408px 0; } +.icon-cog { background-position: -432px 0; } +.icon-trash { background-position: -456px 0; } + +.icon-home { background-position: 0 -24px; } +.icon-file { background-position: -24px -24px; } +.icon-time { background-position: -48px -24px; } +.icon-road { background-position: -72px -24px; } +.icon-download-alt { background-position: -96px -24px; } +.icon-download { background-position: -120px -24px; } +.icon-upload { background-position: -144px -24px; } +.icon-inbox { background-position: -168px -24px; } +.icon-play-circle { background-position: -192px -24px; } +.icon-repeat { background-position: -216px -24px; } +.icon-refresh { background-position: -240px -24px; } +.icon-list-alt { background-position: -264px -24px; } +.icon-lock { background-position: -287px -24px; } // 1px off +.icon-flag { background-position: -312px -24px; } +.icon-headphones { background-position: -336px -24px; } +.icon-volume-off { background-position: -360px -24px; } +.icon-volume-down { background-position: -384px -24px; } +.icon-volume-up { background-position: -408px -24px; } +.icon-qrcode { background-position: -432px -24px; } +.icon-barcode { background-position: -456px -24px; } + +.icon-tag { background-position: 0 -48px; } +.icon-tags { background-position: -25px -48px; } // 1px off +.icon-book { background-position: -48px -48px; } +.icon-bookmark { background-position: -72px -48px; } +.icon-print { background-position: -96px -48px; } +.icon-camera { background-position: -120px -48px; } +.icon-font { background-position: -144px -48px; } +.icon-bold { background-position: -167px -48px; } // 1px off +.icon-italic { background-position: -192px -48px; } +.icon-text-height { background-position: -216px -48px; } +.icon-text-width { background-position: -240px -48px; } +.icon-align-left { background-position: -264px -48px; } +.icon-align-center { background-position: -288px -48px; } +.icon-align-right { background-position: -312px -48px; } +.icon-align-justify { background-position: -336px -48px; } +.icon-list { background-position: -360px -48px; } +.icon-indent-left { background-position: -384px -48px; } +.icon-indent-right { background-position: -408px -48px; } +.icon-facetime-video { background-position: -432px -48px; } +.icon-picture { background-position: -456px -48px; } + +.icon-pencil { background-position: 0 -72px; } +.icon-map-marker { background-position: -24px -72px; } +.icon-adjust { background-position: -48px -72px; } +.icon-tint { background-position: -72px -72px; } +.icon-edit { background-position: -96px -72px; } +.icon-share { background-position: -120px -72px; } +.icon-check { background-position: -144px -72px; } +.icon-move { background-position: -168px -72px; } +.icon-step-backward { background-position: -192px -72px; } +.icon-fast-backward { background-position: -216px -72px; } +.icon-backward { background-position: -240px -72px; } +.icon-play { background-position: -264px -72px; } +.icon-pause { background-position: -288px -72px; } +.icon-stop { background-position: -312px -72px; } +.icon-forward { background-position: -336px -72px; } +.icon-fast-forward { background-position: -360px -72px; } +.icon-step-forward { background-position: -384px -72px; } +.icon-eject { background-position: -408px -72px; } +.icon-chevron-left { background-position: -432px -72px; } +.icon-chevron-right { background-position: -456px -72px; } + +.icon-plus-sign { background-position: 0 -96px; } +.icon-minus-sign { background-position: -24px -96px; } +.icon-remove-sign { background-position: -48px -96px; } +.icon-ok-sign { background-position: -72px -96px; } +.icon-question-sign { background-position: -96px -96px; } +.icon-info-sign { background-position: -120px -96px; } +.icon-screenshot { background-position: -144px -96px; } +.icon-remove-circle { background-position: -168px -96px; } +.icon-ok-circle { background-position: -192px -96px; } +.icon-ban-circle { background-position: -216px -96px; } +.icon-arrow-left { background-position: -240px -96px; } +.icon-arrow-right { background-position: -264px -96px; } +.icon-arrow-up { background-position: -289px -96px; } // 1px off +.icon-arrow-down { background-position: -312px -96px; } +.icon-share-alt { background-position: -336px -96px; } +.icon-resize-full { background-position: -360px -96px; } +.icon-resize-small { background-position: -384px -96px; } +.icon-plus { background-position: -408px -96px; } +.icon-minus { background-position: -433px -96px; } +.icon-asterisk { background-position: -456px -96px; } + +.icon-exclamation-sign { background-position: 0 -120px; } +.icon-gift { background-position: -24px -120px; } +.icon-leaf { background-position: -48px -120px; } +.icon-fire { background-position: -72px -120px; } +.icon-eye-open { background-position: -96px -120px; } +.icon-eye-close { background-position: -120px -120px; } +.icon-warning-sign { background-position: -144px -120px; } +.icon-plane { background-position: -168px -120px; } +.icon-calendar { background-position: -192px -120px; } +.icon-random { background-position: -216px -120px; } +.icon-comment { background-position: -240px -120px; } +.icon-magnet { background-position: -264px -120px; } +.icon-chevron-up { background-position: -288px -120px; } +.icon-chevron-down { background-position: -313px -119px; } // 1px off +.icon-retweet { background-position: -336px -120px; } +.icon-shopping-cart { background-position: -360px -120px; } +.icon-folder-close { background-position: -384px -120px; } +.icon-folder-open { background-position: -408px -120px; } +.icon-resize-vertical { background-position: -432px -119px; } +.icon-resize-horizontal { background-position: -456px -118px; } diff --git a/app/assets/stylesheets/bootstrap/_tables.scss b/app/assets/stylesheets/bootstrap/_tables.scss new file mode 100644 index 0000000..9dda11c --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_tables.scss @@ -0,0 +1,150 @@ +// +// Tables.scss +// Tables for, you guessed it, tabular data +// ---------------------------------------- + + +// BASE TABLES +// ----------------- + +table { + max-width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +// BASELINE STYLES +// --------------- + +.table { + width: 100%; + margin-bottom: $baseLineHeight; + // Cells + th, + td { + padding: 8px; + line-height: $baseLineHeight; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; + } + th { + font-weight: bold; + } + // Bottom align for column headings + thead th { + vertical-align: bottom; + } + // Remove top border from thead by default + thead:first-child tr th, + thead:first-child tr td { + border-top: 0; + } + // Account for multiple tbody instances + tbody + tbody { + border-top: 2px solid #ddd; + } +} + + + +// CONDENSED TABLE W/ HALF PADDING +// ------------------------------- + +.table-condensed { + th, + td { + padding: 4px 5px; + } +} + + +// BORDERED VERSION +// ---------------- + +.table-bordered { + border: 1px solid #ddd; + border-collapse: separate; // Done so we can round those corners! + *border-collapse: collapsed; // IE7 can't round corners anyway + @include border-radius(4px); + th + th, + td + td, + th + td, + td + th { + border-left: 1px solid #ddd; + } + // Prevent a double border + thead:first-child tr:first-child th, + tbody:first-child tr:first-child th, + tbody:first-child tr:first-child td { + border-top: 0; + } + // For first th or td in the first row in the first thead or tbody + thead:first-child tr:first-child th:first-child, + tbody:first-child tr:first-child td:first-child { + @include border-radius(4px 0 0 0); + } + thead:first-child tr:first-child th:last-child, + tbody:first-child tr:first-child td:last-child { + @include border-radius(0 4px 0 0); + } + // For first th or td in the first row in the first thead or tbody + thead:last-child tr:last-child th:first-child, + tbody:last-child tr:last-child td:first-child { + @include border-radius(0 0 0 4px); + } + thead:last-child tr:last-child th:last-child, + tbody:last-child tr:last-child td:last-child { + @include border-radius(0 0 4px 0); + } +} + + +// ZEBRA-STRIPING +// -------------- + +// Default zebra-stripe styles (alternating gray and transparent backgrounds) +.table-striped { + tbody { + tr:nth-child(odd) td, + tr:nth-child(odd) th { + background-color: #f9f9f9; + } + } +} + + +// HOVER EFFECT +// ------------ +// Placed here since it has to come after the potential zebra striping +.table { + tbody tr:hover td, + tbody tr:hover th { + background-color: #f5f5f5; + } +} + + +// TABLE CELL SIZING +// ----------------- + +// Change the columns +@mixin tableColumns($columnSpan: 1) { + float: none; + width: (($gridColumnWidth) * $columnSpan) + ($gridGutterWidth * ($columnSpan - 1)) - 16; + margin-left: 0; +} +table { + .span1 { @include tableColumns(1); } + .span2 { @include tableColumns(2); } + .span3 { @include tableColumns(3); } + .span4 { @include tableColumns(4); } + .span5 { @include tableColumns(5); } + .span6 { @include tableColumns(6); } + .span7 { @include tableColumns(7); } + .span8 { @include tableColumns(8); } + .span9 { @include tableColumns(9); } + .span10 { @include tableColumns(10); } + .span11 { @include tableColumns(11); } + .span12 { @include tableColumns(12); } +} diff --git a/app/assets/stylesheets/bootstrap/_thumbnails.scss b/app/assets/stylesheets/bootstrap/_thumbnails.scss new file mode 100644 index 0000000..a9795dc --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_thumbnails.scss @@ -0,0 +1,35 @@ +// THUMBNAILS +// ---------- + +.thumbnails { + margin-left: -$gridGutterWidth; + list-style: none; + @include clearfix(); +} +.thumbnails > li { + float: left; + margin: 0 0 $baseLineHeight $gridGutterWidth; +} +.thumbnail { + display: block; + padding: 4px; + line-height: 1; + border: 1px solid #ddd; + @include border-radius(4px); + @include box-shadow(0 1px 1px rgba(0,0,0,.075)); +} +// Add a hover state for linked versions only +a.thumbnail:hover { + border-color: $linkColor; + @include box-shadow(0 1px 4px rgba(0,105,214,.25)); +} +// Images and captions +.thumbnail > img { + display: block; + max-width: 100%; + margin-left: auto; + margin-right: auto; +} +.thumbnail .caption { + padding: 9px; +} diff --git a/app/assets/stylesheets/bootstrap/_tooltip.scss b/app/assets/stylesheets/bootstrap/_tooltip.scss new file mode 100644 index 0000000..89d77f9 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_tooltip.scss @@ -0,0 +1,35 @@ +// TOOLTIP +// ------- + +.tooltip { + position: absolute; + z-index: $zindexTooltip; + display: block; + visibility: visible; + padding: 5px; + font-size: 11px; + @include opacity(0); + &.in { @include opacity(80); } + &.top { margin-top: -2px; } + &.right { margin-left: 2px; } + &.bottom { margin-top: 2px; } + &.left { margin-left: -2px; } + &.top .tooltip-arrow { @include popoverArrow-top(); } + &.left .tooltip-arrow { @include popoverArrow-left(); } + &.bottom .tooltip-arrow { @include popoverArrow-bottom(); } + &.right .tooltip-arrow { @include popoverArrow-right(); } +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: $white; + text-align: center; + text-decoration: none; + background-color: $black; + @include border-radius(4px); +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; +} diff --git a/app/assets/stylesheets/bootstrap/_type.scss b/app/assets/stylesheets/bootstrap/_type.scss new file mode 100644 index 0000000..478c786 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_type.scss @@ -0,0 +1,218 @@ +// Typography.scss +// Headings, body text, lists, code, and more for a versatile and durable typography system +// ---------------------------------------------------------------------------------------- + + +// BODY TEXT +// --------- + +p { + margin: 0 0 $baseLineHeight / 2; + font-family: $baseFontFamily; + font-size: $baseFontSize; + line-height: $baseLineHeight; + small { + font-size: $baseFontSize - 2; + color: $grayLight; + } +} +.lead { + margin-bottom: $baseLineHeight; + font-size: 20px; + font-weight: 200; + line-height: $baseLineHeight * 1.5; +} + +// HEADINGS +// -------- + +h1, h2, h3, h4, h5, h6 { + margin: 0; + font-weight: bold; + color: $grayDark; + text-rendering: optimizelegibility; // Fix the character spacing for headings + small { + font-weight: normal; + color: $grayLight; + } +} +h1 { + font-size: 30px; + line-height: $baseLineHeight * 2; + small { + font-size: 18px; + } +} +h2 { + font-size: 24px; + line-height: $baseLineHeight * 2; + small { + font-size: 18px; + } +} +h3 { + line-height: $baseLineHeight * 1.5; + font-size: 18px; + small { + font-size: 14px; + } +} +h4, h5, h6 { + line-height: $baseLineHeight; +} +h4 { + font-size: 14px; + small { + font-size: 12px; + } +} +h5 { + font-size: 12px; +} +h6 { + font-size: 11px; + color: $grayLight; + text-transform: uppercase; +} + +// Page header +.page-header { + padding-bottom: $baseLineHeight - 1; + margin: $baseLineHeight 0; + border-bottom: 1px solid $grayLighter; +} +.page-header h1 { + line-height: 1; +} + + + +// LISTS +// ----- + +// Unordered and Ordered lists +ul, ol { + padding: 0; + margin: 0 0 $baseLineHeight / 2 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +ul { + list-style: disc; +} +ol { + list-style: decimal; +} +li { + line-height: $baseLineHeight; +} +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +// Description Lists +dl { + margin-bottom: $baseLineHeight; +} +dt, +dd { + line-height: $baseLineHeight; +} +dt { + font-weight: bold; +} +dd { + margin-left: $baseLineHeight / 2; +} + +// MISC +// ---- + +// Horizontal rules +hr { + margin: $baseLineHeight 0; + border: 0; + border-top: 1px solid $hrBorder; + border-bottom: 1px solid $white; +} + +// Emphasis +strong { + font-weight: bold; +} +em { + font-style: italic; +} +.muted { + color: $grayLight; +} + +// Abbreviations and acronyms +abbr { + font-size: 90%; + text-transform: uppercase; + border-bottom: 1px dotted #ddd; + cursor: help; +} + +// Blockquotes +blockquote { + padding: 0 0 0 15px; + margin: 0 0 $baseLineHeight; + border-left: 5px solid $grayLighter; + p { + margin-bottom: 0; + @include font-shorthand(16px,300,$baseLineHeight * 1.25); + } + small { + display: block; + line-height: $baseLineHeight; + color: $grayLight; + &:before { + content: '\2014 \00A0'; + } + } + + // Float right with text-align: right + &.pull-right { + float: right; + padding-left: 0; + padding-right: 15px; + border-left: 0; + border-right: 5px solid $grayLighter; + p, + small { + text-align: right; + } + } +} + +// Quotes +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +// Addresses +address { + display: block; + margin-bottom: $baseLineHeight; + line-height: $baseLineHeight; + font-style: normal; +} + +// Misc +small { + font-size: 100%; +} +cite { + font-style: normal; +} diff --git a/app/assets/stylesheets/bootstrap/_utilities.scss b/app/assets/stylesheets/bootstrap/_utilities.scss new file mode 100644 index 0000000..d60d220 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_utilities.scss @@ -0,0 +1,23 @@ +// UTILITY CLASSES +// --------------- + +// Quick floats +.pull-right { + float: right; +} +.pull-left { + float: left; +} + +// Toggling content +.hide { + display: none; +} +.show { + display: block; +} + +// Visibility +.invisible { + visibility: hidden; +} diff --git a/app/assets/stylesheets/bootstrap/_variables.scss b/app/assets/stylesheets/bootstrap/_variables.scss new file mode 100644 index 0000000..8fc17b0 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_variables.scss @@ -0,0 +1,107 @@ +// Variables.scss +// Variables to customize the look and feel of Bootstrap +// ----------------------------------------------------- + + + +// GLOBAL VALUES +// -------------------------------------------------- + +// Links +$linkColor: #08c !default; +$linkColorHover: darken($linkColor, 15) !default; + +// Grays +$black: #000 !default; +$grayDarker: #222 !default; +$grayDark: #333 !default; +$gray: #555 !default; +$grayLight: #999 !default; +$grayLighter: #eee !default; +$white: #fff !default; + +// Accent colors +$blue: #049cdb !default; +$blueDark: #0064cd !default; +$green: #46a546 !default; +$red: #9d261d !default; +$yellow: #ffc40d !default; +$orange: #f89406 !default; +$pink: #c3325f !default; +$purple: #7a43b6 !default; + +// Typography +$baseFontSize: 13px !default; +$baseFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif !default; +$baseLineHeight: 18px !default; +$textColor: $grayDark !default; + +// Buttons +$primaryButtonBackground: $linkColor !default; + + + +// COMPONENT VARIABLES +// -------------------------------------------------- + +// Z-index master list +// Used for a bird's eye view of components dependent on the z-axis +// Try to avoid customizing these :) +$zindexDropdown: 1000 !default; +$zindexPopover: 1010 !default; +$zindexTooltip: 1020 !default; +$zindexFixedNavbar: 1030 !default; +$zindexModalBackdrop: 1040 !default; +$zindexModal: 1050 !default; + +// Sprite icons path +$iconSpritePath: "../img/glyphicons-halflings.png"; +$iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; + +// Input placeholder text color +$placeholderText: $grayLight !default; + +// Hr border color +$hrBorder: $grayLighter !default; + +// Navbar +$navbarHeight: 40px !default; +$navbarBackground: $grayDarker !default; +$navbarBackgroundHighlight: $grayDark !default; +$navbarLinkBackgroundHover: transparent !default; + +$navbarText: $grayLight !default; +$navbarLinkColor: $grayLight !default; +$navbarLinkColorHover: $white !default; + +// Form states and alerts +$warningText: #c09853 !default; +$warningBackground: #fcf8e3 !default; +$warningBorder: darken(adjust-hue($warningBackground, -10), 3%) !default; + +$errorText: #b94a48 !default; +$errorBackground: #f2dede !default; +$errorBorder: darken(adjust-hue($errorBackground, -10), 3%) !default; + +$successText: #468847 !default; +$successBackground: #dff0d8 !default; +$successBorder: darken(adjust-hue($successBackground, -10), 5%) !default; + +$infoText: #3a87ad !default; +$infoBackground: #d9edf7 !default; +$infoBorder: darken(adjust-hue($infoBackground, -10), 7%) !default; + + + +// GRID +// -------------------------------------------------- + +// Default 940px grid +$gridColumns: 12 !default; +$gridColumnWidth: 60px !default; +$gridGutterWidth: 20px !default; +$gridRowWidth: ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1)); + +// Fluid grid +$fluidGridColumnWidth: 6.382978723% !default; +$fluidGridGutterWidth: 2.127659574% !default; diff --git a/app/assets/stylesheets/bootstrap/_wells.scss b/app/assets/stylesheets/bootstrap/_wells.scss new file mode 100644 index 0000000..7ad2d17 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/_wells.scss @@ -0,0 +1,17 @@ +// WELLS +// ----- + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #eee; + border: 1px solid rgba(0,0,0,.05); + @include border-radius(4px); + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); + blockquote { + border-color: #ddd; + border-color: rgba(0,0,0,.15); + } +} diff --git a/app/assets/stylesheets/bootstrap/bootstrap.scss b/app/assets/stylesheets/bootstrap/bootstrap.scss new file mode 100644 index 0000000..d65b194 --- /dev/null +++ b/app/assets/stylesheets/bootstrap/bootstrap.scss @@ -0,0 +1,66 @@ +/*! + * Bootstrap v2.0.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + * + * Converted to Sass by @johnwlong / @m5o. + * + * Date: @DATE + */ + +// Core variables and mixins +@import "variables"; // Modify this for custom colors, font-sizes, etc +@import "mixins"; + +// CSS Reset +@import "reset"; + +// Grid system and page structure +@import "scaffolding"; +@import "grid"; +@import "layouts"; + +// Base CSS +@import "type"; +@import "code"; +@import "forms"; +@import "tables"; + +// Components: common +@import "sprites"; +@import "dropdowns"; +@import "wells"; +@import "component-animations"; +@import "close"; + +// Components: Buttons & Alerts +@import "buttons"; +@import "button-groups"; +@import "alerts"; // Note: alerts share common CSS with buttons and thus have styles in buttons.scss + +// Components: Nav +@import "navs"; +@import "navbar"; +@import "breadcrumbs"; +@import "pagination"; +@import "pager"; + +// Components: Popovers +@import "modals"; +@import "tooltip"; +@import "popovers"; + +// Components: Misc +@import "thumbnails"; +@import "labels"; +@import "progress-bars"; +@import "accordion"; +@import "carousel"; +@import "hero-unit"; + +// Utility classes +@import "utilities"; // Has to be last to override when necessary diff --git a/app/assets/stylesheets/bootstrap/responsive.scss b/app/assets/stylesheets/bootstrap/responsive.scss new file mode 100644 index 0000000..f7bd96d --- /dev/null +++ b/app/assets/stylesheets/bootstrap/responsive.scss @@ -0,0 +1,337 @@ +/*! + * Bootstrap Responsive v2.0.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + * + * Converted to Sass by @johnwlong / @m5o. + * + * Date: @DATE + */ + +// Responsive.scss +// For phone and tablet devices +// ------------------------------------------------------------- + + +// REPEAT VARIABLES & MIXINS +// ------------------------- +// Required since we compile the responsive stuff separately + +@import "variables"; // Modify this for custom colors, font-sizes, etc +@import "mixins"; + +.clearfix { + @include clearfix(); +} + +// RESPONSIVE CLASSES +// ------------------ + +// Hide from screenreaders and browsers +// Credit: HTML5 Boilerplate +.hidden { + display: none; + visibility: hidden; +} + + + +// UP TO LANDSCAPE PHONE +// --------------------- + +@media (max-width: 480px) { + + // Smooth out the collapsing/expanding nav + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); // activate the GPU + } + + // Block level the page header small tag for readability + .page-header h1 small { + display: block; + line-height: $baseLineHeight; + } + + // Make span* classes full width + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 28px; /* Make inputs at least the height of their button counterpart */ + /* Makes inputs behave like true block-level elements */ + -webkit-box-sizing: border-box; /* Older Webkit */ + -moz-box-sizing: border-box; /* Older FF */ + -ms-box-sizing: border-box; /* IE8 */ + box-sizing: border-box; /* CSS3 spec*/ + } + // But don't let it screw up prepend/append inputs + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + width: auto; + } + + // Update checkboxes for iOS + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + // Remove the horizontal form styles + .form-horizontal .control-group > label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + // Move over all input controls and content + .form-horizontal .controls { + margin-left: 0; + } + // Move the options list down to align with labels + .form-horizontal .control-list { + padding-top: 0; // has to be padding because margin collaspes + } + // Move over buttons in .form-actions to align with .controls + .form-horizontal .form-actions { + padding-left: 10px; + padding-right: 10px; + } + + // Modals + .modal { + position: absolute; + top: 10px; + left: 10px; + right: 10px; + width: auto; + margin: 0; + &.fade.in { top: auto; } + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + + // Carousel + .carousel-caption { + position: static; + } + +} + + + +// LANDSCAPE PHONE TO SMALL DESKTOP & PORTRAIT TABLET +// -------------------------------------------------- + +// @media (max-width: 767px) { +// elijah: i think 767px is too wide to switch to single column. + +@media (max-width: 480px) { + // GRID & CONTAINERS + // ----------------- + // Remove width from containers + .container { + width: auto; + padding: 0 20px; + } + // Fluid rows + .row-fluid { + width: 100%; + } + // Undo negative margin on rows + .row { + margin-left: 0; + } + // Make all columns even + .row > [class*="span"], + .row-fluid > [class*="span"] { + float: none; + display: block; + width: auto; + margin: 0; + } +} + + + +// PORTRAIT TABLET TO DEFAULT DESKTOP +// ---------------------------------- + +@media (min-width: 768px) and (max-width: 979px) { + + // Fixed grid + @include gridSystem-generate(12, 42px, 20px); + + // Fluid grid + @include fluidGridSystem-generate(12, 5.801104972%, 2.762430939%); + + // Input grid + @include inputGridSystem-generate(12, 42px, 20px); + +} + + + +// TABLETS AND BELOW +// ----------------- +@media (max-width: 979px) { + + // UNFIX THE TOPBAR + // ---------------- + // Remove any padding from the body + body { + padding-top: 0; + } + // Unfix the navbar + .navbar-fixed-top { + position: static; + margin-bottom: $baseLineHeight; + } + .navbar-fixed-top .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + // Account for brand name + .navbar .brand { + padding-left: 10px; + padding-right: 10px; + margin: 0 0 0 -5px; + } + // Nav collapse clears brand + .navbar .nav-collapse { + clear: left; + } + // Block-level the nav + .navbar .nav { + float: none; + margin: 0 0 ($baseLineHeight / 2); + } + .navbar .nav > li { + float: none; + } + .navbar .nav > li > a { + margin-bottom: 2px; + } + .navbar .nav > .divider-vertical { + display: none; + } + .navbar .nav .nav-header { + color: $navbarText; + text-shadow: none; + } + // Nav and dropdown links in navbar + .navbar .nav > li > a, + .navbar .dropdown-menu a { + padding: 6px 15px; + font-weight: bold; + color: $navbarLinkColor; + @include border-radius(3px); + } + .navbar .dropdown-menu li + li a { + margin-bottom: 2px; + } + .navbar .nav > li > a:hover, + .navbar .dropdown-menu a:hover { + background-color: $navbarBackground; + } + // Dropdowns in the navbar + .navbar .dropdown-menu { + position: static; + top: auto; + left: auto; + float: none; + display: block; + max-width: none; + margin: 0 15px; + padding: 0; + background-color: transparent; + border: none; + @include border-radius(0); + @include box-shadow(none); + } + .navbar .dropdown-menu:before, + .navbar .dropdown-menu:after { + display: none; + } + .navbar .dropdown-menu .divider { + display: none; + } + // Forms in navbar + .navbar-form, + .navbar-search { + float: none; + padding: ($baseLineHeight / 2) 15px; + margin: ($baseLineHeight / 2) 0; + border-top: 1px solid $navbarBackground; + border-bottom: 1px solid $navbarBackground; + $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + @include box-shadow($shadow); + } + // Pull right (secondary) nav content + .navbar .nav.pull-right { + float: none; + margin-left: 0; + } + // Static navbar + .navbar-static .navbar-inner { + padding-left: 10px; + padding-right: 10px; + } + // Navbar button + .btn-navbar { + display: block; + } + + // Hide everything in the navbar save .brand and toggle button */ + .nav-collapse { + overflow: hidden; + height: 0; + } +} + + + +// DEFAULT DESKTOP +// --------------- + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + } +} + + + +// LARGE DESKTOP & UP +// ------------------ + +@media (min-width: 1200px) { + + // Fixed grid + //@include gridSystem-generate(12, 70px, 30px); + + // Fluid grid + @include fluidGridSystem-generate(12, 5.982905983%, 2.564102564%); + + // Input grid + @include inputGridSystem-generate(12, 70px, 30px); + + // Thumbnails + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + +} diff --git a/app/assets/stylesheets/leap.scss b/app/assets/stylesheets/leap.scss new file mode 100644 index 0000000..71be997 --- /dev/null +++ b/app/assets/stylesheets/leap.scss @@ -0,0 +1,176 @@ + + +$background_color: #fff; + +$masthead_border_color: black; // rgba(0,0,0,0.5); +$masthead_border: 1px solid $masthead_border_color; +$masthead_bg_color: #333; // rgba(96,96,96,0.2); +$masthead_color: #fff; +$masthead_height: 128px; + +$masthead_text_left_margin: 150px; +$masthead_text_top_margin: 45px; +$masthead_text_size: 36px; + +$cutout_color: darken($background_color,12%); + +$side_column_bg_color: #d0d0d0; // rgba(0,0,0,0.05); // #e3e3e3 +$side_column_border_color: #aaa; // rgba(0,0,0,0.2); +$side_column_active_bg_color: #000; +$side_column_active_color: $masthead_color; + +$well_color: #fff; +$well_bg_color: #fff; +$well_border_color: #555; + +body { + //background: #F5F1E8 url(/img/bg-sand.png) repeat-x; + background-color: $background_color; +} + +.masthead { + border: $masthead_border; + background: $masthead_bg_color; + @include gradient-vertical(lighten($masthead_bg_color,8%),$masthead_bg_color); + border-top: none; + box-shadow: inset 0 0 8px 1px darken($masthead_bg_color, 8%); + box-shadow-top: 0; + .contents { + @include cutout-menu(topnav, $masthead_text_left_margin, $cutout_color, $masthead_border); + height: $masthead_height; + background: url(/img/leap-color-small.png) 10px 50% no-repeat; + } + h1 { + margin: 0; + color: $masthead_color; + line-height: $masthead_height; + font-size: $masthead_text_size; + white-space: nowrap; + overflow: hidden; + padding-left: $masthead_text_left_margin - 2px; + } + #topnav a.tab { + font-weight: bold; + color: white; + background: rgba(0,0,0,0.5); + &.active { + color: black; + } + } +} + +.nav-tabs.nav-stacked li { + background: $side_column_bg_color; + a { + border-radius: 0 !important; + border: 0; //1px solid $side_column_border_color; + border-right: 4px solid $side_column_active_bg_color; + color: black; + line-height: 1.2em; + &:hover { + background: lighten($side_column_bg_color,20%); + border-color: lighten($side_column_active_bg_color, 50%); + text-decoration: underline; + // border: 1px solid $side_column_border_color; + } + &.level2 { + padding-left: 2em; + } + } + &.active a { + border: 0; + border-color: $side_column_active_bg_color; + background: $side_column_active_bg_color; + color: $side_column_active_color; + cursor: pointer; + } +} + +.side_column ul { + box-shadow: 2px 4px 4px 0px darken($background_color,40%); + //background: $side_column_bg_color; + //box-shadow: inset 0px 0px 5px 2px darken($side_column_bg_color,10%); +} + +.background { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 400px; + z-index: -1; + @include gradient-vertical(darken($background_color, 17%), $background_color); +} + +.pullout { + background: rgba(0,0,0,.1); +} + +// +// like bootstrap well, but not roundy +// + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 11px; // same as 'p', not sure what variable this is. + background-color: $well_bg_color; + //@include gradient-vertical($well_bg_color, lighten($well_bg_color, 20%)); + box-shadow: inset 0px 0px 4px 2px darken($well_bg_color,10%); + //box-shadow: 3px 3px 4px 2px rgba(0,0,0,0.05); // darken($background_color,10%); + border: 1px solid lighten($well_border_color,50%); + .heading { + margin-top: -6px; + margin-bottom: 6px; + //margin: -20px; + //margin-bottom: 0.75em; + //padding: 6px 19px; + //background: $well_border_color; + //color: $well_color; + font-weight: bold; + font-size: 1.1em; + } +} + +// +// inverted headings +// + +.invert { + color: white; + background-color: $well_border_color; + padding-left: 12px; +} + + +table.timeline { + td:first-child { + text-align: right; + white-space: nowrap; + padding-right: 0; + } + td { + vertical-align: top; + padding: 6px; + } +} + +// +// blog stuff +// + + +article.blog_summary { + .byline { + color: #999; + } +} + +article.blog_full { + .byline { + font-weight: bold; + margin-bottom: 0.5em; + font-size: 1em; + color: #999; + } +} diff --git a/app/assets/stylesheets/mixins.scss b/app/assets/stylesheets/mixins.scss new file mode 100644 index 0000000..93cbc44 --- /dev/null +++ b/app/assets/stylesheets/mixins.scss @@ -0,0 +1,172 @@ +// Gradients +@mixin gradient-horizontal($startColor: #555, $endColor: #333) { + background-color: $endColor; + background-image: -moz-linear-gradient(left, $startColor, $endColor); // FF 3.6+ + background-image: -ms-linear-gradient(left, $startColor, $endColor); // IE10 + background-image: -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(left, $startColor, $endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(left, $startColor, $endColor); // Opera 11.10 + background-image: linear-gradient(left, $startColor, $endColor); // Le standard + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=1), $startColor, $endColor; // IE9 and down +} +@mixin gradient-vertical($startColor: #555, $endColor: #333) { + background-color: mix($startColor, $endColor, 60%); + background-image: -moz-linear-gradient(top, $startColor, $endColor); // FF 3.6+ + background-image: -ms-linear-gradient(top, $startColor, $endColor); // IE10 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), to($endColor)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, $startColor, $endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(top, $startColor, $endColor); // Opera 11.10 + background-image: linear-gradient(top, $startColor, $endColor); // The standard + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0),$startColor,$endColor; // IE9 and down +} +@mixin gradient-directional($startColor: #555, $endColor: #333, $deg: 45deg) { + background-color: $endColor; + background-repeat: repeat-x; + background-image: -moz-linear-gradient($deg, $startColor, $endColor); // FF 3.6+ + background-image: -ms-linear-gradient($deg, $startColor, $endColor); // IE10 + background-image: -webkit-linear-gradient($deg, $startColor, $endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient($deg, $startColor, $endColor); // Opera 11.10 + background-image: linear-gradient($deg, $startColor, $endColor); // The standard +} +@mixin gradient-vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) { + background-color: mix($midColor, $endColor, 80%); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), color-stop($colorStop, $midColor), to($endColor)); + background-image: -webkit-linear-gradient($startColor, $midColor $colorStop, $endColor); + background-image: -moz-linear-gradient(top, $startColor, $midColor $colorStop, $endColor); + background-image: -ms-linear-gradient($startColor, $midColor $colorStop, $endColor); + background-image: -o-linear-gradient($startColor, $midColor $colorStop, $endColor); + background-image: linear-gradient($startColor, $midColor $colorStop, $endColor); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0), $startColor, $endColor; // IE9 and down, gets no color-stop at all the proper fallback +} +@mixin gradient-radial($innerColor: #555, $outerColor: #333) { + background-color: $outerColor; + background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($innerColor), to($outerColor)); + background-image: -webkit-radial-gradient(circle, $innerColor, $outerColor); + background-image: -moz-radial-gradient(circle, $innerColor, $outerColor); + background-image: -ms-radial-gradient(circle, $innerColor, $outerColor); + background-repeat: no-repeat; + // Opera cannot do radial gradients yet +} +@mixin gradient-striped($color,$angle: -45deg) { + background-color: $color; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + //background-image: linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); + } + +// Gradient Bar Colors for buttons and alerts +@mixin gradientBar($primaryColor, $secondaryColor) { + @include gradient-vertical($primaryColor, $secondaryColor); + border-color: $secondaryColor $secondaryColor darken($secondaryColor, 15%); + border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fade-in(rgba(0,0,0,.1), 0.15); +} + +// Reset filters for IE +@mixin reset-filter() { + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} + + +// +// An UL,LI menu that looks like a cutout and is positioned at the bottom +// of the enclosing block. +// +// This mixin is applied to the enclosing block. +// +// the markup should look like this: +// +// enclosing-block +// ul#id +// li.tab +// a.tab +// li.tab +// a.tab +// +// the id for the ul is passed in as the first argument. +// +// it is difficult to create cutout tabs with a border that look good +// in all browsers and at different client font-sizes. +// +// the problem is that the tab element needs to line up exactly with the +// bottom of the enclosing block in order to make the cutout illusion work. +// most methods of doing this create weird jitters in webkit +// and gecko when resizing the screen or changing the font size. it does not +// look so good to have a dark line under your tab, breaking the illusion of +// a cutout. +// +// the method which makes this jitter-free is to use a height and a line-height +// for the <a> tag instead of vertical padding. This requires that <a> is a block +// which requires that the <li> is block & floated, instead of inline. +// +// This method seems to produce by far the most consistant results of letting +// the active tab sit snugly on the bottom of the enclosing div. +// +// Change with caution: I spent way too much time getting this to work. +// + +@mixin cutout-menu( + $ul_id, + $tab_margin: 10px, + $active_background: white, + $active_border: false) { + + // allows us to put the menu at the bottom + position: relative; + + ul##{$ul_id} { + margin: 0; + padding: 0; + + // allows us to put the menu at the bottom + position: absolute; + + // puts the menu at the bottom of the enclosing block, + // minus the overhand needed to cover the border: + // bottom: -(border_width($active_border)); + bottom: -1px; + + // padding-left: don't do it. + // ^^ In some cases, we need width of 100% to actually be the screen width, + // but adding padding makes 100% width be wider than the screen. + // So, instead, we add margin to the first and last li. + + white-space: nowrap; + + li.tab { + display: block; + float: left; + &.first {margin-left: $tab_margin;} + &.last {margin-right: $tab_margin;} + a.tab { + // @include cg-hover-link; + display: block; + padding: 3px 15px; + + // using height and line-height makes for much more consistant rendering + // than using vertical padding. essential to prevent tabs from looking + // horrible at different fonts sizes. + height: 1.75em; + line-height: 1.75em; + + // the transparent border is needed to prevent the menu from jittering + // when the active border is applied. + border: 1px solid transparent; + border-bottom: 0; + + &.active { + background-color: $active_background; + @if $active_border { + border: $active_border; + border-bottom: 0; + } + } + } + } + } +} diff --git a/app/assets/stylesheets/superfluid.scss b/app/assets/stylesheets/superfluid.scss new file mode 100644 index 0000000..3280fb6 --- /dev/null +++ b/app/assets/stylesheets/superfluid.scss @@ -0,0 +1,113 @@ +// +// This is a simple CSS for a very fluid layout. One could say it is SUPER fluid. +// functions taken from susy. +// +// HTML +// +// .top +// .column_countainer +// .column_content +// .middle +// .column_container +// .column_content +// .bottom +// .column_container +// .column_content +// + +// +// DEFAULTS +// + +$total-columns: $gridColumns !default; +$side-columns: 2 !default; + +$column-width: $gridColumnWidth !default; +$gutter-width: $gridGutterWidth !default; + +// +// FUNCTIONS +// + +// +// Returns the width of the specified number of columns +// $columns => The number of columns to get width for. +// +@function columns-width($columns : $total-columns) { + @return ($columns * $column-width) + (ceil($columns - 1) * $gutter-width); +} + +// +// Returns the full width of all columns +// +@function full-width() { + @return columns-width(); +} + +// +// Return the percentage width of a single gutter in a given column context. +// $context => The grid context in columns, if nested. +// +@function gutter($context : $total-columns) { + @return percentage($gutter-width / columns-width($context)); +} + +// +// Return the percentage width of multiple 'columns' in a given 'context'. +// $columns => The number of columns to get relative width for. +// $context => The grid context in columns, if nested. +// +@function columns($columns, $context : $total-columns) { + @return percentage(columns-width($columns) / columns-width($context)); +} + +// +// CSS +// + +.column_container { + *zoom: 1; + margin-left: auto; + margin-right: auto; + width: full-width(); + max-width: 100%; +} + +.column_content { + padding-left: gutter(); + padding-right: gutter(); +} + +.middle .column_container:after { + content: "\0020"; + display: block; + height: 0; + clear: both; + overflow: hidden; + visibility: hidden; +} + +.middle .column_content { + padding-top: gutter(); + padding-bottom: gutter(); +} + +.main_column.with_side_column { + width: columns($total-columns - $side-columns); + margin-left: gutter(); + float: left; + // without left float, we would use this: + // margin-left: columns($side-columns) + gutter(); + // but that creates problems if we have floated columns inside this main column +} + +//.article.full { +// margin-left: 0; +// width: columns; +//} + +.side_column { + display: inline; + float: left; + width: columns($side-columns); +} diff --git a/app/assets/stylesheets/typography.scss b/app/assets/stylesheets/typography.scss new file mode 100644 index 0000000..651eebf --- /dev/null +++ b/app/assets/stylesheets/typography.scss @@ -0,0 +1,33 @@ +.p { + margin-top: 1em; + margin-bottom: 1em; + &:first-child { + margin-top: 0; + } +} + +// +// make headings and paragraphs that are at the top of the page fit more snugly against the top. +// +h1, h2, h3 { + &.first { + line-height: 0.8em; + margin-bottom: 0.4em + } +} +p.first { + margin-top: 0 !important; +} + +.ol {@extend ol} +.li {@extend li} + +.h1 {@extend h1} +.h2 {@extend h2} +.h3 {@extend h3} + +.bigger { + font-size: 140%; + line-height: 140%; + margin: 20px 0; +}
\ No newline at end of file |