diff --git a/lib/baseline.less b/lib/baseline.less new file mode 100644 index 0000000000..8591cfe075 --- /dev/null +++ b/lib/baseline.less @@ -0,0 +1,24 @@ +/* + Master Stylesheet + This file is only for importing all required stylesheets for LESS to include and then compile. +*/ + +// CSS Reset +@import "reset.less"; + +// Core +@import "bootstrap.less"; +@import "scaffolding.less"; + +// Styled patterns and elements +@import "type.less"; +@import "forms.less"; +@import "tables.less"; +@import "patterns.less"; + + +/* Add additional stylesheets below +-------------------------------------------------- */ + +// Documentation +@import "docs.less"; \ No newline at end of file diff --git a/lib/bootstrap.less b/lib/bootstrap.less new file mode 100644 index 0000000000..9e131a9096 --- /dev/null +++ b/lib/bootstrap.less @@ -0,0 +1,211 @@ +/* + Bootstrap v1.1 + Variables and mixins to bootstrap any new web development project. Modified from original version for Twitter Blueprint. +*/ + + +/* Variables +-------------------------------------------------- */ + +// Links +@link-color: #0069d6; +@link-hover-color: darken(@link-color, 10); + +// Grays +@white: #fff; +@gray-lighter: #ccc; +@gray-light: #777; +@gray: #555; +@gray-dark: #333; +@black: #000; + +// Accent Colors +@blue: #08b5fb; +@blue-dark: #0069d6; +@green: #46a546; +@red: #9d261d; +@yellow: #ffc40d; +@orange: #f89406; +@pink: #c3325f; +@purple: #7a43b6; + +// Baseline grid +@baseline: 20px; + +// Griditude +@grid_columns: 16; +@grid_column_width: 40px; +@grid_gutter_width: 20px; +@site_width: (@grid_columns * @grid_column_width) + (@grid_gutter_width * (@grid_columns - 1)); + + +/* Mixins +-------------------------------------------------- */ + +// Clearfix for clearing floats like a boss +.clearfix { + zoom: 1; + &:after { + display: block; + visibility: hidden; + height: 0; + clear: both; + content: "."; + } +} + +// Floats +.right { + float: right; +} +.left { + float: left; +} + +// Input placeholder text +.placeholder(@color: @gray-light) { + :-moz-placeholder { + color: @color; + } + ::-webkit-input-placeholder { + color: @color; + } +} + +// Font Stacks +.font(@weight: normal, @size: 14px, @lineheight: 20px) { + font-size: @size; + font-weight: @weight; + line-height: @lineheight; +} +.sans-serif(@weight: normal, @size: 14px, @lineheight: 20px) { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: @size; + font-weight: @weight; + line-height: @lineheight; +} +.serif(@weight: normal, @size: 14px, @lineheight: 20px) { + font-family: "Georgia", Times New Roman, Times, sans-serif; + font-size: @size; + font-weight: @weight; + line-height: @lineheight; +} +.monospace(@weight: normal, @size: 12px, @lineheight: 20px) { + font-family: "Monaco", Courier New, monospace; + font-size: @size; + font-weight: @weight; + line-height: @lineheight; +} + +// Grid System +.container { + width: @site_width; + margin: 0 auto; +} +.columns(@column_span: 1) { + display: inline; + float: left; + width: (@grid_column_width * @column_span) + (@grid_gutter_width * (@column_span - 1)); + margin-left: @grid_gutter_width; + &:first-child { + margin-left: 0; + } +} +.offset(@column_offset: 1) { + margin-left: (@grid_column_width * @column_offset) + (@grid_gutter_width * (@column_offset - 1)) !important; +} + +// Border Radius +.border-radius(@radius: 5px) { + -moz-border-radius: @radius; + border-radius: @radius; +} + +// Drop shadows +.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) { + -webkit-box-shadow: @shadow; + -moz-box-shadow: @shadow; + box-shadow: @shadow; +} + +// Transitions +.transition(@transition) { + -webkit-transition: @transition; + -moz-transition: @transition; + transition: @transition; +} + +// CSS3 Content Columns +.content-columns(@column_count, @column_gap: 20px) { + -webkit-column-count: @count; + -webkit-column-gap: @gap; + -moz-column-count: @count; + -moz-column-gap: @gap; + column-count: @count; + column-gap: @gap; +} + +// Buttons +.button(@color: #f9f9f9, @padding: 4px 14px, @text_color: #555, @text_shadow: 0 1px 0 rgba(255,255,255,.75), @font_size: 13px, @border_color: rgba(0,0,0,.1), @rounded: 4px) { + display: inline-block; + #gradient > .vertical-three-colors(@color, @color, 0.25, darken(@color, 10%)); + padding: @padding; + text-shadow: @text_shadow; + color: @text_color; + line-height: @baseline; + border: 1px solid @border_color; + border-bottom-color: fadein(@border_color, 15%); + .border-radius(@rounded); + @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.1); + .box-shadow(@shadow); + cursor: pointer; + &:hover { + background-position: 0 -15px; + color: darken(@text_color, 10%); + text-decoration: none; + } +} + +// Add an alphatransparency value to any background or border color (via Elyse Holladay) +#translucent { + .background(@color: @white, @alpha: 1) { + background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); + } + .border(@color: @white, @alpha: 1) { + border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); + background-clip: padding-box; + } +} + +// Gradients +#gradient { + .horizontal(@startColor: #555, @endColor: #333) { + background-color: @endColor; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, left top, right top, from(@startColor), to(@endColor)); + background-image: -webkit-linear-gradient(right center, @startColor, @endColor); + background-image: -moz-linear-gradient(right center, @startColor, @endColor); + background-image: -o-linear-gradient(left, @startColor, @endColor); + background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); + filter: e(%("progid:DXImageTransform.Microsoft.Gradient(StartColorStr='%d', EndColorStr='%d', GradientType=1)",@startColor,@endColor)); + -ms-filter: %("progid:DXImageTransform.Microsoft.gradient(startColorStr='%d', EndColorStr='%d', GradientType=1))",@startColor,@endColor); + } + .vertical(@startColor: #555, @endColor: #333) { + background-color: @endColor; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); + background-image: -webkit-linear-gradient(@startColor, @endColor); + background-image: -moz-linear-gradient(@startColor, @endColor); + background-image: -o-linear-gradient(top, @startColor, @endColor); + background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); + filter: e(%("progid:DXImageTransform.Microsoft.Gradient(StartColorStr='%d', EndColorStr='%d', GradientType=0)",@startColor,@endColor)); + -ms-filter: %("progid:DXImageTransform.Microsoft.gradient(startColorStr='%d', EndColorStr='%d', GradientType=0))",@startColor,@endColor); + } + .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 0.5, @endColor: #c3325f) { + background-color: @endColor; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); + background-image: -webkit-linear-gradient(@startColor, color-stop(@colorStop, @midColor), @endColor); + background-image: -moz-linear-gradient(@startColor, color-stop(@midColor, @colorStop), @endColor); + } +} diff --git a/lib/docs.less b/lib/docs.less new file mode 100644 index 0000000000..84e8af2c2a --- /dev/null +++ b/lib/docs.less @@ -0,0 +1,200 @@ +/* + Baseline's documentation styles + Special styles for presenting Baseline's documentation and examples +*/ + + +/* Body and structure +-------------------------------------------------- */ + +// Give us a gradient background +body { + #gradient > .vertical-three-colors(#eee, #fff, 0.15, #fff); + background-attachment: fixed; + background-position: 0 40px; + position: relative; +} + +// Give us some love on HTML5 elements (hardly use these in Basline thus far though) +header, +section, +footer, +article, +aside { + display: block; +} + +// Break up sections +section { + padding-top: @baseline * 4; + margin-bottom: @baseline * -2; +} + +// Blueprint-style header and footer +#masthead, +#footer { + #gradient > .vertical(darken(@blue-dark, 7.5%), darken(@blue, 7.5%)); + div.inner { + background: transparent url(assets/img/grid-20px.png) 0 -1px; + padding: 40px 0; + .box-shadow(inset 0 10px 30px rgba(0,0,0,.25)); + } + h1, p, small { + color: #fff; + text-shadow: 0 2px 0 rgba(0,0,0,.25); + } +} +#masthead { + margin-top: @baseline * 2; + margin-bottom: @baseline * -2; + h1 { + margin-bottom: 0; + } + p.lead { + .font(300,20px,30px); + margin: 5px 0; + } + a.btn { + #gradient > .vertical(@purple, darken(@purple, 15%)); + display: block; + margin-bottom: 20px; + padding-top: 5px; + padding-bottom: 5px; + text-align: center; + border: 0; + @shadow: inset 0 1px 0 rgba(255,255,255,.25), inset 0 -1px 0 rgba(0,0,0,.25), 0 1px 2px rgba(0,0,0,.4); + .box-shadow(@shadow); + .transition(all .2s linear); + } + small { + display: block; + text-align: center; + font-size: 13px; + line-height: @baseline; + color: rgba(255,255,255,.5); + a { + color: #fff; + } + } +} + +// Page footer +#footer { + margin-top: @baseline * 4; + p { + margin-bottom: 0; + } +} + + +/* Special grid styles +-------------------------------------------------- */ + +.show-grid { + margin-top: 20px; + margin-bottom: 20px; + .column, + .columns { + background: rgba(0,0,0,.1); + text-align: center; + .border-radius(3px); + height: 30px; + line-height: 30px; + } + &:hover { + .column, + .columns { + background: rgba(0,0,0,.25); + } + } +} + + +/* Hashgrid.js grid (press G & H to view) +-------------------------------------------------- */ + +#grid { + width: 980px; + position: absolute; + top: 0; + left: 50%; + margin-left: -490px; +} +#grid div.vert { + #translucent > .background(#00CED1, .075); + width: 39px; + border: solid darkturquoise; + border-width: 0 1px; + margin-right: 19px; +} +#grid div.vert.first-line { + margin-left: 19px; +} +#grid div.horiz { + height: @baseline - 1; + border-bottom: 1px solid rgba(255,0,0,.1); + margin: 0; + padding: 0; + &:nth-child(5n) { + border-color: rgba(255,0,0,.25); + } +} + + + +/* Render mini layout previews +-------------------------------------------------- */ + +div.mini-layout { + height: 340px; + margin-bottom: @baseline; + padding: 9px; + border: 1px solid rgba(0,0,0,.25); + .border-radius(6px); + .box-shadow(0 1px 3px rgba(0,0,0,.125)); + // Default mini layout (fixed container) + div { + .border-radius(3px); + &.mini-layout-body { + background-color: rgba(141,192,219,.25); + margin: 0 auto; + width: 450px; + height: 340px; + } + } + // Fluid layout (sidebar) + &.fluid { + div.mini-layout-sidebar, + div.mini-layout-header, + div.mini-layout-body { + float: left; + } + div.mini-layout-sidebar { + background-color: rgba(141,192,219,.5); + width: 90px; + height: 340px; + } + div.mini-layout-body { + width: 400px; + margin-left: 10px; + } + } +} + + + +/* Topbar special styles +-------------------------------------------------- */ + +div.topbar-wrapper { + position: relative; + height: 40px; + margin: 5px 0 15px; + div.topbar { + position: absolute; + margin: 0 -20px; + padding-left: 20px; + padding-right: 20px; + .border-radius(4px); + } +} diff --git a/lib/forms.less b/lib/forms.less new file mode 100644 index 0000000000..59dae9241b --- /dev/null +++ b/lib/forms.less @@ -0,0 +1,336 @@ +/* + Forms + Base line styles for various input types, form layouts, and states +*/ + + +/* Global form styles +-------------------------------------------------- */ + +form { + margin-bottom: @baseline; + // Groups of fields with labels on top (legends) + fieldset { + margin-bottom: @baseline; + padding-top: @baseline; + legend { + display: block; + margin-left: 150px; + font-size: 20px; + line-height: 1; + color: @gray-dark; + } + } + // Parent element that clears floats and wraps labels and fields together + div.clearfix { + margin-bottom: @baseline; + } + // Set font for forms + label, input, select, textarea { + .sans-serif(normal,13px,normal); + } + // Float labels left + label { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 130px; + text-align: right; + } + // Shift over the inside div to align all label's relevant content + div.input { + margin-left: 150px; + } + // Checkboxs and radio buttons + input[type=checkbox], + input[type=radio] { + cursor: pointer; + } + // Inputs, Textareas, Selects + input[type=text], + input[type=password], + textarea, + select, + .uneditable-input { + display: block; + width: 210px; + margin: 0; + padding: 4px; + font-size: 13px; + line-height: @baseline; + height: @baseline; + color: @gray; + border: 1px solid #bbb; + .border-radius(3px); + } + select, + input[type=file] { + height: @baseline * 1.5; + line-height: @baseline * 1.5; + } + textarea { + height: auto; + } + .uneditable-input { + background-color: #eee; + display: block; + border-color: #ccc; + .box-shadow(inset 0 1px 2px rgba(0,0,0,.075)); + } + // Focus states + input[type=text], + input[type=password], + select, textarea { + @transition: border linear .2s, box-shadow linear .2s; + .transition(@transition); + } + input[type=text]:focus, + input[type=password]:focus, + textarea:focus { + outline: none; + border-color: rgba(82,168,236,.75); + .box-shadow(0 0 8px rgba(82,168,236,.5)); + } + // Error styles + div.error { + background: lighten(@red, 57%); + padding: 10px 0; + margin: -10px 0 10px; + .border-radius(4px); + @error-text: desaturate(lighten(@red, 25%), 25%); + > label { + color: @red; + } + input[type=text], + input[type=password], + textarea { + border-color: @error-text; + .box-shadow(0 0 3px rgba(171,41,32,.25)); + &:focus { + border-color: darken(@error-text, 10%); + .box-shadow(0 0 6px rgba(171,41,32,.5)); + } + } + div.input-prepend, + div.input-append { + span.add-on { + background: lighten(@red, 50%); + border-color: @error-text; + color: darken(@error-text, 10%); + } + } + } + // Form element sizes + .input-mini, input.mini, textarea.mini, select.mini { + width: 60px; + } + .input-small, input.small, textarea.small, select.small { + width: 90px; + } + .input-medium, input.medium, textarea.medium, select.medium { + width: 150px; + } + .input-large, input.large, textarea.large, select.large { + width: 210px; + } + .input-xlarge, input.xlarge, textarea.xlarge, select.xlarge { + width: 270px; + } + .input-xxlarge, input.xxlarge, textarea.xxlarge, select.xxlarge { + width: 530px; + } + textarea.xxlarge { + overflow-y: scroll; + } + // Turn off focus for disabled (read-only) form elements + input[readonly]:focus, + textarea[readonly]:focus, + input.disabled { + background: #f5f5f5; + border-color: #ddd; + .box-shadow(none); + } +} + +// Actions (the buttons) +div.actions { + background: #f5f5f5; + margin-top: @baseline; + margin-bottom: @baseline; + padding: (@baseline - 1) 20px @baseline 150px; + border-top: 1px solid #ddd; + .border-radius(0 0 3px 3px); + div.secondary-action { + float: right; + a { + line-height: 30px; + &:hover { + text-decoration: underline; + } + } + } +} + +// Help Text +.help-inline, +.help-block { + font-size: 12px; + line-height: @baseline; + color: @gray-light; +} +.help-inline { + padding-left: 5px; +} +// Big blocks of help text +.help-block { + display: block; + max-width: 600px; + h5, p, ol li { + color: @gray; + } + p, ol li { + font-size: 12px; + } + p { + margin-bottom: 0; + font-size: 12px; + line-height: @baseline; + color: @gray-light; + } + ol { + margin-bottom: 10px; + margin-left: 25px; + } +} + +// Inline Fields (input fields that appear as inline objects +div.inline-inputs { + color: @gray; + span, input[type=text] { + display: inline-block; + } + input.mini { + width: 60px; + } + input.small { + width: 90px; + } + span { + padding: 0 2px 0 1px; + } +} + +// Allow us to put symbols and text within the input field for a cleaner look +div.input-prepend, +div.input-append { + input[type=text] { + .border-radius(0 3px 3px 0); + } + .add-on { + background: #f5f5f5; + float: left; + display: block; + width: auto; + min-width: 16px; + padding: 5px 4px 5px 5px; + color: @gray-light; + font-weight: normal; + line-height: 18px; + height: 18px; + text-align: center; + text-shadow: 0 1px 0 #fff; + border: 1px solid #bbb; + border-right-width: 0; + .border-radius(3px 0 0 3px); + } + .active { + background: lighten(@green, 30); + border-color: @green; + } +} +div.input-append { + input[type=text] { + float: left; + .border-radius(3px 0 0 3px); + } + .add-on { + .border-radius(0 3px 3px 0); + border-right-width: 1px; + border-left-width: 0; + } +} + +// Stacked options for forms (radio buttons or checkboxes) +ul.inputs-list { + margin: 0 0 5px; + width: 100%; + li { + display: block; + padding: 0; + width: 100%; + label { + display: block; + float: none; + width: auto; + padding: 0; + line-height: @baseline; + text-align: left; + white-space: normal; + strong { + color: @gray; + } + small { + font-size: 12px; + font-weight: normal !important; + } + } + ul.inputs-list { + margin-left: 25px; + margin-bottom: 10px; + padding-top: 0; + } + &:first-child { + padding-top: 5px; + } + } + input[type=radio], + input[type=checkbox] { + margin-bottom: 0; + } +} + +// Stacked forms +form.form-stacked { + fieldset { + padding-top: @baseline / 2; + } + legend { + margin-left: 0; + } + label { + display: block; + float: none; + width: auto; + font-weight: bold; + text-align: left; + line-height: 20px; + padding-top: 0; + } + div.clearfix { + margin-bottom: @baseline / 2; + div.input { + margin-left: 0; + } + } + ul.inputs-list { + margin-bottom: 0; + li { + padding-top: 0; + label { + font-weight: normal; + padding-top: 0; + } + } + } +} diff --git a/lib/patterns.less b/lib/patterns.less new file mode 100644 index 0000000000..ddad5271d4 --- /dev/null +++ b/lib/patterns.less @@ -0,0 +1,526 @@ +/* + Patterns.less + Repeatable UI elements outside the base styles provided from the scaffolding +*/ + + +/* Top bar +-------------------------------------------------- */ + +/* +div.topbar { + #gradient > .vertical(#333, #222); + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + height: 40px; + .box-shadow(0 1px 3px rgba(0,0,0,.5)); + a { + color: #999; + &:hover { + color: @white; + text-decoration: none; + background-color: rgba(255,255,255,.05); + } + } + a.logo, + ul li a { + float: left; + padding: 0 10px; + line-height: 40px; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + } + // Logo + a.logo { + margin-left: -10px; + margin-right: 10px; + color: @gray-light; + font-size: 20px; + font-weight: 200; + img { + float: left; + margin-top: 9px; + margin-right: 6px; + } + &:hover { + color: @white; + } + } + // Nav items + ul { + float: left; + margin: 0; + li { + display: inline; + &.active a { + color: #fff; + background-color: rgba(0,0,0,.5); + } + } + } +} +*/ + +// Topbar for Branding and Nav +div.topbar { + #gradient > .vertical(#333, #222); + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 100; + overflow: visible; + @shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1); + .box-shadow(@shadow); + // Links get text shadow + a { + color: @gray-light; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + .transition(all linear .1s); + } + // Hover and active states for links + ul li a:hover, + ul li.active a, + a.logo:hover { + background-color: #333; + background-color: rgba(255,255,255,.15); + color: @white; + text-decoration: none; + } + // Logo + a.logo { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + color: @white; + font-size: 20px; + font-weight: 200; + line-height: 1; + img { + display: inline; + float: left; + margin-right: 6px; + } + } + // Search Form + form { + float: left; + margin: 4px 0 0 0; + opacity: 1; + position: relative; + input { + background-color: @gray-light; + background-color: rgba(255,255,255,.3); + .sans-serif(13px, normal, 1); + width: 220px; + padding: 4px 9px; + color: #fff; + color: rgba(255,255,255,.75); + border: 1px solid #111; + .border-radius(4px); + @shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0px rgba(255,255,255,.25); + .box-shadow(@shadow); + .transition(none); + // Placeholder text gets special styles; can't be bundled together though for some reason + &:-moz-placeholder { + color: @gray-lighter; + } + &::-webkit-input-placeholder { + color: @gray-lighter; + } + &:hover { + background-color: #444; + background-color: rgba(255,255,255,.5); + color: #fff; + } + &:focus, + &.focused { + outline: none; + background-color: #fff; + color: @gray-dark; + text-shadow: 0 1px 0 #fff; + border: 0; + padding: 5px 10px; + .box-shadow(0 0 3px rgba(0,0,0,.15)); + } + } + } + // Navigation + ul { + display: block; + float: left; + margin: 0 10px 0 0; + &.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; + } + li { + display: block; + float: left; + font-size: 13px; + a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; + &:hover { + color: #fff; + text-decoration: none; + } + } + &.active a { + background-color: #222; + background-color: rgba(0,0,0,.5); + font-weight: bold; + } + // Vertical rule + &.vr { + border-left: 1px solid #008db8; + border-right: 1px solid #00a0d1; + height: 26px; + margin: 6px 3px 1px 3px; + } + } + // Dropdowns + &.primary-nav li ul { + left: 0; + } + &.secondary-nav li ul { + right: 0; + } + li.menu { + position: relative; + a.menu { + &:after { + width: 7px; + height: 7px; + display: inline-block; + background: transparent url(assets/img/dropdown-arrow.gif) no-repeat top center; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + opacity: .5; + } + } + &.open { + a.menu, + a:hover { + background-color: lighten(#00a0d1,5); + background-color: rgba(255,255,255,.1); + color: #fff; + } + ul { + display: block; + li { + a { + background-color: transparent; + font-weight: normal; + &:hover { + background-color: rgba(255,255,255,.1); + color: #fff; + } + } + &.active a { + background-color: rgba(255,255,255,.1); + font-weight: bold; + } + } + } + } + } + li ul { + background-color: #333; + float: left; + display: none; + position: absolute; + top: 40px; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 0; + text-align: left; + border: 0; + zoom: 1; + .border-radius(0 0 5px 5px); + .box-shadow(0 1px 2px rgba(0,0,0,0.6)); + li { + float: none; + clear: both; + display: block; + background: none; + font-size: 12px; + a { + display: block; + padding: 6px 15px; + clear: both; + font-weight: normal; + line-height: 19px; + color: #bbb; + &:hover { + background-color: #333; + background-color: rgba(255,255,255,.25); + color: #fff; + } + } + // Dividers (basically an hr) + &.divider { + height: 1px; + overflow: hidden; + background: rgba(0,0,0,.2); + border-bottom: 1px solid rgba(255,255,255,.1); + margin: 5px 0; + } + // Section separaters + span { + clear: both; + display: block; + background: rgba(0,0,0,.2); + padding: 6px 15px; + cursor: default; + color: #666; + border-top: 1px solid rgba(0,0,0,.2); + } + } + } + } +} + +/* Page Headers +-------------------------------------------------- */ + +div.page-header { + margin-bottom: @baseline - 1; + border-bottom: 1px solid #ddd; + .border-radius(6px 6px 0 0); + .box-shadow(0 1px 0 rgba(255,255,255,.5)); + h1 { + margin-bottom: 0; + } +} + + +/* Error Styles +-------------------------------------------------- */ + +// One-liner alert bars +div.alert-message { + #gradient > .vertical(transparent, rgba(0,0,0,0.15)); + background-color: @gray-lighter; + margin-bottom: @baseline; + padding: 10px 15px 9px; + .border-radius(6px); + color: #fff; + border-bottom: 1px solid rgba(0,0,0,.25); + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + p { + color: #fff; + margin-bottom: 0; + + p { + margin-top: 5px; + } + } + &.error { + background-color: lighten(@red, 25%); + } + &.warning { + background-color: lighten(@yellow, 15%); + } + &.success { + background-color: lighten(@green, 15%); + } + &.info { + background-color: lighten(@blue, 15%); + } + a.close { + float: right; + margin-top: -2px; + opacity: .5; + color: #fff; + font-size: 20px; + font-weight: bold; + text-shadow: 0 1px 0 rgba(0,0,0,.5); + .border-radius(3px); + &:hover { + opacity: 1; + text-decoration: none; + } + } +} + +// Block-level Alerts +div.block-message { + margin-bottom: @baseline; + padding: 14px 19px; + color: #333; + color: rgba(0,0,0,.8); + text-shadow: 0 1px 0 rgba(255,255,255,.25); + .border-radius(6px); + p { + font-size: 13px; + line-height: 18px; + color: #333; + color: rgba(0,0,0,.8); + margin-right: 30px; + margin-bottom: 0; + } + ul { + margin-bottom: 0; + } + strong { + display: block; + } + a.close { + display: block; + color: #333; + color: rgba(0,0,0,.5); + text-shadow: 0 1px 1px rgba(255,255,255,.75); + } + &.error { + background: lighten(@red, 55%); + border: 1px solid lighten(@red, 50%); + } + &.warning { + background: lighten(@yellow, 35%); + border: 1px solid lighten(@yellow, 25%) + } + &.success { + background: lighten(@green, 45%); + border: 1px solid lighten(@green, 35%) + } + &.info { + background: lighten(@blue, 45%); + border: 1px solid lighten(@blue, 40%); + } +} + + +/* Navigation +-------------------------------------------------- */ + +// Common tab and pill styles +ul.tabs, +ul.pills { + margin: 0 0 20px; + padding: 0; + .clearfix(); + li { + display: inline; + a { + display: inline; + float: left; + width: auto; + } + } +} +// Basic Tabs +ul.tabs { + width: 100%; + border-bottom: 1px solid #ccc; + li { + a { + margin-bottom: -1px; + margin-right: 2px; + padding: 0 15px; + line-height: (@baseline * 2) - 1; + .border-radius(3px 3px 0 0); + &:hover { + background: #f5f5f5; + border-bottom: 1px solid #ccc; + } + } + &.active a { + background: #fff; + padding: 0 14px; + border: 1px solid #ccc; + border-bottom: 0; + color: @gray; + } + } +} +// Basic pill nav +ul.pills { + li { + a { + margin: 5px 3px 5px 0; + padding: 0 15px; + text-shadow: 0 1px 1px #fff; + line-height: 30px; + .border-radius(15px); + &:hover { + background: @link-hover-color; + color: #fff; + text-decoration: none; + text-shadow: 0 1px 1px rgba(0,0,0,.25); + } + } + &.active a { + background: @link-color; + color: #fff; + text-shadow: 0 1px 1px rgba(0,0,0,.25); + } + } +} + + +/* Pagination +-------------------------------------------------- */ + +div.pagination { + height: @baseline * 2; + margin: @baseline 0; + ul { + float: left; + margin: 0; + border: 1px solid rgba(0,0,0,.15); + .border-radius(3px); + .box-shadow(0 1px 2px rgba(0,0,0,.075); + li { + display: inline; + a { + display: inline; + float: left; + padding: 0 14px; + line-height: (@baseline * 2) - 2; + border-right: 1px solid rgba(0,0,0,.15); + text-decoration: none; + } + a:hover, + &.active a { + background-color: lighten(@blue, 45%); + } + &.disabled a, + &.disabled a:hover { + background-color: none; + color: @gray-light; + } + &.next a, + &:last-child a { + border: 0; + } + } + } +} + + +/* Wells +-------------------------------------------------- */ + +div.well { + background: #f5f5f5; + margin-bottom: 20px; + padding: 19px; + min-height: 20px; + border: 1px solid #ddd; + .border-radius(4px); + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075); +} diff --git a/lib/reset.less b/lib/reset.less new file mode 100644 index 0000000000..af9a89f084 --- /dev/null +++ b/lib/reset.less @@ -0,0 +1,16 @@ +/*-------------------------------------------------- + + Global Reset + + Props to Eric Meyer (meyerweb.com) for his CSS + reset file. We're using an adapted version here + that cuts out some of the reset HTML elements we + will never need here (i.e., dfn, samp, etc). + +-------------------------------------------------- */ + + html, body { margin: 0; padding: 0; } + h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; font-weight: normal; font-style: normal; font-size: 100%; line-height: 1; font-family: inherit; } + table { border-collapse: collapse; border-spacing: 0; } + ol, ul { list-style: none; } + q:before, q:after, blockquote:before, blockquote:after { content: ""; } \ No newline at end of file diff --git a/lib/scaffolding.less b/lib/scaffolding.less new file mode 100644 index 0000000000..fc920ab3a4 --- /dev/null +++ b/lib/scaffolding.less @@ -0,0 +1,110 @@ +/* + Scaffolding + Basic and global styles for generating a grid system, structural layout, and page templates +*/ + +/* Baseline Grid System +-------------------------------------------------- */ + +div.row { + .clearfix(); + div.span1 { .columns(1); } + div.span2 { .columns(2); } + div.span3 { .columns(3); } + div.span4 { .columns(4); } + div.span5 { .columns(5); } + div.span6 { .columns(6); } + div.span7 { .columns(7); } + div.span8 { .columns(8); } + div.span9 { .columns(9); } + div.span10 { .columns(10); } + div.span11 { .columns(11); } + div.span12 { .columns(12); } + div.span13 { .columns(13); } + div.span14 { .columns(14); } + div.span15 { .columns(15); } + div.span16 { .columns(16); } +} + + +/* Structural Layout +-------------------------------------------------- */ + +html, body { + background-color: #fff; +} +body { + margin: 0; + .sans-serif(normal,14px,20px); + color: @gray; + text-rendering: optimizeLegibility; + .box-shadow(inset 0 1px 0 #fff); +} + +// Container (centered, fixed-width layouts) +div.container { + width: 940px; + margin: 0 auto; +} + +// Fluid layouts (left aligned, with sidebar, min- & max-width content) +div.container-fluid { + padding: 20px; + .clearfix(); + div.sidebar { + float: left; + width: 220px; + } + div.content { + min-width: 700px; + max-width: 1180px; + margin-left: 240px; + } +} + + +/* Base Styles +-------------------------------------------------- */ + +// Links +a { + color: @link-color; + text-decoration: none; + line-height: inherit; + &:hover { + color: @link-hover-color; + text-decoration: underline; + } +} + +// Buttons +.btn { + .button(); + &.primary { + #gradient > .vertical(@blue, @blue-dark); + color: #fff; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + &:hover { + color: #fff; + } + } + &.large { + font-size: 16px; + line-height: 30px; + .border-radius(6px); + } + &.small { + padding-right: 9px; + padding-left: 9px; + font-size: 11px; + line-height: 16px; + } +} +// Help Firefox not be a douche about adding extra padding to buttons +button.btn, +input[type=submit].btn { + &::-moz-focus-inner { + padding: 0; + border: 0; + } +} diff --git a/lib/tables.less b/lib/tables.less new file mode 100644 index 0000000000..4f9098ce5f --- /dev/null +++ b/lib/tables.less @@ -0,0 +1,121 @@ +/* + Tables +*/ + + +/* Baseline styles +-------------------------------------------------- */ + +table { + width: 100%; + margin-bottom: @baseline; + padding: 0; + text-align: left; + border-collapse: separate; + th, td { + // #translucent > .background(@green, .15); + padding: 10px 10px 9px; + line-height: @baseline; + vertical-align: middle; + border-bottom: 1px solid #ddd; + } + th { + padding-top: 9px; + font-weight: bold; + border-bottom-width: 2px; + } +} + + +/* Zebra-striping +-------------------------------------------------- */ + +// Default zebra-stripe styles (alternating gray and transparent backgrounds) +table.zebra-striped { + tbody { + tr:nth-child(odd) td { + background-color: #f5f5f5; + } + tr:hover td { + background-color: #f1f1f1; + } + } + // Tablesorting styles w/ jQuery plugin + th.header { // For tablesorter tables, make THs have a pointer on hover + cursor: pointer; + padding-right: 20px; + } + th.headerSortUp, + th.headerSortDown { // Style the sorted column headers (THs) + background-image: url(assets/img/tablesorter-indicators.png); + background-position: right -23px; + background-repeat: no-repeat; + background-color: rgba(141,192,219,.25); + .border-radius(3px 3px 0 0); + text-shadow: 0 1px 1px rgba(255,255,255,.75); + } + th.header:hover { // Style the ascending (reverse alphabetical) column header + background-image: url(assets/img/tablesorter-indicators.png); + background-position: right 15px; + background-repeat: no-repeat; + } + th.actions:hover { + background-image: none !important; + } + th.headerSortDown, + th.headerSortDown:hover { // Style the descending (alphabetical) column header + background-position: right -25px; + } + th.headerSortUp, + th.headerSortUp:hover { // Style the ascending (reverse alphabetical) column header + background-position: right -65px; + } + // Blue Table Headings + th.blue { + color: @blue; + border-bottom-color: @blue; + } + th.headerSortUp.blue, th.headerSortDown.blue { + background-color: lighten(@blue, 40%); + } + // Green Table Headings + th.green { + color: @green; + border-bottom-color: @green; + } + th.headerSortUp.green, th.headerSortDown.green { // backround color is 20% of border color + background-color: lighten(@green, 40%); + } + // Red Table Headings + th.red { + color: @red; + border-bottom-color: @red; + } + th.headerSortUp.red, th.headerSortDown.red { // backround color is 20% of border color + background-color: lighten(@red, 50%); + } + // Yellow Table Headings + th.yellow { + color: @yellow; + border-bottom-color: @yellow; + } + th.headerSortUp.yellow, th.headerSortDown.yellow { // backround color is 20% of border color + background-color: lighten(@yellow, 40%); + } + // Orange Table Headings + th.orange { + color: @orange; + border-bottom-color: @orange; + } + th.headerSortUp.orange, th.headerSortDown.orange { // backround color is 20% of border color + background-color: lighten(@orange, 40%); + } + // Purple Table Headings + th.purple { + color: @purple; + border-bottom-color: @purple; + } + th.headerSortUp.purple, th.headerSortDown.purple { // backround color is 20% of border color + background-color: lighten(@purple, 40%); + } +} diff --git a/lib/type.less b/lib/type.less new file mode 100644 index 0000000000..cc1f0826a1 --- /dev/null +++ b/lib/type.less @@ -0,0 +1,256 @@ +/* + Typography + Headings, body text, lists, code, and more for a versatile and durable typography system +*/ + + +/* Body text +-------------------------------------------------- */ + +p { + .font(normal,14px,@baseline); + margin-bottom: @baseline; + small { + font-size: 12px; + color: @gray-light; + } +} + + +/* Headings +-------------------------------------------------- */ + +h1, h2, h3, h4, h5, h6 { + font-weight: 500; + color: @gray-dark; + small { + color: @gray-light; + } +} +h1 { + margin-bottom: @baseline; + font-size: 30px; + line-height: @baseline * 2; + small { + font-size: 18px; + } +} +h2 { + font-size: 24px; + line-height: @baseline * 2; + small { + font-size: 14px; + } +} +h3, h4, h5, h6 { + line-height: @baseline * 2; +} +h3 { + font-size: 18px; + small { + font-size: 14px; + } +} +h4 { + font-size: 16px; + small { + font-size: 12px; + } +} +h5 { + font-size: 14px; +} +h6 { + font-size: 13px; + color: @gray-light; + text-transform: uppercase; +} + + + +/* Colors +-------------------------------------------------- */ + +// Unordered and Ordered lists +ul, ol { + margin: 0 0 @baseline 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +ul { + list-style: disc; +} +ol { + list-style: decimal; +} +li { + line-height: @baseline; + color: @gray; +} +ul.unstyled { + list-style: none; + margin-left: 0; +} + +// Description Lists +dl { + margin-bottom: @baseline; + dt, dd { + line-height: @baseline; + } + dt { + font-weight: bold; + } + dd { + margin-left: @baseline / 2; + } +} + + +/* Misc +-------------------------------------------------- */ + +// Labels +span.label { + background-color: #ccc; + padding: 3px 5px; + font-size: 10px; + font-weight: bold; + color: #fff; + text-shadow: 0 0 1px rgba(0,0,0,.01); + text-transform: uppercase; + .border-radius(3px); + &.expired { + background-color: #f5f5f5; + color: #999; + } + &.pending { + background-color: #48489b; + } + &.declined { + background-color: #9b4848; + } + &.active, + &.approved { + background-color: #59bf59; + } + &.disabled { + background-color: #faa226; + } + &.scheduled { + background-color: #f5f5f5; + color: #59bf59; + text-shadow: 0 1px 0 rgba(255,255,255,.5); + } +} + +// Horizontal rules +hr { + margin: 0 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} + +// Emphasis +strong { + font-style: inherit; + font-weight: bold; + line-height: inherit; +} +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} +.muted { + color: @gray-lighter; +} + +// Blockquotes +blockquote { + margin-bottom: @baseline; + border-left: 5px solid #eee; + padding-left: 15px; + p { + .font(300,14px,@baseline); + margin-bottom: 0; + } + cite { + display: block; + .font(300,12px,@baseline); + color: @gray-light; + &:before { + content: '\2014 \00A0'; + } + } +} + +// Addresses +address { + display: block; + line-height: @baseline; + margin-bottom: @baseline; +} + +// Inline and block code styles +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + .border-radius(3px); +} +code { + background-color: lighten(@orange, 40%); + color: rgba(0,0,0,.75); + padding: 2px 3px; +} +pre { + background-color: #f5f5f5; + display: block; + padding: @baseline - 1; + margin: 0 0 @baseline; + line-height: @baseline; + font-size: 12px; + border: 1px solid rgba(0,0,0,.15); + .border-radius(3px); + white-space: pre-wrap; +} +// Code block styling from Chili +pre.css, pre.html { + background-color: #fff; +} +pre ol { + background-color: lighten(@orange, 42%); + list-style: decimal; + margin: (@baseline - 1) * -1; + padding-left: 59px; + .border-radius(2px); + li { + background-color: #fff; + padding: 0 10px; + border-left: 1px solid rgba(0,0,0,.1); + border-left-color: lighten(@orange, 35%); + font-size: 11px; + line-height: @baseline; + color: @gray-light; + text-shadow: 0 1px 1px rgba(255,255,255,.5); + word-wrap: break-word; + &:hover { + } + &:first-child { + padding-top: 9px; + } + &:last-child { + padding-bottom: 9px; + } + } +} +// Language Styles +span.html__tag_start, +span.html__tag_end { color: #277ac1; font-weight: normal; } +span.html__attr_name { color: #d78b41; } +span.html__attr_value { color: #de4a3f; }