rails-boilerplate 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. data/.gitignore +9 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +11 -0
  4. data/Guardfile +14 -0
  5. data/LICENSE +19 -0
  6. data/README.md +37 -0
  7. data/Rakefile +73 -0
  8. data/html5-boilerplate/.gitattributes +1 -0
  9. data/html5-boilerplate/.gitignore +41 -0
  10. data/html5-boilerplate/.htaccess +506 -0
  11. data/html5-boilerplate/404.html +38 -0
  12. data/html5-boilerplate/README.md +387 -0
  13. data/html5-boilerplate/apple-touch-icon-114x114-precomposed.png +0 -0
  14. data/html5-boilerplate/apple-touch-icon-57x57-precomposed.png +0 -0
  15. data/html5-boilerplate/apple-touch-icon-72x72-precomposed.png +0 -0
  16. data/html5-boilerplate/apple-touch-icon-precomposed.png +0 -0
  17. data/html5-boilerplate/apple-touch-icon.png +0 -0
  18. data/html5-boilerplate/build/build.xml +1051 -0
  19. data/html5-boilerplate/build/config/default.properties +116 -0
  20. data/html5-boilerplate/build/config/manifest.appcache +20 -0
  21. data/html5-boilerplate/build/config/project.properties +96 -0
  22. data/html5-boilerplate/build/createproject.sh +50 -0
  23. data/html5-boilerplate/build/project.xml +7 -0
  24. data/html5-boilerplate/build/runbuildscript.bat +6 -0
  25. data/html5-boilerplate/build/tools/ant-contrib-1.0b3.jar +0 -0
  26. data/html5-boilerplate/build/tools/closure-compiler-v1346.jar +0 -0
  27. data/html5-boilerplate/build/tools/csslint-rhino.js +11138 -0
  28. data/html5-boilerplate/build/tools/fulljshint.js +5904 -0
  29. data/html5-boilerplate/build/tools/fulljslint.js +6651 -0
  30. data/html5-boilerplate/build/tools/htmlcompressor-1.4.3.jar +0 -0
  31. data/html5-boilerplate/build/tools/jpegtran.exe +0 -0
  32. data/html5-boilerplate/build/tools/optipng-0.6.4-exe/LICENSE.txt +21 -0
  33. data/html5-boilerplate/build/tools/optipng-0.6.4-exe/optipng.exe +0 -0
  34. data/html5-boilerplate/build/tools/rhino.jar +0 -0
  35. data/html5-boilerplate/build/tools/yuicompressor-2.4.5.jar +0 -0
  36. data/html5-boilerplate/crossdomain.xml +25 -0
  37. data/html5-boilerplate/css/style.css +293 -0
  38. data/html5-boilerplate/demo/elements.html +493 -0
  39. data/html5-boilerplate/demo/hack.css +84 -0
  40. data/html5-boilerplate/demo/hack2.css +41 -0
  41. data/html5-boilerplate/demo/internet_explorer.png +0 -0
  42. data/html5-boilerplate/demo/test_tubes.png +0 -0
  43. data/html5-boilerplate/demo/tests.html +300 -0
  44. data/html5-boilerplate/favicon.ico +0 -0
  45. data/html5-boilerplate/humans.txt +43 -0
  46. data/html5-boilerplate/img/.gitignore +2 -0
  47. data/html5-boilerplate/index.html +79 -0
  48. data/html5-boilerplate/js/libs/jquery-1.6.3.js +9044 -0
  49. data/html5-boilerplate/js/libs/jquery-1.6.3.min.js +4 -0
  50. data/html5-boilerplate/js/libs/modernizr-2.0.6.min.js +4 -0
  51. data/html5-boilerplate/js/mylibs/.gitignore +2 -0
  52. data/html5-boilerplate/js/plugins.js +20 -0
  53. data/html5-boilerplate/js/script.js +8 -0
  54. data/html5-boilerplate/robots.txt +5 -0
  55. data/html5-boilerplate/test/index.html +31 -0
  56. data/html5-boilerplate/test/qunit/qunit.css +148 -0
  57. data/html5-boilerplate/test/qunit/qunit.js +1265 -0
  58. data/html5-boilerplate/test/tests.js +24 -0
  59. data/index.html.patch +62 -0
  60. data/lib/generators/boilerplate/install/install_generator.rb +33 -0
  61. data/lib/generators/boilerplate/install/templates/apple-touch-icon-114x114-precomposed.png +0 -0
  62. data/lib/generators/boilerplate/install/templates/apple-touch-icon-57x57-precomposed.png +0 -0
  63. data/lib/generators/boilerplate/install/templates/apple-touch-icon-72x72-precomposed.png +0 -0
  64. data/lib/generators/boilerplate/install/templates/apple-touch-icon-precomposed.png +0 -0
  65. data/lib/generators/boilerplate/install/templates/apple-touch-icon.png +0 -0
  66. data/lib/generators/boilerplate/install/templates/crossdomain.xml +25 -0
  67. data/lib/generators/boilerplate/install/templates/favicon.ico +0 -0
  68. data/lib/generators/boilerplate/install/templates/humans.txt +43 -0
  69. data/lib/generators/boilerplate/install/templates/index.html +60 -0
  70. data/lib/generators/boilerplate/install/templates/robots.txt +5 -0
  71. data/lib/generators/boilerplate/resource_helpers.rb +13 -0
  72. data/lib/rails_boilerplate.rb +7 -0
  73. data/lib/rails_boilerplate/version.rb +3 -0
  74. data/rails-boilerplate.gemspec +24 -0
  75. data/test/dummy/Rakefile +7 -0
  76. data/test/dummy/app/controllers/application_controller.rb +3 -0
  77. data/test/dummy/app/controllers/home_controller.rb +5 -0
  78. data/test/dummy/app/helpers/application_helper.rb +2 -0
  79. data/test/dummy/app/views/home/index.html.erb +1 -0
  80. data/test/dummy/app/views/layouts/application.html.erb +68 -0
  81. data/test/dummy/config.ru +4 -0
  82. data/test/dummy/config/application.rb +43 -0
  83. data/test/dummy/config/boot.rb +10 -0
  84. data/test/dummy/config/database.yml +22 -0
  85. data/test/dummy/config/environment.rb +5 -0
  86. data/test/dummy/config/environments/development.rb +25 -0
  87. data/test/dummy/config/environments/production.rb +49 -0
  88. data/test/dummy/config/environments/test.rb +35 -0
  89. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  90. data/test/dummy/config/initializers/inflections.rb +10 -0
  91. data/test/dummy/config/initializers/mime_types.rb +5 -0
  92. data/test/dummy/config/initializers/secret_token.rb +7 -0
  93. data/test/dummy/config/initializers/session_store.rb +8 -0
  94. data/test/dummy/config/locales/en.yml +5 -0
  95. data/test/dummy/config/routes.rb +3 -0
  96. data/test/dummy/public/404.html +26 -0
  97. data/test/dummy/public/422.html +26 -0
  98. data/test/dummy/public/500.html +26 -0
  99. data/test/dummy/public/favicon.ico +0 -0
  100. data/test/dummy/public/javascripts/application.js +2 -0
  101. data/test/dummy/public/javascripts/controls.js +965 -0
  102. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  103. data/test/dummy/public/javascripts/effects.js +1123 -0
  104. data/test/dummy/public/javascripts/prototype.js +6001 -0
  105. data/test/dummy/public/javascripts/rails.js +191 -0
  106. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  107. data/test/dummy/script/rails +6 -0
  108. data/test/generators/fixtures/application.css +7 -0
  109. data/test/generators/fixtures/application.js +9 -0
  110. data/test/generators/generators_test_helper.rb +8 -0
  111. data/test/generators/install_generator_test.rb +51 -0
  112. data/test/rails_boilerplate_test.rb +16 -0
  113. data/test/test_helper.rb +12 -0
  114. data/vendor/assets/javascripts/modernizr.js +4 -0
  115. data/vendor/assets/javascripts/plugins.js +20 -0
  116. data/vendor/assets/stylesheets/reset.css +293 -0
  117. metadata +167 -0
