diff --git a/app/assets/images/grey_wash_wall.png b/app/assets/images/grey_wash_wall.png new file mode 100644 index 0000000..d54e889 Binary files /dev/null and b/app/assets/images/grey_wash_wall.png differ diff --git a/app/assets/images/old_map.png b/app/assets/images/old_map.png new file mode 100644 index 0000000..eb2373b Binary files /dev/null and b/app/assets/images/old_map.png differ diff --git a/app/assets/images/old_mathematics.png b/app/assets/images/old_mathematics.png new file mode 100644 index 0000000..95285ff Binary files /dev/null and b/app/assets/images/old_mathematics.png differ diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index d7256d2..e5258fa 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -16,4 +16,5 @@ //= require bootstrap-sprockets //= require cocoon //= require typeahead +//= require autosize //= require_tree . diff --git a/app/assets/javascripts/recipes.js b/app/assets/javascripts/recipes.js index cad7acf..308ea00 100644 --- a/app/assets/javascripts/recipes.js +++ b/app/assets/javascripts/recipes.js @@ -1,13 +1,26 @@ (function($) { function reorder($container) { - console.log($container); $container.find("div.nested-fields").each(function(idx, editor) { var $editor = $(editor); $editor.find('input.sort_order').val(idx + 1).trigger("changed"); }) } + function initializeStepEditor($container) { + // $container is either an element that contains many editors, or a single editor. + var $editors = $container.find("textarea.step").closest(".step-editor"); + + $editors.each(function(idx, elem) { + console.log('doing stuff!!!'); + var $editor = $(elem); + var $step = $editor.find("textarea.step"); + autosize($step); + + setTimeout(function() { autosize.update($step); }, 250); + }); + } + function initializeIngredientEditor($container, ingredientSearchEngine) { // $container is either an element that contains many editors, or a single editor. var $editors = $container.find(".ingredient-typeahead").closest(".nested-fields"); @@ -94,14 +107,19 @@ } }); - $("#step-list") + var $stepList = $("#step-list"); + + initializeStepEditor($stepList); + + $stepList .on("cocoon:after-insert", function(e, item) { reorder($(this)); + initializeStepEditor(item); }) .on("cocoon:after-remove", function(e, item) { reorder($(this)); }) - .on('changed', 'input.sort-order', function() { + .on('changed', 'input.sort_order', function() { var $this = $(this); var $span = $this.closest(".nested-fields").find(".sort-order-display"); $span.html($this.val()); @@ -120,17 +138,61 @@ reorder($ingredientList); }) .on("typeahead:change", function(evt, value) { - console.log("changed"); ingredientNameChange($(evt.target), ingredientSearchEngine); }) .on("typeahead:select", function(evt, value) { - console.log("selected"); ingredientItemPicked($(evt.target), value); }) .on("typeahead:autocomplete", function(evt, value) { - console.log("autocomplete"); ingredientItemPicked($(evt.target), value); + }) + .on("click", "button.ingredient_convert_btn", function(evt) { + }); + + $('#convert_modal') + .on('show.bs.modal', function (event) { + var $button = $(event.relatedTarget); + var $modal = $(this); + + var $editor = $button.closest(".ingredient-editor"); + + $modal.data('ingredient-editor', $editor); + + var $quantity = $editor.find("input.quantity"); + var $units = $editor.find("input.units"); + var $density = $editor.find("input.custom_density"); + + var $modalQuantity = $modal.find("input.quantity"); + var $modalUnits = $modal.find("input.units"); + var $modalDensity = $modal.find("input.density"); + + $modalQuantity.val($quantity.val()); + $modalUnits.val($units.val()); + $modalDensity.val($density.val()); + }) + .on("ajax:success", "form", function(evt, data, status, xhr) { + var $modal = $("#convert_modal"); + var $editor = $modal.data('ingredient-editor'); + + if (data.success) { + var $quantity = $editor.find("input.quantity"); + var $units = $editor.find("input.units"); + + var $modalOutUnits = $modal.find("input.output_units"); + + $quantity.val(data.output_quantity); + if ($modalOutUnits.val().length) { + $units.val($modalOutUnits.val()); + } + + $modal.modal('hide'); + } else { + + } + + $("#modal_form_container").replaceWith($(data.form_html)); + }); }); diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index dc3b10f..58c5e3e 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -30,6 +30,11 @@ html { body { /* Margin bottom by footer height */ margin-bottom: $footer_height; + background: image_url("old_mathematics.png"); +} + +#main_container { + background: white; } .footer { diff --git a/app/assets/stylesheets/recipes.scss b/app/assets/stylesheets/recipes.scss index 55878ba..8294782 100644 --- a/app/assets/stylesheets/recipes.scss +++ b/app/assets/stylesheets/recipes.scss @@ -3,6 +3,26 @@ // You can use Sass (SCSS) here: http://sass-lang.com/ @mixin editor { + + @extend .well; + @extend .well-sm; + + margin-bottom: 10px; + padding-top: 4px; + + .form-group { + margin-bottom: 10px; + } + + .remove-button { + @extend .btn; + @extend .btn-danger; + @extend .btn-sm; + + position: absolute; + top: 0; + right: 9px; + } } div.ingredient-editor { @@ -11,6 +31,19 @@ div.ingredient-editor { div.step-editor { @include editor; + + padding-bottom: 4px; + + .form-group { + margin-bottom: 0; + } + + .sort-order-display { + font-size: 120%; + font-weight: normal; + line-height: 50px; + padding-left: 15px; + } } div#ingredient-list, div#step-list { diff --git a/app/controllers/ingredients_controller.rb b/app/controllers/ingredients_controller.rb index 788deeb..7722edf 100644 --- a/app/controllers/ingredients_controller.rb +++ b/app/controllers/ingredients_controller.rb @@ -67,10 +67,14 @@ class IngredientsController < ApplicationController end def convert - quantity = params[:quantity] - unit = params[:unit] - factor = params[:factor] - output_unit = params[:output_unit] + @conversion = Conversion.new(conversion_params) + + if @conversion.valid? + @output_quantity = @conversion.output_quantity + @conversion = Conversion.new + else + @output_quantity = '' + end end private @@ -83,4 +87,8 @@ class IngredientsController < ApplicationController def ingredient_params params.require(:ingredient).permit(:name, :density, :notes) end + + def conversion_params + params.require(:conversion).permit(:input_quantity, :input_units, :scale, :output_units, :density) + end end diff --git a/app/models/conversion.rb b/app/models/conversion.rb new file mode 100644 index 0000000..4e99d99 --- /dev/null +++ b/app/models/conversion.rb @@ -0,0 +1,35 @@ +class Conversion + include ActiveModel::Validations + include ActiveModel::Conversion + extend ActiveModel::Naming + + attr_accessor :input_quantity, :input_units, :scale, :output_units, :density + attr_reader :output_quantity + + validates :input_quantity, presence: true + validate :check_conversion, :if => Proc.new { |object| object.errors.empty? } + + def initialize(attrs = nil) + if attrs + attrs.each do |k, v| + send("#{k}=", v) + end + end + + @output_quantity = nil + end + + def check_conversion + begin + scale = self.scale.blank? ? '1' : self.scale + density = self.density.blank? ? nil : self.density + @output_quantity = UnitConversion.convert(input_quantity, scale, input_units, output_units, density) + rescue UnitConversion::UnparseableUnitError => err + errors[:base] << "Invalid Data: #{err.message}" + end + end + + def persisted? + false + end +end \ No newline at end of file diff --git a/app/models/unit_conversion.rb b/app/models/unit_conversion.rb index 3e2b1f1..57e66b5 100644 --- a/app/models/unit_conversion.rb +++ b/app/models/unit_conversion.rb @@ -99,7 +99,7 @@ module UnitConversion input_unit = normalize_unit_names(input_unit) unless input_unit.nil? output_unit = normalize_unit_names(output_unit) unless output_unit.nil? - if input_unit && output_unit && input_unit != output_unit + if input_unit.present? && output_unit.present? && input_unit != output_unit in_unit = Unitwise(1, input_unit) out_unit = Unitwise(1, output_unit) unit = Unitwise(converted, input_unit) @@ -116,7 +116,7 @@ module UnitConversion end if value.is_a? Rational - rational_val = converted.to_r.rationalize(0.001) + rational_val = converted.to_r.rationalize(0.01) if rational_val.denominator == 1 rational_val.to_i.to_s elsif rational_val.denominator < rational_val.numerator.abs diff --git a/app/views/ingredients/convert.json.jbuilder b/app/views/ingredients/convert.json.jbuilder new file mode 100644 index 0000000..a8ed4ba --- /dev/null +++ b/app/views/ingredients/convert.json.jbuilder @@ -0,0 +1,4 @@ + +json.success !@output_quantity.blank? +json.output_quantity @output_quantity +json.form_html render(partial: 'recipes/editor/conversion_form', formats: [:html]) \ No newline at end of file diff --git a/app/views/ingredients/index.html.erb b/app/views/ingredients/index.html.erb index f1811cb..ece143f 100644 --- a/app/views/ingredients/index.html.erb +++ b/app/views/ingredients/index.html.erb @@ -1,7 +1,7 @@
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 34e8dc5..82d51ee 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -35,7 +35,7 @@ <%= render partial: 'layouts/flash_messages' %> -
+
<%= yield %> diff --git a/app/views/recipes/_form.html.erb b/app/views/recipes/_form.html.erb index cb36117..753bb65 100644 --- a/app/views/recipes/_form.html.erb +++ b/app/views/recipes/_form.html.erb @@ -2,21 +2,28 @@ <%= render partial: 'shared/error_list', locals: {model: @recipe} %> -
- <%= f.label :name, class: "control-label" %> - <%= f.text_field :name, class: 'form-control' %> +
+
+
+ <%= f.label :name, class: "control-label" %> + <%= f.text_field :name, class: 'form-control' %> +
+
+ +
+
+ <%= f.label :source, class: "control-label" %> + <%= f.text_field :source, class: 'form-control' %> +
+
+
<%= f.label :description, class: "control-label" %> <%= f.text_area :description, class: 'form-control' %>
-
- <%= f.label :source, class: "control-label" %> - <%= f.text_field :source, class: 'form-control' %> -
-
@@ -63,3 +70,26 @@ <%= f.submit class: 'btn btn-primary' %>
<% end %> + + + \ No newline at end of file diff --git a/app/views/recipes/editor/_conversion_form.erb b/app/views/recipes/editor/_conversion_form.erb new file mode 100644 index 0000000..9a232d5 --- /dev/null +++ b/app/views/recipes/editor/_conversion_form.erb @@ -0,0 +1,48 @@ + + + + diff --git a/app/views/recipes/editor/_ingredient.html.erb b/app/views/recipes/editor/_ingredient.html.erb index 1493b6e..47829fd 100644 --- a/app/views/recipes/editor/_ingredient.html.erb +++ b/app/views/recipes/editor/_ingredient.html.erb @@ -1,40 +1,50 @@ -
-
+
+
-
- -
- <%= f.label :custom_name, "Name" %> - <%= f.text_field :custom_name, class: 'form-control ingredient-typeahead custom_name' %> -
+
-
-
- <%= f.label :quantity %> - <%= f.text_field :quantity, class: 'form-control' %> + +
+
+ <%= f.label :custom_name, "Name", class: "control-label" %> +
+ <%= f.text_field :custom_name, class: 'form-control ingredient-typeahead custom_name' %> + + + +
-
+
- <%= f.label :units %> - <%= f.text_field :units, class: 'form-control' %> + <%= f.label :quantity, class: "control-label" %> + <%= f.text_field :quantity, class: 'form-control quantity' %>
-
+
- <%= f.label :custom_density, "Density" %> + <%= f.label :units, class: "control-label" %> + <%= f.text_field :units, class: 'form-control units' %> +
+
+ +
+
+ <%= f.label :custom_density, "Density", class: "control-label" %> <%= f.text_field :custom_density, class: 'form-control custom_density' %>
-
- <%= link_to_remove_association f, class: 'btn btn-danger' do %> +
+ <%= link_to_remove_association f, class: 'remove-button' do %> <% end %>
@@ -42,5 +52,5 @@ <%= f.hidden_field :ingredient_id, class: 'ingredient_id' %> <%= f.hidden_field :sort_order, class: 'sort_order' %> -
+
\ No newline at end of file diff --git a/app/views/recipes/editor/_step.html.erb b/app/views/recipes/editor/_step.html.erb index 9554c5b..533ff90 100644 --- a/app/views/recipes/editor/_step.html.erb +++ b/app/views/recipes/editor/_step.html.erb @@ -1,19 +1,19 @@ -
-
+
+
-
+
<%= f.object ? f.object.sort_order : '' %>
-
+
- <%= f.text_area :step, class: 'form-control' %> + <%= f.text_area :step, class: 'form-control step' %>
-
- <%= link_to_remove_association f, class: 'btn btn-danger' do %> +
+ <%= link_to_remove_association f, class: 'remove-button' do %> <% end %>
@@ -21,5 +21,5 @@ <%= f.hidden_field :sort_order, class: 'sort_order' %> -
+
\ No newline at end of file diff --git a/app/views/recipes/index.html.erb b/app/views/recipes/index.html.erb index 1d2f58b..ae21cbd 100644 --- a/app/views/recipes/index.html.erb +++ b/app/views/recipes/index.html.erb @@ -2,7 +2,7 @@
<% if @recipes.empty? %> diff --git a/config/routes.rb b/config/routes.rb index 35fcf0a..3f89dee 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,6 +7,7 @@ Rails.application.routes.draw do constraints format: 'json' do get :search get :prefetch + get :convert end end end diff --git a/spec/models/unit_conversion_spec.rb b/spec/models/unit_conversion_spec.rb index a84b726..a00f6cc 100644 --- a/spec/models/unit_conversion_spec.rb +++ b/spec/models/unit_conversion_spec.rb @@ -45,6 +45,10 @@ RSpec.describe UnitConversion do it 'scales odd units without conversion' do expect(UnitConversion.convert('1/2', '2', 'slices', 'slices')).to eq '1' expect(UnitConversion.convert('4', '1/8', nil, nil)).to eq '1/2' + expect(UnitConversion.convert('4', '1/8', 'slices', nil)).to eq '1/2' + expect(UnitConversion.convert('4', '1/8', nil, 'slices')).to eq '1/2' + expect(UnitConversion.convert('4', '1/8', 'slices', '')).to eq '1/2' + expect(UnitConversion.convert('4', '1/8', '', 'slices')).to eq '1/2' end it 'converts and scales' do @@ -148,7 +152,9 @@ RSpec.describe UnitConversion do 'cups' => 'cup', 'pints' => 'pint', 'g' => 'gram', - 'grams' => 'gram' + 'grams' => 'gram', + 'Grams' => 'gram', + 'Tbsp' => 'tablespoon' } data.each do |input, output| diff --git a/vendor/assets/javascripts/autosize.js b/vendor/assets/javascripts/autosize.js new file mode 100644 index 0000000..cfa49e7 --- /dev/null +++ b/vendor/assets/javascripts/autosize.js @@ -0,0 +1,243 @@ +/*! + Autosize 3.0.14 + license: MIT + http://www.jacklmoore.com/autosize +*/ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod); + global.autosize = mod.exports; + } +})(this, function (exports, module) { + 'use strict'; + + var set = typeof Set === 'function' ? new Set() : (function () { + var list = []; + + return { + has: function has(key) { + return Boolean(list.indexOf(key) > -1); + }, + add: function add(key) { + list.push(key); + }, + 'delete': function _delete(key) { + list.splice(list.indexOf(key), 1); + } }; + })(); + + function assign(ta) { + var _ref = arguments[1] === undefined ? {} : arguments[1]; + + var _ref$setOverflowX = _ref.setOverflowX; + var setOverflowX = _ref$setOverflowX === undefined ? true : _ref$setOverflowX; + var _ref$setOverflowY = _ref.setOverflowY; + var setOverflowY = _ref$setOverflowY === undefined ? true : _ref$setOverflowY; + + if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has(ta)) return; + + var heightOffset = null; + var overflowY = null; + var clientWidth = ta.clientWidth; + + function init() { + var style = window.getComputedStyle(ta, null); + + overflowY = style.overflowY; + + if (style.resize === 'vertical') { + ta.style.resize = 'none'; + } else if (style.resize === 'both') { + ta.style.resize = 'horizontal'; + } + + if (style.boxSizing === 'content-box') { + heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)); + } else { + heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth); + } + // Fix when a textarea is not on document body and heightOffset is Not a Number + if (isNaN(heightOffset)) { + heightOffset = 0; + } + + update(); + } + + function changeOverflow(value) { + { + // Chrome/Safari-specific fix: + // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space + // made available by removing the scrollbar. The following forces the necessary text reflow. + var width = ta.style.width; + ta.style.width = '0px'; + // Force reflow: + /* jshint ignore:start */ + ta.offsetWidth; + /* jshint ignore:end */ + ta.style.width = width; + } + + overflowY = value; + + if (setOverflowY) { + ta.style.overflowY = value; + } + + resize(); + } + + function resize() { + var htmlTop = window.pageYOffset; + var bodyTop = document.body.scrollTop; + var originalHeight = ta.style.height; + + ta.style.height = 'auto'; + + var endHeight = ta.scrollHeight + heightOffset; + + if (ta.scrollHeight === 0) { + // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM. + ta.style.height = originalHeight; + return; + } + + ta.style.height = endHeight + 'px'; + + // used to check if an update is actually necessary on window.resize + clientWidth = ta.clientWidth; + + // prevents scroll-position jumping + document.documentElement.scrollTop = htmlTop; + document.body.scrollTop = bodyTop; + } + + function update() { + var startHeight = ta.style.height; + + resize(); + + var style = window.getComputedStyle(ta, null); + + if (style.height !== ta.style.height) { + if (overflowY !== 'visible') { + changeOverflow('visible'); + } + } else { + if (overflowY !== 'hidden') { + changeOverflow('hidden'); + } + } + + if (startHeight !== ta.style.height) { + var evt = document.createEvent('Event'); + evt.initEvent('autosize:resized', true, false); + ta.dispatchEvent(evt); + } + } + + var pageResize = function pageResize() { + if (ta.clientWidth !== clientWidth) { + update(); + } + }; + + var destroy = (function (style) { + window.removeEventListener('resize', pageResize, false); + ta.removeEventListener('input', update, false); + ta.removeEventListener('keyup', update, false); + ta.removeEventListener('autosize:destroy', destroy, false); + ta.removeEventListener('autosize:update', update, false); + set['delete'](ta); + + Object.keys(style).forEach(function (key) { + ta.style[key] = style[key]; + }); + }).bind(ta, { + height: ta.style.height, + resize: ta.style.resize, + overflowY: ta.style.overflowY, + overflowX: ta.style.overflowX, + wordWrap: ta.style.wordWrap }); + + ta.addEventListener('autosize:destroy', destroy, false); + + // IE9 does not fire onpropertychange or oninput for deletions, + // so binding to onkeyup to catch most of those events. + // There is no way that I know of to detect something like 'cut' in IE9. + if ('onpropertychange' in ta && 'oninput' in ta) { + ta.addEventListener('keyup', update, false); + } + + window.addEventListener('resize', pageResize, false); + ta.addEventListener('input', update, false); + ta.addEventListener('autosize:update', update, false); + set.add(ta); + + if (setOverflowX) { + ta.style.overflowX = 'hidden'; + ta.style.wordWrap = 'break-word'; + } + + init(); + } + + function destroy(ta) { + if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return; + var evt = document.createEvent('Event'); + evt.initEvent('autosize:destroy', true, false); + ta.dispatchEvent(evt); + } + + function update(ta) { + if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return; + var evt = document.createEvent('Event'); + evt.initEvent('autosize:update', true, false); + ta.dispatchEvent(evt); + } + + var autosize = null; + + // Do nothing in Node.js environment and IE8 (or lower) + if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') { + autosize = function (el) { + return el; + }; + autosize.destroy = function (el) { + return el; + }; + autosize.update = function (el) { + return el; + }; + } else { + autosize = function (el, options) { + if (el) { + Array.prototype.forEach.call(el.length ? el : [el], function (x) { + return assign(x, options); + }); + } + return el; + }; + autosize.destroy = function (el) { + if (el) { + Array.prototype.forEach.call(el.length ? el : [el], destroy); + } + return el; + }; + autosize.update = function (el) { + if (el) { + Array.prototype.forEach.call(el.length ? el : [el], update); + } + return el; + }; + } + + module.exports = autosize; +}); \ No newline at end of file diff --git a/vendor/assets/stylesheets/paper/_bootswatch.scss b/vendor/assets/stylesheets/paper/_bootswatch.scss new file mode 100644 index 0000000..e1cc544 --- /dev/null +++ b/vendor/assets/stylesheets/paper/_bootswatch.scss @@ -0,0 +1,611 @@ +// Paper 3.3.5 +// Bootswatch +// ----------------------------------------------------- + +$web-font-path: "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" !default; +@import url($web-font-path); + +// Navbar ===================================================================== + +.navbar { + border: none; + @include box-shadow(0 1px 2px rgba(0,0,0,.3)); + + &-brand { + font-size: 24px; + } + + &-inverse { + .navbar-form { + + input[type=text], + input[type=password] { + color: #fff; + @include box-shadow(inset 0 -1px 0 $navbar-inverse-link-color); + @include placeholder($navbar-inverse-link-color); + + &:focus { + @include box-shadow(inset 0 -2px 0 #fff); + } + } + } + } +} + +// Buttons ==================================================================== + +@mixin btn($class,$bg){ + .btn-#{$class} { + background-size: 200%; + background-position: 50%; + + &:focus { + background-color: $bg; + } + + &:hover, + &:active:hover { + background-color: darken($bg, 6%); + } + + &:active { + background-color: darken($bg, 12%); + @include gradient-radial(darken($bg, 12%) 10%, $bg 11%); + background-size: 1000%; + @include box-shadow(2px 2px 4px rgba(0,0,0,.4)); + } + } +} + +@include btn(default,$btn-default-bg); +@include btn(primary,$btn-primary-bg); +@include btn(success,$btn-success-bg); +@include btn(info,$btn-info-bg); +@include btn(warning,$btn-warning-bg); +@include btn(danger,$btn-danger-bg); +@include btn(link,#fff); + +.btn { + text-transform: uppercase; + border: none; + @include box-shadow(1px 1px 4px rgba(0,0,0,.4)); + @include transition(all 0.4s); + + &-link { + border-radius: $btn-border-radius-base; + @include box-shadow(none); + color: $btn-default-color; + + &:hover, + &:focus { + @include box-shadow(none); + color: $btn-default-color; + text-decoration: none; + } + } + + &-default { + + &.disabled { + background-color: rgba(0, 0, 0, 0.1); + color: rgba(0, 0, 0, 0.4); + opacity: 1; + } + } +} + +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: 0; + } + + &-vertical { + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: 0; + } + } +} + +// Typography ================================================================= + +body { + -webkit-font-smoothing: antialiased; + letter-spacing: .1px; +} + +p { + margin: 0 0 1em; +} + +input, +button { + -webkit-font-smoothing: antialiased; + letter-spacing: .1px; +} + +a { + @include transition(all 0.2s); +} + +// Tables ===================================================================== + +.table-hover { + > tbody > tr, + > tbody > tr > th, + > tbody > tr > td { + @include transition(all 0.2s); + } +} + +// Forms ====================================================================== + +label { + font-weight: normal; +} + +textarea, +textarea.form-control, +input.form-control, +input[type=text], +input[type=password], +input[type=email], +input[type=number], +[type=text].form-control, +[type=password].form-control, +[type=email].form-control, +[type=tel].form-control, +[contenteditable].form-control { + padding: 0; + border: none; + border-radius: 0; + -webkit-appearance: none; + @include box-shadow(inset 0 -1px 0 #ddd); + font-size: 16px; + + &:focus { + @include box-shadow(inset 0 -2px 0 $brand-primary); + } + + &[disabled], + &[readonly] { + @include box-shadow(none); + border-bottom: 1px dotted #ddd; + } + + &.input { + &-sm { + font-size: $font-size-small; + } + + &-lg { + font-size: $font-size-large; + } + } +} + +select, +select.form-control { + border: 0; + border-radius: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + padding-left: 0; + padding-right: 0\9; // remove padding for < ie9 since default arrow can't be removed + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=); + background-size: 13px; + background-repeat: no-repeat; + background-position: right center; + @include box-shadow(inset 0 -1px 0 #ddd); + font-size: 16px; + line-height: 1.5; + + &::-ms-expand { + display: none; + } + + &.input { + &-sm { + font-size: $font-size-small; + } + + &-lg { + font-size: $font-size-large; + } + } + + &:focus { + @include box-shadow(inset 0 -2px 0 $brand-primary); + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=); + } + + &[multiple] { + background: none; + } +} + +.radio, +.radio-inline, +.checkbox, +.checkbox-inline { + label { + padding-left: 25px; + } + + input[type="radio"], + input[type="checkbox"] { + margin-left: -25px; + } +} + +input[type="radio"], +.radio input[type="radio"], +.radio-inline input[type="radio"] { + position: relative; + margin-top: 6px; + margin-right: 4px; + vertical-align: top; + border: none; + background-color: transparent; + -webkit-appearance: none; + appearance: none; + cursor: pointer; + + &:focus { + outline: none; + } + + &:before, + &:after { + content: ""; + display: block; + width: 18px; + height: 18px; + border-radius: 50%; + @include transition(240ms); + } + + &:before { + position: absolute; + left: 0; + top: -3px; + background-color: $brand-primary; + @include scale(0); + } + + &:after { + position: relative; + top: -3px; + border: 2px solid $gray; + } + + &:checked:before { + @include scale(0.5); + } + + &:disabled:checked:before { + background-color: $gray-light; + } + + &:checked:after { + border-color: $brand-primary; + } + + &:disabled:after, + &:disabled:checked:after { + border-color: $gray-light; + } +} + +input[type="checkbox"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: relative; + border: none; + margin-bottom: -4px; + -webkit-appearance: none; + appearance: none; + cursor: pointer; + + &:focus { + outline: none; + } + + &:focus:after { + border-color: $brand-primary; + } + + &:after { + content: ""; + display: block; + width: 18px; + height: 18px; + margin-top: -2px; + margin-right: 5px; + border: 2px solid $gray; + border-radius: 2px; + @include transition(240ms); + } + + &:checked:before { + content: ""; + position: absolute; + top: 0; + left: 6px; + display: table; + width: 6px; + height: 12px; + border: 2px solid #fff; + border-top-width: 0; + border-left-width: 0; + @include rotate(45deg); + } + + &:checked:after { + background-color: $brand-primary; + border-color: $brand-primary; + } + + &:disabled:after { + border-color: $gray-light; + } + + &:disabled:checked:after { + background-color: $gray-light; + border-color: transparent; + } +} + +.has-warning { + input:not([type=checkbox]), + .form-control, + input.form-control[readonly], + input[type=text][readonly], + [type=text].form-control[readonly], + input:not([type=checkbox]):focus, + .form-control:focus { + border-bottom: none; + @include box-shadow(inset 0 -2px 0 $brand-warning); + } +} + +.has-error { + input:not([type=checkbox]), + .form-control, + input.form-control[readonly], + input[type=text][readonly], + [type=text].form-control[readonly], + input:not([type=checkbox]):focus, + .form-control:focus { + border-bottom: none; + @include box-shadow(inset 0 -2px 0 $brand-danger); + } +} + +.has-success { + input:not([type=checkbox]), + .form-control, + input.form-control[readonly], + input[type=text][readonly], + [type=text].form-control[readonly], + input:not([type=checkbox]):focus, + .form-control:focus { + border-bottom: none; + @include box-shadow(inset 0 -2px 0 $brand-success); + } +} + +// Remove the Bootstrap feedback styles for input addons +.input-group-addon { + .has-warning &, .has-error &, .has-success & { + color: $input-color; + border-color: $input-group-addon-border-color; + background-color: $input-group-addon-bg; + } +} + +// Navs ======================================================================= + +.nav-tabs { + > li > a, + > li > a:focus { + margin-right: 0; + background-color: transparent; + border: none; + color: $navbar-default-link-color; + @include box-shadow(inset 0 -1px 0 #ddd); + @include transition(all 0.2s); + + &:hover { + background-color: transparent; + @include box-shadow(inset 0 -2px 0 $brand-primary); + color: $brand-primary; + } + } + + & > li.active > a, + & > li.active > a:focus { + border: none; + @include box-shadow(inset 0 -2px 0 $brand-primary); + color: $brand-primary; + + &:hover { + border: none; + color: $brand-primary; + } + } + + & > li.disabled > a { + @include box-shadow(inset 0 -1px 0 #ddd); + } + + &.nav-justified { + + & > li > a, + & > li > a:hover, + & > li > a:focus, + & > .active > a, + & > .active > a:hover, + & > .active > a:focus { + border: none; + } + } + + .dropdown-menu { + margin-top: 0; + } +} + +.dropdown-menu { + margin-top: 0; + border: none; + @include box-shadow(0 1px 4px rgba(0,0,0,.3)); +} + +// Indicators ================================================================= + +.alert { + border: none; + color: #fff; + + &-success { + background-color: $brand-success; + } + + &-info { + background-color: $brand-info; + } + + &-warning { + background-color: $brand-warning; + } + + &-danger { + background-color: $brand-danger; + } + + a:not(.close), + .alert-link { + color: #fff; + font-weight: bold; + } + + .close { + color: #fff; + } +} + +.badge { + padding: 4px 6px 4px; +} + +.progress { + position: relative; + z-index: 1; + height: 6px; + border-radius: 0; + + @include box-shadow(none); + + &-bar { + @include box-shadow(none); + + &:last-child { + border-radius: 0 3px 3px 0; + } + + &:last-child { + &:before { + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + left: 0; + right: 0; + z-index: -1; + background-color: lighten($progress-bar-bg, 35%); + } + } + + &-success:last-child.progress-bar:before { + background-color: lighten($brand-success, 35%); + } + + &-info:last-child.progress-bar:before { + background-color: lighten($brand-info, 45%); + } + &-warning:last-child.progress-bar:before { + background-color: lighten($brand-warning, 35%); + } + + &-danger:last-child.progress-bar:before { + background-color: lighten($brand-danger, 25%); + } + } +} + +// Progress bars ============================================================== + +// Containers ================================================================= + +.close { + font-size: 34px; + font-weight: 300; + line-height: 24px; + opacity: 0.6; + @include transition(all 0.2s); + + &:hover { + opacity: 1; + } +} + +.list-group { + + &-item { + padding: 15px; + } + + &-item-text { + color: $gray-light; + } +} + +.well { + border-radius: 0; + @include box-shadow(none); +} + +.panel { + border: none; + border-radius: 2px; + @include box-shadow(0 1px 4px rgba(0,0,0,.3)); + + &-heading { + border-bottom: none; + } + + &-footer { + border-top: none; + } +} + +.popover { + border: none; + @include box-shadow(0 1px 4px rgba(0,0,0,.3)); +} + +.carousel { + &-caption { + h1, h2, h3, h4, h5, h6 { + color: inherit; + } + } +} diff --git a/vendor/assets/stylesheets/paper/_variables.scss b/vendor/assets/stylesheets/paper/_variables.scss new file mode 100644 index 0000000..337712d --- /dev/null +++ b/vendor/assets/stylesheets/paper/_variables.scss @@ -0,0 +1,870 @@ +$bootstrap-sass-asset-helper: false !default; +// Paper 3.3.6 +// Variables +// -------------------------------------------------- + + +//== Colors +// +//## Gray and brand colors for use across Bootstrap. + +$gray-base: #000 !default; +$gray-darker: lighten($gray-base, 13.5%) !default; // #222 +$gray-dark: #212121 !default; +$gray: #666 !default; +$gray-light: #bbb !default; +$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee + +$brand-primary: #2196F3 !default; +$brand-success: #4CAF50 !default; +$brand-info: #9C27B0 !default; +$brand-warning: #ff9800 !default; +$brand-danger: #e51c23 !default; + + +//== Scaffolding +// +//## Settings for some of the most global styles. + +//** Background color for ``. +$body-bg: #fff !default; +//** Global text color on ``. +$text-color: $gray !default; + +//** Global textual link color. +$link-color: $brand-primary !default; +//** Link hover color set via `darken()` function. +$link-hover-color: darken($link-color, 15%) !default; +//** Link hover decoration. +$link-hover-decoration: underline !default; + + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +$font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif !default; +$font-family-serif: Georgia, "Times New Roman", Times, serif !default; +//** Default monospace fonts for ``, ``, and `
`.
+$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
+$font-family-base:        $font-family-sans-serif !default;
+
+$font-size-base:          13px !default;
+$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
+
+$font-size-h1:            56px !default;
+$font-size-h2:            45px !default;
+$font-size-h3:            34px !default;
+$font-size-h4:            24px !default;
+$font-size-h5:            20px !default;
+$font-size-h6:            14px !default;
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base:        1.846 !default; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
+
+//** By default, this inherits from the ``.
+$headings-font-family:    inherit !default;
+$headings-font-weight:    400 !default;
+$headings-line-height:    1.1 !default;
+$headings-color:          #444 !default;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
+//** File name for all font files.
+$icon-font-name:          "glyphicons-halflings-regular" !default;
+//** Element ID within SVG icon file.
+$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+$padding-base-vertical:     6px !default;
+$padding-base-horizontal:   16px !default;
+
+$padding-large-vertical:    10px !default;
+$padding-large-horizontal:  16px !default;
+
+$padding-small-vertical:    5px !default;
+$padding-small-horizontal:  10px !default;
+
+$padding-xs-vertical:       1px !default;
+$padding-xs-horizontal:     5px !default;
+
+$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
+$line-height-small:         1.5 !default;
+
+$border-radius-base:        3px !default;
+$border-radius-large:       3px !default;
+$border-radius-small:       3px !default;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color:    #fff !default;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg:       $brand-primary !default;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+$caret-width-base:          4px !default;
+//** Carets increase slightly in size for larger components.
+$caret-width-large:         5px !default;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `
`s and ``s. +$table-cell-padding: 8px !default; +//** Padding for cells in `.table-condensed`. +$table-condensed-cell-padding: 5px !default; + +//** Default background color used for all tables. +$table-bg: transparent !default; +//** Background color used for `.table-striped`. +$table-bg-accent: #f9f9f9 !default; +//** Background color used for `.table-hover`. +$table-bg-hover: #f5f5f5 !default; +$table-bg-active: $table-bg-hover !default; + +//** Border color for table and cell borders. +$table-border-color: #ddd !default; + + +//== Buttons +// +//## For each of Bootstrap's buttons, define text, background and border color. + +$btn-font-weight: normal !default; + +$btn-default-color: #444 !default; +$btn-default-bg: #fff !default; +$btn-default-border: transparent !default; + +$btn-primary-color: #fff !default; +$btn-primary-bg: $brand-primary !default; +$btn-primary-border: transparent !default; + +$btn-success-color: #fff !default; +$btn-success-bg: $brand-success !default; +$btn-success-border: transparent !default; + +$btn-info-color: #fff !default; +$btn-info-bg: $brand-info !default; +$btn-info-border: transparent !default; + +$btn-warning-color: #fff !default; +$btn-warning-bg: $brand-warning !default; +$btn-warning-border: transparent !default; + +$btn-danger-color: #fff !default; +$btn-danger-bg: $brand-danger !default; +$btn-danger-border: transparent !default; + +$btn-link-disabled-color: $gray-light !default; + +// Allows for customizing button radius independently from global border radius +$btn-border-radius-base: $border-radius-base !default; +$btn-border-radius-large: $border-radius-large !default; +$btn-border-radius-small: $border-radius-small !default; + + +//== Forms +// +//## + +//** `` background color +$input-bg: transparent !default; +//** `` background color +$input-bg-disabled: transparent !default; + +//** Text color for ``s +$input-color: $gray !default; +//** `` border color +$input-border: transparent !default; + +// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4 +//** Default `.form-control` border radius +// This has no effect on ``s in CSS. +$input-border-radius: $border-radius-base !default; +//** Large `.form-control` border radius +$input-border-radius-large: $border-radius-large !default; +//** Small `.form-control` border radius +$input-border-radius-small: $border-radius-small !default; + +//** Border color for inputs on focus +$input-border-focus: #66afe9 !default; + +//** Placeholder text color +$input-color-placeholder: $gray-light !default; + +//** Default `.form-control` height +$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default; +//** Large `.form-control` height +$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default; +//** Small `.form-control` height +$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default; + +//** `.form-group` margin +$form-group-margin-bottom: 15px !default; + +$legend-color: $gray-dark !default; +$legend-border-color: #e5e5e5 !default; + +//** Background color for textual input addons +$input-group-addon-bg: transparent !default; +//** Border color for textual input addons +$input-group-addon-border-color: $input-border !default; + +//** Disabled cursor for form controls and buttons. +$cursor-disabled: not-allowed !default; + + +//== Dropdowns +// +//## Dropdown menu container and contents. + +//** Background for the dropdown menu. +$dropdown-bg: #fff !default; +//** Dropdown menu `border-color`. +$dropdown-border: rgba(0,0,0,.15) !default; +//** Dropdown menu `border-color` **for IE8**. +$dropdown-fallback-border: #ccc !default; +//** Divider color for between dropdown items. +$dropdown-divider-bg: #e5e5e5 !default; + +//** Dropdown link text color. +$dropdown-link-color: $text-color !default; +//** Hover color for dropdown links. +$dropdown-link-hover-color: darken($gray-dark, 5%) !default; +//** Hover background for dropdown links. +$dropdown-link-hover-bg: $gray-lighter !default; + +//** Active dropdown menu item text color. +$dropdown-link-active-color: $component-active-color !default; +//** Active dropdown menu item background color. +$dropdown-link-active-bg: $component-active-bg !default; + +//** Disabled dropdown menu item background color. +$dropdown-link-disabled-color: $gray-light !default; + +//** Text color for headers within dropdown menus. +$dropdown-header-color: $gray-light !default; + +//** Deprecated `$dropdown-caret-color` as of v3.1.0 +$dropdown-caret-color: $gray-light !default; + + +//-- Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. +// +// Note: These variables are not generated into the Customizer. + +$zindex-navbar: 1000 !default; +$zindex-dropdown: 1000 !default; +$zindex-popover: 1060 !default; +$zindex-tooltip: 1070 !default; +$zindex-navbar-fixed: 1030 !default; +$zindex-modal-background: 1040 !default; +$zindex-modal: 1050 !default; + + +//== Media queries breakpoints +// +//## Define the breakpoints at which your layout will change, adapting to different screen sizes. + +// Extra small screen / phone +//** Deprecated `$screen-xs` as of v3.0.1 +$screen-xs: 480px !default; +//** Deprecated `$screen-xs-min` as of v3.2.0 +$screen-xs-min: $screen-xs !default; +//** Deprecated `$screen-phone` as of v3.0.1 +$screen-phone: $screen-xs-min !default; + +// Small screen / tablet +//** Deprecated `$screen-sm` as of v3.0.1 +$screen-sm: 768px !default; +$screen-sm-min: $screen-sm !default; +//** Deprecated `$screen-tablet` as of v3.0.1 +$screen-tablet: $screen-sm-min !default; + +// Medium screen / desktop +//** Deprecated `$screen-md` as of v3.0.1 +$screen-md: 992px !default; +$screen-md-min: $screen-md !default; +//** Deprecated `$screen-desktop` as of v3.0.1 +$screen-desktop: $screen-md-min !default; + +// Large screen / wide desktop +//** Deprecated `$screen-lg` as of v3.0.1 +$screen-lg: 1200px !default; +$screen-lg-min: $screen-lg !default; +//** Deprecated `$screen-lg-desktop` as of v3.0.1 +$screen-lg-desktop: $screen-lg-min !default; + +// So media queries don't overlap when required, provide a maximum +$screen-xs-max: ($screen-sm-min - 1) !default; +$screen-sm-max: ($screen-md-min - 1) !default; +$screen-md-max: ($screen-lg-min - 1) !default; + + +//== Grid system +// +//## Define your custom responsive grid. + +//** Number of columns in the grid. +$grid-columns: 12 !default; +//** Padding between columns. Gets divided in half for the left and right. +$grid-gutter-width: 30px !default; +// Navbar collapse +//** Point at which the navbar becomes uncollapsed. +$grid-float-breakpoint: $screen-sm-min !default; +//** Point at which the navbar begins collapsing. +$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; + + +//== Container sizes +// +//## Define the maximum width of `.container` for different screen sizes. + +// Small screen / tablet +$container-tablet: (720px + $grid-gutter-width) !default; +//** For `$screen-sm-min` and up. +$container-sm: $container-tablet !default; + +// Medium screen / desktop +$container-desktop: (940px + $grid-gutter-width) !default; +//** For `$screen-md-min` and up. +$container-md: $container-desktop !default; + +// Large screen / wide desktop +$container-large-desktop: (1140px + $grid-gutter-width) !default; +//** For `$screen-lg-min` and up. +$container-lg: $container-large-desktop !default; + + +//== Navbar +// +//## + +// Basics of a navbar +$navbar-height: 64px !default; +$navbar-margin-bottom: $line-height-computed !default; +$navbar-border-radius: $border-radius-base !default; +$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default; +$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default; +$navbar-collapse-max-height: 340px !default; + +$navbar-default-color: $gray-light !default; +$navbar-default-bg: #fff !default; +$navbar-default-border: transparent !default; + +// Navbar links +$navbar-default-link-color: $gray !default; +$navbar-default-link-hover-color: $gray-dark !default; +$navbar-default-link-hover-bg: transparent !default; +$navbar-default-link-active-color: $gray-dark !default; +$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default; +$navbar-default-link-disabled-color: #ccc !default; +$navbar-default-link-disabled-bg: transparent !default; + +// Navbar brand label +$navbar-default-brand-color: $navbar-default-link-color !default; +$navbar-default-brand-hover-color: $navbar-default-link-hover-color !default; +$navbar-default-brand-hover-bg: transparent !default; + +// Navbar toggle +$navbar-default-toggle-hover-bg: transparent !default; +$navbar-default-toggle-icon-bar-bg: rgba(0,0,0,0.5) !default; +$navbar-default-toggle-border-color: transparent !default; + + +//=== Inverted navbar +// Reset inverted navbar basics +$navbar-inverse-color: $gray-light !default; +$navbar-inverse-bg: $brand-primary !default; +$navbar-inverse-border: transparent !default; + +// Inverted navbar links +$navbar-inverse-link-color: lighten($brand-primary, 30%) !default; +$navbar-inverse-link-hover-color: #fff !default; +$navbar-inverse-link-hover-bg: transparent !default; +$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default; +$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default; +$navbar-inverse-link-disabled-color: #444 !default; +$navbar-inverse-link-disabled-bg: transparent !default; + +// Inverted navbar brand label +$navbar-inverse-brand-color: $navbar-inverse-link-color !default; +$navbar-inverse-brand-hover-color: #fff !default; +$navbar-inverse-brand-hover-bg: transparent !default; + +// Inverted navbar toggle\ +$navbar-inverse-toggle-hover-bg: transparent !default; +$navbar-inverse-toggle-icon-bar-bg: rgba(0,0,0,0.5) !default; +$navbar-inverse-toggle-border-color: transparent !default; + + +//== Navs +// +//## + +//=== Shared nav styles +$nav-link-padding: 10px 15px !default; +$nav-link-hover-bg: $gray-lighter !default; + +$nav-disabled-link-color: $gray-light !default; +$nav-disabled-link-hover-color: $gray-light !default; + +//== Tabs +$nav-tabs-border-color: transparent !default; + +$nav-tabs-link-hover-border-color: $gray-lighter !default; + +$nav-tabs-active-link-hover-bg: transparent !default; +$nav-tabs-active-link-hover-color: $gray !default; +$nav-tabs-active-link-hover-border-color: transparent !default; + +$nav-tabs-justified-link-border-color: $nav-tabs-border-color !default; +$nav-tabs-justified-active-link-border-color: $body-bg !default; + +//== Pills +$nav-pills-border-radius: $border-radius-base !default; +$nav-pills-active-link-hover-bg: $component-active-bg !default; +$nav-pills-active-link-hover-color: $component-active-color !default; + + +//== Pagination +// +//## + +$pagination-color: $link-color !default; +$pagination-bg: #fff !default; +$pagination-border: #ddd !default; + +$pagination-hover-color: $link-hover-color !default; +$pagination-hover-bg: $gray-lighter !default; +$pagination-hover-border: #ddd !default; + +$pagination-active-color: #fff !default; +$pagination-active-bg: $brand-primary !default; +$pagination-active-border: $brand-primary !default; + +$pagination-disabled-color: $gray-light !default; +$pagination-disabled-bg: #fff !default; +$pagination-disabled-border: #ddd !default; + + +//== Pager +// +//## + +$pager-bg: $pagination-bg !default; +$pager-border: $pagination-border !default; +$pager-border-radius: 15px !default; + +$pager-hover-bg: $pagination-hover-bg !default; + +$pager-active-bg: $pagination-active-bg !default; +$pager-active-color: $pagination-active-color !default; + +$pager-disabled-color: $pagination-disabled-color !default; + + +//== Jumbotron +// +//## + +$jumbotron-padding: 30px !default; +$jumbotron-color: inherit !default; +$jumbotron-bg: #f9f9f9 !default; +$jumbotron-heading-color: $headings-color !default; +$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default; +$jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) !default; + + +//== Form states and alerts +// +//## Define colors for form feedback states and, by default, alerts. + +$state-success-text: $brand-success !default; +$state-success-bg: #dff0d8 !default; +$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default; + +$state-info-text: $brand-info !default; +$state-info-bg: #e1bee7 !default; +$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default; + +$state-warning-text: $brand-warning !default; +$state-warning-bg: #ffe0b2 !default; +$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default; + +$state-danger-text: $brand-danger !default; +$state-danger-bg: #f9bdbb !default; +$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default; + + +//== Tooltips +// +//## + +//** Tooltip max width +$tooltip-max-width: 200px !default; +//** Tooltip text color +$tooltip-color: #fff !default; +//** Tooltip background color +$tooltip-bg: #727272 !default; +$tooltip-opacity: .9 !default; + +//** Tooltip arrow width +$tooltip-arrow-width: 5px !default; +//** Tooltip arrow color +$tooltip-arrow-color: $tooltip-bg !default; + + +//== Popovers +// +//## + +//** Popover body background color +$popover-bg: #fff !default; +//** Popover maximum width +$popover-max-width: 276px !default; +//** Popover border color +$popover-border-color: transparent !default; +//** Popover fallback border color +$popover-fallback-border-color: transparent !default; + +//** Popover title background color +$popover-title-bg: darken($popover-bg, 3%) !default; + +//** Popover arrow width +$popover-arrow-width: 10px !default; +//** Popover arrow color +$popover-arrow-color: $popover-bg !default; + +//** Popover outer arrow width +$popover-arrow-outer-width: ($popover-arrow-width + 1) !default; +//** Popover outer arrow color +$popover-arrow-outer-color: fadein($popover-border-color, 7.5%) !default; +//** Popover outer arrow fallback color +$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default; + + +//== Labels +// +//## + +//** Default label background color +$label-default-bg: $gray-light !default; +//** Primary label background color +$label-primary-bg: $brand-primary !default; +//** Success label background color +$label-success-bg: $brand-success !default; +//** Info label background color +$label-info-bg: $brand-info !default; +//** Warning label background color +$label-warning-bg: $brand-warning !default; +//** Danger label background color +$label-danger-bg: $brand-danger !default; + +//** Default label text color +$label-color: #fff !default; +//** Default text color of a linked label +$label-link-hover-color: #fff !default; + + +//== Modals +// +//## + +//** Padding applied to the modal body +$modal-inner-padding: 15px !default; + +//** Padding applied to the modal title +$modal-title-padding: 15px !default; +//** Modal title line-height +$modal-title-line-height: $line-height-base !default; + +//** Background color of modal content area +$modal-content-bg: #fff !default; +//** Modal content border color +$modal-content-border-color: transparent !default; +//** Modal content border color **for IE8** +$modal-content-fallback-border-color: #999 !default; + +//** Modal backdrop background color +$modal-backdrop-bg: #000 !default; +//** Modal backdrop opacity +$modal-backdrop-opacity: .5 !default; +//** Modal header border color +$modal-header-border-color: transparent !default; +//** Modal footer border color +$modal-footer-border-color: $modal-header-border-color !default; + +$modal-lg: 900px !default; +$modal-md: 600px !default; +$modal-sm: 300px !default; + + +//== Alerts +// +//## Define alert colors, border radius, and padding. + +$alert-padding: 15px !default; +$alert-border-radius: $border-radius-base !default; +$alert-link-font-weight: bold !default; + +$alert-success-bg: $state-success-bg !default; +$alert-success-text: $state-success-text !default; +$alert-success-border: $state-success-border !default; + +$alert-info-bg: $state-info-bg !default; +$alert-info-text: $state-info-text !default; +$alert-info-border: $state-info-border !default; + +$alert-warning-bg: $state-warning-bg !default; +$alert-warning-text: $state-warning-text !default; +$alert-warning-border: $state-warning-border !default; + +$alert-danger-bg: $state-danger-bg !default; +$alert-danger-text: $state-danger-text !default; +$alert-danger-border: $state-danger-border !default; + + +//== Progress bars +// +//## + +//** Background color of the whole progress component +$progress-bg: #f5f5f5 !default; +//** Progress bar text color +$progress-bar-color: #fff !default; +//** Variable for setting rounded corners on progress bar. +$progress-border-radius: $border-radius-base !default; + +//** Default progress bar color +$progress-bar-bg: $brand-primary !default; +//** Success progress bar color +$progress-bar-success-bg: $brand-success !default; +//** Warning progress bar color +$progress-bar-warning-bg: $brand-warning !default; +//** Danger progress bar color +$progress-bar-danger-bg: $brand-danger !default; +//** Info progress bar color +$progress-bar-info-bg: $brand-info !default; + + +//== List group +// +//## + +//** Background color on `.list-group-item` +$list-group-bg: #fff !default; +//** `.list-group-item` border color +$list-group-border: #ddd !default; +//** List group border radius +$list-group-border-radius: $border-radius-base !default; + +//** Background color of single list items on hover +$list-group-hover-bg: #f5f5f5 !default; +//** Text color of active list items +$list-group-active-color: $component-active-color !default; +//** Background color of active list items +$list-group-active-bg: $component-active-bg !default; +//** Border color of active list elements +$list-group-active-border: $list-group-active-bg !default; +//** Text color for content within active list items +$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default; + +//** Text color of disabled list items +$list-group-disabled-color: $gray-light !default; +//** Background color of disabled list items +$list-group-disabled-bg: $gray-lighter !default; +//** Text color for content within disabled list items +$list-group-disabled-text-color: $list-group-disabled-color !default; + +$list-group-link-color: #555 !default; +$list-group-link-hover-color: $list-group-link-color !default; +$list-group-link-heading-color: #333 !default; + + +//== Panels +// +//## + +$panel-bg: #fff !default; +$panel-body-padding: 15px !default; +$panel-heading-padding: 10px 15px !default; +$panel-footer-padding: $panel-heading-padding !default; +$panel-border-radius: $border-radius-base !default; + +//** Border color for elements within panels +$panel-inner-border: #ddd !default; +$panel-footer-bg: #f5f5f5 !default; + +$panel-default-text: $gray-dark !default; +$panel-default-border: #ddd !default; +$panel-default-heading-bg: #f5f5f5 !default; + +$panel-primary-text: #fff !default; +$panel-primary-border: $brand-primary !default; +$panel-primary-heading-bg: $brand-primary !default; + +$panel-success-text: #fff !default; +$panel-success-border: $state-success-border !default; +$panel-success-heading-bg: $brand-success !default; + +$panel-info-text: #fff !default; +$panel-info-border: $state-info-border !default; +$panel-info-heading-bg: $brand-info !default; + +$panel-warning-text: #fff !default; +$panel-warning-border: $state-warning-border !default; +$panel-warning-heading-bg: $brand-warning !default; + +$panel-danger-text: #fff !default; +$panel-danger-border: $state-danger-border !default; +$panel-danger-heading-bg: $brand-danger !default; + + +//== Thumbnails +// +//## + +//** Padding around the thumbnail image +$thumbnail-padding: 4px !default; +//** Thumbnail background color +$thumbnail-bg: $body-bg !default; +//** Thumbnail border color +$thumbnail-border: #ddd !default; +//** Thumbnail border radius +$thumbnail-border-radius: $border-radius-base !default; + +//** Custom text color for thumbnail captions +$thumbnail-caption-color: $text-color !default; +//** Padding around the thumbnail caption +$thumbnail-caption-padding: 9px !default; + + +//== Wells +// +//## + +$well-bg: #f9f9f9 !default; +$well-border: transparent !default; + + +//== Badges +// +//## + +$badge-color: #fff !default; +//** Linked badge text color on hover +$badge-link-hover-color: #fff !default; +$badge-bg: $gray-light !default; + +//** Badge text color in active nav link +$badge-active-color: $link-color !default; +//** Badge background color in active nav link +$badge-active-bg: #fff !default; + +$badge-font-weight: normal !default; +$badge-line-height: 1 !default; +$badge-border-radius: 10px !default; + + +//== Breadcrumbs +// +//## + +$breadcrumb-padding-vertical: 8px !default; +$breadcrumb-padding-horizontal: 15px !default; +//** Breadcrumb background color +$breadcrumb-bg: #f5f5f5 !default; +//** Breadcrumb text color +$breadcrumb-color: #ccc !default; +//** Text color of current page in the breadcrumb +$breadcrumb-active-color: $gray-light !default; +//** Textual separator for between breadcrumb elements +$breadcrumb-separator: "/" !default; + + +//== Carousel +// +//## + +$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default; + +$carousel-control-color: #fff !default; +$carousel-control-width: 15% !default; +$carousel-control-opacity: .5 !default; +$carousel-control-font-size: 20px !default; + +$carousel-indicator-active-bg: #fff !default; +$carousel-indicator-border-color: #fff !default; + +$carousel-caption-color: #fff !default; + + +//== Close +// +//## + +$close-font-weight: normal !default; +$close-color: #000 !default; +$close-text-shadow: none !default; + + +//== Code +// +//## + +$code-color: #c7254e !default; +$code-bg: #f9f2f4 !default; + +$kbd-color: #fff !default; +$kbd-bg: #333 !default; + +$pre-bg: #f5f5f5 !default; +$pre-color: $gray-dark !default; +$pre-border-color: #ccc !default; +$pre-scrollable-max-height: 340px !default; + + +//== Type +// +//## + +//** Horizontal offset for forms and lists. +$component-offset-horizontal: 180px !default; +//** Text muted color +$text-muted: $gray-light !default; +//** Abbreviations and acronyms border color +$abbr-border-color: $gray-light !default; +//** Headings small color +$headings-small-color: $gray-light !default; +//** Blockquote small color +$blockquote-small-color: $gray-light !default; +//** Blockquote font size +$blockquote-font-size: ($font-size-base * 1.25) !default; +//** Blockquote border color +$blockquote-border-color: $gray-lighter !default; +//** Page header border color +$page-header-border-color: $gray-lighter !default; +//** Width of horizontal description list titles +$dl-horizontal-offset: $component-offset-horizontal !default; +//** Point at which .dl-horizontal becomes horizontal +$dl-horizontal-breakpoint: $grid-float-breakpoint !default; +//** Horizontal line color. +$hr-border: $gray-lighter !default; \ No newline at end of file