@@ -0,0 +1,191 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,7 @@
1
+ /*
2
+ * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
+ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
+ * the top of the compiled file, but it's generally better to create a new file per style scope.
5
+ *= require_self
6
+ *= require_tree .
7
+ */
@@ -0,0 +1,9 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.
6
+ //
7
+ //= require jquery
8
+ //= require jquery_ujs
9
+ //= require_tree .
@@ -0,0 +1,8 @@
1
+ module GeneratorsTestHelper
2
+ def self.included(base)
3
+ base.class_eval do
4
+ destination File.expand_path("../tmp", File.dirname(__FILE__))
5
+ setup :prepare_destination
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+ require 'generators/generators_test_helper'
3
+ require 'generators/boilerplate/install/install_generator'
4
+
5
+ class InstallGeneratorTest < Rails::Generators::TestCase
6
+ include GeneratorsTestHelper
7
+ tests Boilerplate::Generators::InstallGenerator
8
+
9
+ def setup
10
+ mkdir_p "#{destination_root}/app/assets/stylesheets"
11
+ mkdir_p "#{destination_root}/app/assets/javascripts"
12
+ cp fixture("application.css"), "#{destination_root}/app/assets/stylesheets"
13
+ cp fixture("application.js"), "#{destination_root}/app/assets/javascripts"
14
+ super
15
+ end
16
+
17
+ test "copies index.html to app/views/layouts/application.html.erb" do
18
+ run_generator
19
+
20
+ assert_file 'app/views/layouts/application.html.erb'
21
+ end
22
+
23
+ test "adds reset.css to the top of the application.css" do
24
+ run_generator
25
+
26
+ assert_file 'app/assets/stylesheets/application.css' do |application|
27
+ assert_match /require reset.*require_self/m, application
28
+ end
29
+ end
30
+
31
+ test "adds plugins.js to the top of the application.js" do
32
+ run_generator
33
+
34
+ assert_file "app/assets/javascripts/application.js" do |application|
35
+ assert_match /\/\/= require plugins[^\/]+\/\/= require jquery/m, application
36
+ end
37
+
38
+ end
39
+
40
+ test "copies public files" do
41
+ run_generator
42
+
43
+ %w{robots.txt crossdomain.xml humans.txt favicon.ico apple-touch-icon-114x114-precomposed.png apple-touch-icon-57x57-precomposed.png apple-touch-icon-72x72-precomposed.png apple-touch-icon-precomposed.png apple-touch-icon.png}.each do |f|
44
+ assert_file "public/#{f}"
45
+ end
46
+ end
47
+
48
+ def fixture(file)
49
+ File.expand_path("fixtures/#{file}", File.dirname(__FILE__))
50
+ end
51
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class RailsBoilerplateTest < ActiveSupport::TestCase
4
+ def setup
5
+ @app = Dummy::Application
6
+ end
7
+ test 'modernizr is an asset' do
8
+ assert_not_nil @app.assets["modernizr"]
9
+ end
10
+ test 'reset is an asset' do
11
+ assert_not_nil @app.assets["reset"]
12
+ end
13
+ test 'plugins is an js asset' do
14
+ assert_not_nil @app.assets["plugins"]
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ ENV["RAILS_ENV"] = 'test'
2
+
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require 'rails/test_help'
5
+
6
+ Rails.backtrace_cleaner.remove_silencers!
7
+
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
9
+
10
+ # For Generators
11
+ require 'rails/generators/test_case'
12
+
@@ -0,0 +1,4 @@
1
+ /* Modernizr 2.0.6 | MIT & BSD
2
+ * Contains: All core tests, html5shiv, yepnope, respond.js. Get your own custom build at www.modernizr.com/download/
3
+ */
4
+ ;window.Modernizr=function(a,b,c){function I(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=a[b]in l;return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function G(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return F(d,b)}function F(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function E(a,b){return!!~(""+a).indexOf(b)}function D(a,b){return typeof a===b}function C(a,b){return B(o.join(a+";")+(b||""))}function B(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["&shy;","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},w=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;v("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y,z={}.hasOwnProperty,A;!D(z,c)&&!D(z.call,c)?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],c)};var H=function(c,d){var f=c.join(""),g=d.length;v(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||j.touch.offsetTop===9,e.csstransforms3d=j.csstransforms3d.offsetLeft===9,e.generatedcontent=j.generatedcontent.offsetHeight>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",o.join("touch-enabled),("),i,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",o.join("transform-3d),("),i,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',m,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!D(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b].toLowerCase()+"IndexedDB"])return!0;return!!a.indexedDB},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b]+"WebSocket"])return!0;return"WebSocket"in a},r.rgba=function(){B("background-color:rgba(150,255,150,.5)");return E(k.backgroundColor,"rgba")},r.hsla=function(){B("background-color:hsla(120,40%,100%,.5)");return E(k.backgroundColor,"rgba")||E(k.backgroundColor,"hsla")},r.multiplebgs=function(){B("background:url(https://),url(https://),red url(https://)");return/(url\s*\(.*?){3}/.test(k.background)},r.backgroundsize=function(){return G("backgroundSize")},r.borderimage=function(){return G("borderImage")},r.borderradius=function(){return G("borderRadius")},r.boxshadow=function(){return G("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){C("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return G("animationName")},r.csscolumns=function(){return G("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";B((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return E(k.backgroundImage,"gradient")},r.cssreflections=function(){return G("boxReflect")},r.csstransforms=function(){return!!F(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!F(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=e.csstransforms3d);return a},r.csstransitions=function(){return G("transitionProperty")},r.fontface=function(){return e.fontface},r.generatedcontent=function(){return e.generatedcontent},r.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}}catch(e){}return c},r.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}catch(d){}return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webworkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var J in r)A(r,J)&&(y=J.toLowerCase(),e[y]=r[J](),u.push((e[y]?"":"no-")+y));e.input||I(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},B(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=o,e._domPrefixes=p,e.mq=w,e.hasEvent=x,e.testProp=function(a){return F([a])},e.testAllProps=G,e.testStyles=v,e.prefixed=function(a){return G(a,"pfx")},g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+u.join(" "):"");return e}(this,this.document),function(a,b){function u(){r(!0)}a.respond={},respond.update=function(){},respond.mediaQueriesSupported=b;if(!b){var c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=j.getElementsByTagName("link"),l=[],m=function(){var b=k,c=b.length,d=0,e,f,g,i;for(;d<c;d++)e=b[d],f=e.href,g=e.media,i=e.rel&&e.rel.toLowerCase()==="stylesheet",!!f&&i&&!h[f]&&(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(f)||f.replace(RegExp.$1,"").split("/")[0]===a.location.host?l.push({href:f,media:g}):h[f]=!0);n()},n=function(){if(l.length){var a=l.shift();s(a.href,function(b){o(b,a.href,a.media),h[a.href]=!0,n()})}},o=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]+\{[^\}\{]+\})+/gi),g=d&&d.length||0,b=b.substring(0,b.lastIndexOf("/")),h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c,j=0,k,l,m,n,o;b.length&&(b+="/"),i&&(g=1);for(;j<g;j++){k=0,i?(l=c,f.push(h(a))):(l=d[j].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),n=l.split(","),o=n.length;for(;k<o;k++)m=n[k],e.push({media:m.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:f.length-1,minw:m.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:m.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}r()},p,q,r=function(a){var b="clientWidth",h=d[b],l=c.compatMode==="CSS1Compat"&&h||c.body[b]||h,m={},n=c.createDocumentFragment(),o=k[k.length-1],s=(new Date).getTime();if(a&&p&&s-p<i)clearTimeout(q),q=setTimeout(r,i);else{p=s;for(var t in e){var u=e[t];if(!u.minw&&!u.maxw||(!u.minw||u.minw&&l>=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
@@ -0,0 +1,20 @@
1
+
2
+ // usage: log('inside coolFunc', this, arguments);
3
+ // paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
4
+ window.log = function(){
5
+ log.history = log.history || []; // store logs to an array for reference
6
+ log.history.push(arguments);
7
+ if(this.console) {
8
+ arguments.callee = arguments.callee.caller;
9
+ var newarr = [].slice.call(arguments);
10
+ (typeof console.log === 'object' ? log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr));
11
+ }
12
+ };
13
+
14
+ // make it safe to use console.log always
15
+ (function(b){function c(){}for(var d="assert,clear,count,debug,dir,dirxml,error,exception,firebug,group,groupCollapsed,groupEnd,info,log,memoryProfile,memoryProfileEnd,profile,profileEnd,table,time,timeEnd,timeStamp,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}})((function(){try
16
+ {console.log();return window.console;}catch(err){return window.console={};}})());
17
+
18
+
19
+ // place any jQuery/helper plugins in here, instead of separate, slower script files.
20
+
@@ -0,0 +1,293 @@
1
+ /*
2
+ * HTML5 ✰ Boilerplate
3
+ *
4
+ * What follows is the result of much research on cross-browser styling.
5
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
6
+ * Kroc Camen, and the H5BP dev community and team.
7
+ *
8
+ * Detailed information about this CSS: h5bp.com/css
9
+ *
10
+ * ==|== normalize ==========================================================
11
+ */
12
+
13
+
14
+ /* =============================================================================
15
+ HTML5 display definitions
16
+ ========================================================================== */
17
+
18
+ article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
19
+ audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
20
+ audio:not([controls]) { display: none; }
21
+ [hidden] { display: none; }
22
+
23
+
24
+ /* =============================================================================
25
+ Base
26
+ ========================================================================== */
27
+
28
+ /*
29
+ * 1. Correct text resizing oddly in IE6/7 when body font-size is set using em units
30
+ * 2. Force vertical scrollbar in non-IE
31
+ * 3. Prevent iOS text size adjust on device orientation change, without disabling user zoom: h5bp.com/g
32
+ */
33
+
34
+ html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
35
+
36
+ body { margin: 0; font-size: 13px; line-height: 1.231; }
37
+
38
+ body, button, input, select, textarea { font-family: sans-serif; color: #222; }
39
+
40
+ /*
41
+ * Remove text-shadow in selection highlight: h5bp.com/i
42
+ * These selection declarations have to be separate
43
+ * Also: hot pink! (or customize the background color to match your design)
44
+ */
45
+
46
+ ::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
47
+ ::selection { background: #fe57a1; color: #fff; text-shadow: none; }
48
+
49
+
50
+ /* =============================================================================
51
+ Links
52
+ ========================================================================== */
53
+
54
+ a { color: #00e; }
55
+ a:visited { color: #551a8b; }
56
+ a:hover { color: #06e; }
57
+ a:focus { outline: thin dotted; }
58
+
59
+ /* Improve readability when focused and hovered in all browsers: h5bp.com/h */
60
+ a:hover, a:active { outline: 0; }
61
+
62
+
63
+ /* =============================================================================
64
+ Typography
65
+ ========================================================================== */
66
+
67
+ abbr[title] { border-bottom: 1px dotted; }
68
+
69
+ b, strong { font-weight: bold; }
70
+
71
+ blockquote { margin: 1em 40px; }
72
+
73
+ dfn { font-style: italic; }
74
+
75
+ hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
76
+
77
+ ins { background: #ff9; color: #000; text-decoration: none; }
78
+
79
+ mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
80
+
81
+ /* Redeclare monospace font family: h5bp.com/j */
82
+ pre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }
83
+
84
+ /* Improve readability of pre-formatted text in all browsers */
85
+ pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
86
+
87
+ q { quotes: none; }
88
+ q:before, q:after { content: ""; content: none; }
89
+
90
+ small { font-size: 85%; }
91
+
92
+ /* Position subscript and superscript content without affecting line-height: h5bp.com/k */
93
+ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
94
+ sup { top: -0.5em; }
95
+ sub { bottom: -0.25em; }
96
+
97
+
98
+ /* =============================================================================
99
+ Lists
100
+ ========================================================================== */
101
+
102
+ ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
103
+ dd { margin: 0 0 0 40px; }
104
+ nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
105
+
106
+
107
+ /* =============================================================================
108
+ Embedded content
109
+ ========================================================================== */
110
+
111
+ /*
112
+ * 1. Improve image quality when scaled in IE7: h5bp.com/d
113
+ * 2. Remove the gap between images and borders on image containers: h5bp.com/e
114
+ */
115
+
116
+ img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
117
+
118
+ /*
119
+ * Correct overflow not hidden in IE9
120
+ */
121
+
122
+ svg:not(:root) { overflow: hidden; }
123
+
124
+
125
+ /* =============================================================================
126
+ Figures
127
+ ========================================================================== */
128
+
129
+ figure { margin: 0; }
130
+
131
+
132
+ /* =============================================================================
133
+ Forms
134
+ ========================================================================== */
135
+
136
+ form { margin: 0; }
137
+ fieldset { border: 0; margin: 0; padding: 0; }
138
+
139
+ /* Indicate that 'label' will shift focus to the associated form element */
140
+ label { cursor: pointer; }
141
+
142
+ /*
143
+ * 1. Correct color not inheriting in IE6/7/8/9
144
+ * 2. Correct alignment displayed oddly in IE6/7
145
+ */
146
+
147
+ legend { border: 0; *margin-left: -7px; padding: 0; }
148
+
149
+ /*
150
+ * 1. Correct font-size not inheriting in all browsers
151
+ * 2. Remove margins in FF3/4 S5 Chrome
152
+ * 3. Define consistent vertical alignment display in all browsers
153
+ */
154
+
155
+ button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
156
+
157
+ /*
158
+ * 1. Define line-height as normal to match FF3/4 (set using !important in the UA stylesheet)
159
+ * 2. Correct inner spacing displayed oddly in IE6/7
160
+ */
161
+
162
+ button, input { line-height: normal; *overflow: visible; }
163
+
164
+ /*
165
+ * Reintroduce inner spacing in 'table' to avoid overlap and whitespace issues in IE6/7
166
+ */
167
+
168
+ table button, table input { *overflow: auto; }
169
+
170
+ /*
171
+ * 1. Display hand cursor for clickable form elements
172
+ * 2. Allow styling of clickable form elements in iOS
173
+ */
174
+
175
+ button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
176
+
177
+ /*
178
+ * Consistent box sizing and appearance
179
+ */
180
+
181
+ input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; }
182
+ input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
183
+ input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
184
+
185
+ /*
186
+ * Remove inner padding and border in FF3/4: h5bp.com/l
187
+ */
188
+
189
+ button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
190
+
191
+ /*
192
+ * 1. Remove default vertical scrollbar in IE6/7/8/9
193
+ * 2. Allow only vertical resizing
194
+ */
195
+
196
+ textarea { overflow: auto; vertical-align: top; resize: vertical; }
197
+
198
+ /* Colors for form validity */
199
+ input:valid, textarea:valid { }
200
+ input:invalid, textarea:invalid { background-color: #f0dddd; }
201
+
202
+
203
+ /* =============================================================================
204
+ Tables
205
+ ========================================================================== */
206
+
207
+ table { border-collapse: collapse; border-spacing: 0; }
208
+ td { vertical-align: top; }
209
+
210
+
211
+ /* ==|== primary styles =====================================================
212
+ Author:
213
+ ========================================================================== */
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+ /* ==|== media queries ======================================================
231
+ PLACEHOLDER Media Queries for Responsive Design.
232
+ These override the primary ('mobile first') styles
233
+ Modify as content requires.
234
+ ========================================================================== */
235
+
236
+ @media only screen and (min-width: 480px) {
237
+ /* Style adjustments for viewports 480px and over go here */
238
+
239
+ }
240
+
241
+ @media only screen and (min-width: 768px) {
242
+ /* Style adjustments for viewports 768px and over go here */
243
+
244
+ }
245
+
246
+
247
+
248
+ /* ==|== non-semantic helper classes ========================================
249
+ Please define your styles before this section.
250
+ ========================================================================== */
251
+
252
+ /* For image replacement */
253
+ .ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
254
+ .ir br { display: none; }
255
+
256
+ /* Hide from both screenreaders and browsers: h5bp.com/u */
257
+ .hidden { display: none !important; visibility: hidden; }
258
+
259
+ /* Hide only visually, but have it available for screenreaders: h5bp.com/v */
260
+ .visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
261
+
262
+ /* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
263
+ .visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
264
+
265
+ /* Hide visually and from screenreaders, but maintain layout */
266
+ .invisible { visibility: hidden; }
267
+
268
+ /* Contain floats: h5bp.com/q */
269
+ .clearfix:before, .clearfix:after { content: ""; display: table; }
270
+ .clearfix:after { clear: both; }
271
+ .clearfix { *zoom: 1; }
272
+
273
+
274
+
275
+ /* ==|== print styles =======================================================
276
+ Print styles.
277
+ Inlined to avoid required HTTP connection: h5bp.com/r
278
+ ========================================================================== */
279
+
280
+ @media print {
281
+ * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
282
+ a, a:visited { text-decoration: underline; }
283
+ a[href]:after { content: " (" attr(href) ")"; }
284
+ abbr[title]:after { content: " (" attr(title) ")"; }
285
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
286
+ pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
287
+ thead { display: table-header-group; } /* h5bp.com/t */
288
+ tr, img { page-break-inside: avoid; }
289
+ img { max-width: 100% !important; }
290
+ @page { margin: 0.5cm; }
291
+ p, h2, h3 { orphans: 3; widows: 3; }
292
+ h2, h3 { page-break-after: avoid; }
293
+ }