From d6186cb3c19a6372529163f70683beafe2eddeaf Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 14:34:34 -0700 Subject: [PATCH 01/61] Initial Rails Setup --- .gitignore | 19 ++ Gemfile | 66 ++++++ Gemfile.lock | 222 ++++++++++++++++++ README.md | 104 +------- Rakefile | 6 + app/assets/config/manifest.js | 3 + app/assets/images/.keep | 0 app/assets/javascripts/application.js | 15 ++ app/assets/javascripts/cable.js | 13 + app/assets/javascripts/channels/.keep | 0 app/assets/stylesheets/application.css | 15 ++ app/channels/application_cable/channel.rb | 4 + app/channels/application_cable/connection.rb | 4 + app/controllers/application_controller.rb | 3 + app/controllers/concerns/.keep | 0 app/helpers/application_helper.rb | 2 + app/jobs/application_job.rb | 2 + app/mailers/application_mailer.rb | 4 + app/models/application_record.rb | 3 + app/models/concerns/.keep | 0 app/views/layouts/application.html.erb | 14 ++ app/views/layouts/mailer.html.erb | 13 + app/views/layouts/mailer.text.erb | 1 + bin/bundle | 3 + bin/rails | 9 + bin/rake | 9 + bin/setup | 38 +++ bin/spring | 17 ++ bin/update | 29 +++ bin/yarn | 11 + config.ru | 5 + config/application.rb | 25 ++ config/boot.rb | 3 + config/cable.yml | 10 + config/database.yml | 85 +++++++ config/environment.rb | 5 + config/environments/development.rb | 54 +++++ config/environments/production.rb | 91 +++++++ config/environments/test.rb | 42 ++++ .../application_controller_renderer.rb | 8 + config/initializers/assets.rb | 14 ++ config/initializers/backtrace_silencers.rb | 7 + config/initializers/cookies_serializer.rb | 5 + .../initializers/filter_parameter_logging.rb | 4 + config/initializers/inflections.rb | 16 ++ config/initializers/mime_types.rb | 4 + config/initializers/wrap_parameters.rb | 14 ++ config/locales/en.yml | 33 +++ config/puma.rb | 56 +++++ config/routes.rb | 3 + config/secrets.yml | 32 +++ config/spring.rb | 6 + db/seeds.rb | 7 + lib/assets/.keep | 0 lib/tasks/.keep | 0 log/.keep | 0 package.json | 5 + public/404.html | 67 ++++++ public/422.html | 67 ++++++ public/500.html | 66 ++++++ public/apple-touch-icon-precomposed.png | 0 public/apple-touch-icon.png | 0 public/favicon.ico | 0 public/robots.txt | 1 + test/application_system_test_case.rb | 5 + test/controllers/.keep | 0 test/fixtures/.keep | 0 test/fixtures/files/.keep | 0 test/helpers/.keep | 0 test/integration/.keep | 0 test/mailers/.keep | 0 test/models/.keep | 0 test/system/.keep | 0 test/test_helper.rb | 26 ++ tmp/.keep | 0 vendor/.keep | 0 76 files changed, 1304 insertions(+), 91 deletions(-) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 Rakefile create mode 100644 app/assets/config/manifest.js create mode 100644 app/assets/images/.keep create mode 100644 app/assets/javascripts/application.js create mode 100644 app/assets/javascripts/cable.js create mode 100644 app/assets/javascripts/channels/.keep create mode 100644 app/assets/stylesheets/application.css create mode 100644 app/channels/application_cable/channel.rb create mode 100644 app/channels/application_cable/connection.rb create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/concerns/.keep create mode 100644 app/helpers/application_helper.rb create mode 100644 app/jobs/application_job.rb create mode 100644 app/mailers/application_mailer.rb create mode 100644 app/models/application_record.rb create mode 100644 app/models/concerns/.keep create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/mailer.html.erb create mode 100644 app/views/layouts/mailer.text.erb create mode 100755 bin/bundle create mode 100755 bin/rails create mode 100755 bin/rake create mode 100755 bin/setup create mode 100755 bin/spring create mode 100755 bin/update create mode 100755 bin/yarn create mode 100644 config.ru create mode 100644 config/application.rb create mode 100644 config/boot.rb create mode 100644 config/cable.yml create mode 100644 config/database.yml create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/application_controller_renderer.rb create mode 100644 config/initializers/assets.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/cookies_serializer.rb create mode 100644 config/initializers/filter_parameter_logging.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/en.yml create mode 100644 config/puma.rb create mode 100644 config/routes.rb create mode 100644 config/secrets.yml create mode 100644 config/spring.rb create mode 100644 db/seeds.rb create mode 100644 lib/assets/.keep create mode 100644 lib/tasks/.keep create mode 100644 log/.keep create mode 100644 package.json create mode 100644 public/404.html create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/apple-touch-icon-precomposed.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.ico create mode 100644 public/robots.txt create mode 100644 test/application_system_test_case.rb create mode 100644 test/controllers/.keep create mode 100644 test/fixtures/.keep create mode 100644 test/fixtures/files/.keep create mode 100644 test/helpers/.keep create mode 100644 test/integration/.keep create mode 100644 test/mailers/.keep create mode 100644 test/models/.keep create mode 100644 test/system/.keep create mode 100644 test/test_helper.rb create mode 100644 tmp/.keep create mode 100644 vendor/.keep diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..82701fedc8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +/node_modules +/yarn-error.log + +.byebug_history diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000000..88aee9dc96 --- /dev/null +++ b/Gemfile @@ -0,0 +1,66 @@ +source 'https://rubygems.org' + +git_source(:github) do |repo_name| + repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") + "https://github.com/#{repo_name}.git" +end + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '~> 5.1.4' +# Use postgresql as the database for Active Record +gem 'pg', '~> 0.18' +# Use Puma as the app server +gem 'puma', '~> 3.7' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use CoffeeScript for .coffee assets and views +# gem 'coffee-rails', '~> 4.2' +# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks +gem 'turbolinks', '~> 5' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.5' +# Use Redis adapter to run Action Cable in production +# gem 'redis', '~> 3.0' +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] + # Adds support for Capybara system testing and selenium driver + gem 'capybara', '~> 2.13' + gem 'selenium-webdriver' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. + gem 'web-console', '>= 3.3.0' + gem 'listen', '>= 3.0.5', '< 3.2' + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' + gem 'spring-watcher-listen', '~> 2.0.0' +end + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] + +gem 'jquery-turbolinks' +group :development do + gem 'better_errors' + gem 'pry-rails' + gem 'binding_of_caller' +end + +group :test do + gem 'minitest-rails' + gem 'minitest-reporters' +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000000..69fae647c5 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,222 @@ +GEM + remote: https://rubygems.org/ + specs: + actioncable (5.1.4) + actionpack (= 5.1.4) + nio4r (~> 2.0) + websocket-driver (~> 0.6.1) + actionmailer (5.1.4) + actionpack (= 5.1.4) + actionview (= 5.1.4) + activejob (= 5.1.4) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (5.1.4) + actionview (= 5.1.4) + activesupport (= 5.1.4) + rack (~> 2.0) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.1.4) + activesupport (= 5.1.4) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.3) + activejob (5.1.4) + activesupport (= 5.1.4) + globalid (>= 0.3.6) + activemodel (5.1.4) + activesupport (= 5.1.4) + activerecord (5.1.4) + activemodel (= 5.1.4) + activesupport (= 5.1.4) + arel (~> 8.0) + activesupport (5.1.4) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (~> 0.7) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + ansi (1.5.0) + arel (8.0.0) + better_errors (2.3.0) + coderay (>= 1.0.0) + erubi (>= 1.0.0) + rack (>= 0.9.0) + bindex (0.5.0) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) + builder (3.2.3) + byebug (9.1.0) + capybara (2.15.4) + addressable + mini_mime (>= 0.1.3) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + xpath (~> 2.0) + childprocess (0.8.0) + ffi (~> 1.0, >= 1.0.11) + coderay (1.1.2) + concurrent-ruby (1.0.5) + crass (1.0.2) + debug_inspector (0.0.3) + erubi (1.7.0) + execjs (2.7.0) + ffi (1.9.18) + globalid (0.4.0) + activesupport (>= 4.2.0) + i18n (0.8.6) + jbuilder (2.7.0) + activesupport (>= 4.2.0) + multi_json (>= 1.2) + jquery-turbolinks (2.1.0) + railties (>= 3.1.0) + turbolinks + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + loofah (2.1.1) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.6.6) + mime-types (>= 1.16, < 4) + method_source (0.9.0) + mime-types (3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2016.0521) + mini_mime (0.1.4) + mini_portile2 (2.3.0) + minitest (5.10.3) + minitest-rails (3.0.0) + minitest (~> 5.8) + railties (~> 5.0) + minitest-reporters (1.1.18) + ansi + builder + minitest (>= 5.0) + ruby-progressbar + multi_json (1.12.2) + nio4r (2.1.0) + nokogiri (1.8.1) + mini_portile2 (~> 2.3.0) + pg (0.21.0) + pry (0.11.1) + coderay (~> 1.1.0) + method_source (~> 0.9.0) + pry-rails (0.3.6) + pry (>= 0.10.4) + public_suffix (3.0.0) + puma (3.10.0) + rack (2.0.3) + rack-test (0.7.0) + rack (>= 1.0, < 3) + rails (5.1.4) + actioncable (= 5.1.4) + actionmailer (= 5.1.4) + actionpack (= 5.1.4) + actionview (= 5.1.4) + activejob (= 5.1.4) + activemodel (= 5.1.4) + activerecord (= 5.1.4) + activesupport (= 5.1.4) + bundler (>= 1.3.0) + railties (= 5.1.4) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.0.3) + loofah (~> 2.0) + railties (5.1.4) + actionpack (= 5.1.4) + activesupport (= 5.1.4) + method_source + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.1.0) + rb-fsevent (0.10.2) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) + ruby-progressbar (1.9.0) + ruby_dep (1.5.0) + rubyzip (1.2.1) + sass (3.5.2) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.0.6) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + selenium-webdriver (3.6.0) + childprocess (~> 0.5) + rubyzip (~> 1.0) + spring (2.0.2) + activesupport (>= 4.2) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (3.7.1) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + thor (0.20.0) + thread_safe (0.3.6) + tilt (2.0.8) + turbolinks (5.0.1) + turbolinks-source (~> 5) + turbolinks-source (5.0.3) + tzinfo (1.2.3) + thread_safe (~> 0.1) + uglifier (3.2.0) + execjs (>= 0.3.0, < 3) + web-console (3.5.1) + actionview (>= 5.0) + activemodel (>= 5.0) + bindex (>= 0.4.0) + railties (>= 5.0) + websocket-driver (0.6.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.2) + xpath (2.1.0) + nokogiri (~> 1.3) + +PLATFORMS + ruby + +DEPENDENCIES + better_errors + binding_of_caller + byebug + capybara (~> 2.13) + jbuilder (~> 2.5) + jquery-turbolinks + listen (>= 3.0.5, < 3.2) + minitest-rails + minitest-reporters + pg (~> 0.18) + pry-rails + puma (~> 3.7) + rails (~> 5.1.4) + sass-rails (~> 5.0) + selenium-webdriver + spring + spring-watcher-listen (~> 2.0.0) + turbolinks (~> 5) + tzinfo-data + uglifier (>= 1.3.0) + web-console (>= 3.3.0) + +BUNDLED WITH + 1.15.4 diff --git a/README.md b/README.md index 6d792f05ce..7db80e4ca1 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,24 @@ -# Media Ranker +# README -## Introduction +This README would normally document whatever steps are necessary to get the +application up and running. -In this project, you will build a webapp where users can vote for their favorite pieces of media. +Things you may want to cover: -In contrast to previous projects, instead of implementing a pre-defined spec you will be imitating an existing site: http://media-ranker-2-0.herokuapp.com. Your job is to match the functionality and styling of this site as closely as possible. +* Ruby version -This is an individual, [stage 2](https://github.com/Ada-Developers-Academy/pedagogy/blob/master/rule-of-three.md) project. +* System dependencies -## Learning Goals +* Configuration -The purpose of this assignment is to reinforce the following concepts: +* Database creation -- Previous Rails learning, including MVC, RESTful routing, and the request cycle -- Testing Rails applications -- Building complex model logic -- Using `session` and `flash` to track data between requests -- DRYing up Rails code -- Working with a CSS framework -- Styling a page based on an existing design +* Database initialization -## Before You Begin +* How to run the test suite -### Provided Files +* Services (job queues, cache servers, search engines, etc.) -- `db/media_seeds.csv`: Some starter media to work with -- `app/assets/images/owl.jpg`: The owl picture from the site +* Deployment instructions -### Regarding the Word "Media" - -The Rails inflector considers "media" to be the plural of "medium", which is not really what we mean here. You may want to choose a different word to represent "a book, movie or album" internally. The instructor-proved example site uses the word "work". - -## Project Requirements - -### Core Requirements - -Regardless of how you choose to implement this project or how much of it gets done, you should exhibit - -- Squeaky-clean **git hygiene**, including - - A fresh branch for each new feature - - Regular commits - - Descriptive commit messages -- Fanatical devotion to **test-driven development** - - Pseudocode first, then write the tests, then write code to make them pass -- Steadfast adherence to **agile development practices** - - User stories should be listed and prioritized using a Trello board - - The finished application should be deployed to Heroku (deploy early, deploy often) -- Unrelenting use of **semantic HTML** - -### Baseline - -We will begin with some in-class work, exploring the site and pondering implementation details. Before you start writing _any_ code, you should: - -- Explore the existing Media Ranker site to become familiar with the necessary functionality -- Create a Trello board to manage user stories -- Create an ERD for the models - -Then, once you have a solid plan for how to structure your project: - -- Fork and clone the repo -- Use `rails new .` to generate a new Rails project in the cloned directory - - Verify that the changes we've made to Rails' defaults (postgres as the DB, spec-style testing) have been applied -- `git add .` and `git commit -m "Initial Rails setup"` - -### Wave 1 - -Mimic the site's basic functionality around Media, without worrying (yet) about Users or Votes: -- Build a main page, with a list of the top 10 media of each category, as well as a spotlight section for the top media overall -- Build an index page with a list of all works for each category -- Allow users to add new works -- Build a details page for each piece of media -- Allow users to edit and delete works -- Make sure any models and controllers you've built so far are well-tested - -### Wave 2 - -Mimic the site's functionality around Users and Voting: -- Allow users to "log in" to the site, and use the `session` to keep track of which user is currently logged in for a given browser -- Allow users to vote for media, and sort media by vote count whenever a list of media is displayed -- Add a list of voting users to the details page for each media -- Don't allow a user to vote for the same media more than once -- Add a page for each user, as well as a page showing a summary of all users -- Make sure any models and controllers you've built so far are well-tested - -#### A note on logging in - -Passwords and security are tricky! We'll talk about that sort of thing a little in the coming weeks, but for now you don't need to provide any sort of security. The user gives you a username, and your site should just trust them. - -### Wave 3 - -Use Foundation and CSS to style the site to match the example. The layout as well as the look and feel should match as close as possible. - -### Optional Enhancement Ideas - -Once your test coverage is comprehensive, your HTML is semantic, your user stories have all been moved to the `Done` column and your application has been deployed to Heroku, you may consider the following enhancements. - -1. DRY up your code as much as you can! Techniques worth investigating: - - Helper methods - - Controller filters -1. Build category-specific pages for `index` and `new` (e.g. `/books` or `/movies/new`). These should be as DRY as possible. You might be interested in investigating _polymorphic routes_. -1. Add a [recommendation system](https://www.toptal.com/algorithms/predicting-likes-inside-a-simple-recommendation-engine) that suggests media to a user based on what they have previously voted for. +* ... diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000000..e85f913914 --- /dev/null +++ b/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require_relative 'config/application' + +Rails.application.load_tasks diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js new file mode 100644 index 0000000000..b16e53d6d5 --- /dev/null +++ b/app/assets/config/manifest.js @@ -0,0 +1,3 @@ +//= link_tree ../images +//= link_directory ../javascripts .js +//= link_directory ../stylesheets .css diff --git a/app/assets/images/.keep b/app/assets/images/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 0000000000..46b20359fa --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,15 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's +// vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. JavaScript code in this file should be added after the last require_* statement. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require rails-ujs +//= require turbolinks +//= require_tree . diff --git a/app/assets/javascripts/cable.js b/app/assets/javascripts/cable.js new file mode 100644 index 0000000000..739aa5f022 --- /dev/null +++ b/app/assets/javascripts/cable.js @@ -0,0 +1,13 @@ +// Action Cable provides the framework to deal with WebSockets in Rails. +// You can generate new channels where WebSocket features live using the `rails generate channel` command. +// +//= require action_cable +//= require_self +//= require_tree ./channels + +(function() { + this.App || (this.App = {}); + + App.cable = ActionCable.createConsumer(); + +}).call(this); diff --git a/app/assets/javascripts/channels/.keep b/app/assets/javascripts/channels/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 0000000000..d05ea0f511 --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's + * vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb new file mode 100644 index 0000000000..d672697283 --- /dev/null +++ b/app/channels/application_cable/channel.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb new file mode 100644 index 0000000000..0ff5442f47 --- /dev/null +++ b/app/channels/application_cable/connection.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 0000000000..1c07694e9d --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,3 @@ +class ApplicationController < ActionController::Base + protect_from_forgery with: :exception +end diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 0000000000..de6be7945c --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb new file mode 100644 index 0000000000..a009ace51c --- /dev/null +++ b/app/jobs/application_job.rb @@ -0,0 +1,2 @@ +class ApplicationJob < ActiveJob::Base +end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb new file mode 100644 index 0000000000..286b2239d1 --- /dev/null +++ b/app/mailers/application_mailer.rb @@ -0,0 +1,4 @@ +class ApplicationMailer < ActionMailer::Base + default from: 'from@example.com' + layout 'mailer' +end diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 0000000000..10a4cba84d --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,3 @@ +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true +end diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 0000000000..6af511b830 --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + MediaRanker + <%= csrf_meta_tags %> + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> + <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> + + + + <%= yield %> + + diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb new file mode 100644 index 0000000000..cbd34d2e9d --- /dev/null +++ b/app/views/layouts/mailer.html.erb @@ -0,0 +1,13 @@ + + + + + + + + + <%= yield %> + + diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb new file mode 100644 index 0000000000..37f0bddbd7 --- /dev/null +++ b/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/bin/bundle b/bin/bundle new file mode 100755 index 0000000000..66e9889e8b --- /dev/null +++ b/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/bin/rails b/bin/rails new file mode 100755 index 0000000000..5badb2fde0 --- /dev/null +++ b/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../config/application', __dir__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/bin/rake b/bin/rake new file mode 100755 index 0000000000..d87d5f5781 --- /dev/null +++ b/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/bin/setup b/bin/setup new file mode 100755 index 0000000000..78c4e861dc --- /dev/null +++ b/bin/setup @@ -0,0 +1,38 @@ +#!/usr/bin/env ruby +require 'pathname' +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') + + + # puts "\n== Copying sample files ==" + # unless File.exist?('config/database.yml') + # cp 'config/database.yml.sample', 'config/database.yml' + # end + + puts "\n== Preparing database ==" + system! 'bin/rails db:setup' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/bin/spring b/bin/spring new file mode 100755 index 0000000000..fb2ec2ebb4 --- /dev/null +++ b/bin/spring @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + spring = lockfile.specs.detect { |spec| spec.name == "spring" } + if spring + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/bin/update b/bin/update new file mode 100755 index 0000000000..a8e4462f20 --- /dev/null +++ b/bin/update @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a way to update your development environment automatically. + # Add necessary update steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + puts "\n== Updating database ==" + system! 'bin/rails db:migrate' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/bin/yarn b/bin/yarn new file mode 100755 index 0000000000..c2bacef836 --- /dev/null +++ b/bin/yarn @@ -0,0 +1,11 @@ +#!/usr/bin/env ruby +VENDOR_PATH = File.expand_path('..', __dir__) +Dir.chdir(VENDOR_PATH) do + begin + exec "yarnpkg #{ARGV.join(" ")}" + rescue Errno::ENOENT + $stderr.puts "Yarn executable was not detected in the system." + $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" + exit 1 + end +end diff --git a/config.ru b/config.ru new file mode 100644 index 0000000000..f7ba0b527b --- /dev/null +++ b/config.ru @@ -0,0 +1,5 @@ +# This file is used by Rack-based servers to start the application. + +require_relative 'config/environment' + +run Rails.application diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 0000000000..e73bab908f --- /dev/null +++ b/config/application.rb @@ -0,0 +1,25 @@ +require_relative 'boot' + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module MediaRanker + class Application < Rails::Application + config.generators do |g| + # Force new test files to be generated in the minitest-spec style + g.test_framework :minitest, spec: true + + # Always use .js files, never .coffee + g.javascript_engine :js + end + # Initialize configuration defaults for originally generated Rails version. + config.load_defaults 5.1 + + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + end +end diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 0000000000..30f5120df6 --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 0000000000..3a27f13933 --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,10 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: redis://localhost:6379/1 + channel_prefix: MediaRanker_production diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000000..0bd2511123 --- /dev/null +++ b/config/database.yml @@ -0,0 +1,85 @@ +# PostgreSQL. Versions 9.1 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see Rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + +development: + <<: *default + database: MediaRanker_development + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + #username: MediaRanker + + # The password associated with the postgres role (username). + #password: + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: MediaRanker_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: MediaRanker_production + username: MediaRanker + password: <%= ENV['MEDIARANKER_DATABASE_PASSWORD'] %> diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 0000000000..426333bb46 --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require_relative 'application' + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 0000000000..5187e22186 --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,54 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports. + config.consider_all_requests_local = true + + # Enable/disable caching. By default caching is disabled. + if Rails.root.join('tmp/caching-dev.txt').exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + config.action_mailer.perform_caching = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Suppress logger output for asset requests. + config.assets.quiet = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 0000000000..d242dac65c --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,91 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Attempt to read encrypted secrets from `config/secrets.yml.enc`. + # Requires an encryption key in `ENV["RAILS_MASTER_KEY"]` or + # `config/secrets.yml.key`. + config.read_encrypted_secrets = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + config.log_tags = [ :request_id ] + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "MediaRanker_#{Rails.env}" + config.action_mailer.perform_caching = false + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 0000000000..8e5cbde533 --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{1.hour.seconds.to_i}" + } + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + config.action_mailer.perform_caching = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 0000000000..89d2efab2b --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb new file mode 100644 index 0000000000..4b828e80cb --- /dev/null +++ b/config/initializers/assets.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path. +# Rails.application.config.assets.paths << Emoji.images_path +# Add Yarn node_modules folder to the asset load path. +Rails.application.config.assets.paths << Rails.root.join('node_modules') + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in the app/assets +# folder are already added. +# Rails.application.config.assets.precompile += %w( admin.js admin.css ) diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000000..59385cdf37 --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000000..5a6a32d371 --- /dev/null +++ b/config/initializers/cookies_serializer.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000000..4a994e1e7b --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 0000000000..ac033bf9dc --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 0000000000..dc1899682b --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000000..bbfc3961bf --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000000..decc5a8573 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,33 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# The following keys must be escaped otherwise they will not be retrieved by +# the default I18n backend: +# +# true, false, on, off, yes, no +# +# Instead, surround them with single quotes. +# +# en: +# 'true': 'foo' +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 0000000000..1e19380dcb --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,56 @@ +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers: a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum; this matches the default thread size of Active Record. +# +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } +threads threads_count, threads_count + +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. If you use this option +# you need to make sure to reconnect any threads in the `on_worker_boot` +# block. +# +# preload_app! + +# If you are preloading your application and using Active Record, it's +# recommended that you close any connections to the database before workers +# are forked to prevent connection leakage. +# +# before_fork do +# ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord) +# end + +# The code in the `on_worker_boot` will be called if you are using +# clustered mode by specifying a number of `workers`. After each worker +# process is booted, this block will be run. If you are using the `preload_app!` +# option, you will want to use this block to reconnect to any threads +# or connections that may have been created at application boot, as Ruby +# cannot share connections between processes. +# +# on_worker_boot do +# ActiveRecord::Base.establish_connection if defined?(ActiveRecord) +# end +# + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000000..787824f888 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,3 @@ +Rails.application.routes.draw do + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html +end diff --git a/config/secrets.yml b/config/secrets.yml new file mode 100644 index 0000000000..219b0931cd --- /dev/null +++ b/config/secrets.yml @@ -0,0 +1,32 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rails secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +# Shared secrets are available across all environments. + +# shared: +# api_key: a1B2c3D4e5F6 + +# Environmental secrets are only available for that specific environment. + +development: + secret_key_base: 0d184f44ccdcfa6622112fe213567c7f57320d795c7a49d9b4f2e09177e4d77f28e209674c403f58df1e891cf9eb1917d426acfcdf5c33aab58c9c4fa4274c71 + +test: + secret_key_base: a0b3db4fe8397110e3b06f1cd084fb3334b21a90cb0d7eca707d05315cbf0a2b8ac4a99fc1b32f1f478cdce8e407c584872dcedfb12367f9e5f0e24877eed5e0 + +# Do not keep production secrets in the unencrypted secrets file. +# Instead, either read values from the environment. +# Or, use `bin/rails secrets:setup` to configure encrypted secrets +# and move the `production:` environment over there. + +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 0000000000..c9119b40c0 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +%w( + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +).each { |path| Spring.watch(path) } diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 0000000000..1beea2accd --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). +# +# Examples: +# +# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) +# Character.create(name: 'Luke', movie: movies.first) diff --git a/lib/assets/.keep b/lib/assets/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tasks/.keep b/lib/tasks/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/log/.keep b/log/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package.json b/package.json new file mode 100644 index 0000000000..625900f9d8 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "name": "MediaRanker", + "private": true, + "dependencies": {} +} diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000000..2be3af26fc --- /dev/null +++ b/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/public/422.html b/public/422.html new file mode 100644 index 0000000000..c08eac0d1d --- /dev/null +++ b/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000000..78a030af22 --- /dev/null +++ b/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000000..37b576a4a0 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file diff --git a/test/application_system_test_case.rb b/test/application_system_test_case.rb new file mode 100644 index 0000000000..d19212abd5 --- /dev/null +++ b/test/application_system_test_case.rb @@ -0,0 +1,5 @@ +require "test_helper" + +class ApplicationSystemTestCase < ActionDispatch::SystemTestCase + driven_by :selenium, using: :chrome, screen_size: [1400, 1400] +end diff --git a/test/controllers/.keep b/test/controllers/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/.keep b/test/fixtures/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/files/.keep b/test/fixtures/files/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/helpers/.keep b/test/helpers/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/integration/.keep b/test/integration/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/mailers/.keep b/test/mailers/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/models/.keep b/test/models/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/system/.keep b/test/system/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 0000000000..10594a3248 --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,26 @@ +ENV["RAILS_ENV"] = "test" +require File.expand_path("../../config/environment", __FILE__) +require "rails/test_help" +require "minitest/rails" +require "minitest/reporters" # for Colorized output + +# For colorful output! +Minitest::Reporters.use!( + Minitest::Reporters::SpecReporter.new, + ENV, + Minitest.backtrace_filter +) + + +# To add Capybara feature tests add `gem "minitest-rails-capybara"` +# to the test group in the Gemfile and uncomment the following: +# require "minitest/rails/capybara" + +# Uncomment for awesome colorful output +# require "minitest/pride" + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + # Add more helper methods to be used by all tests here... +end diff --git a/tmp/.keep b/tmp/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vendor/.keep b/vendor/.keep new file mode 100644 index 0000000000..e69de29bb2 From fb6266b4e0495fc025955278a371f9942ddab421 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 15:12:14 -0700 Subject: [PATCH 02/61] setting up models and controllers --- app/assets/javascripts/users.js | 2 ++ app/assets/javascripts/votes.js | 2 ++ app/assets/javascripts/works.js | 2 ++ app/assets/stylesheets/users.scss | 3 ++ app/assets/stylesheets/votes.scss | 3 ++ app/assets/stylesheets/works.scss | 3 ++ app/controllers/users_controller.rb | 2 ++ app/controllers/votes_controller.rb | 2 ++ app/controllers/works_controller.rb | 2 ++ app/helpers/users_helper.rb | 2 ++ app/helpers/votes_helper.rb | 2 ++ app/helpers/works_helper.rb | 2 ++ app/models/user.rb | 3 ++ app/models/vote.rb | 4 +++ app/models/work.rb | 3 ++ db/migrate/20171010213942_create_users.rb | 8 +++++ db/migrate/20171010214431_create_votes.rb | 9 ++++++ db/migrate/20171010214644_create_works.rb | 12 +++++++ db/schema.rb | 39 +++++++++++++++++++++++ test/controllers/users_controller_test.rb | 7 ++++ test/controllers/votes_controller_test.rb | 7 ++++ test/controllers/works_controller_test.rb | 7 ++++ test/fixtures/users.yml | 11 +++++++ test/fixtures/votes.yml | 11 +++++++ test/fixtures/works.yml | 11 +++++++ test/models/user_test.rb | 9 ++++++ test/models/vote_test.rb | 9 ++++++ test/models/work_test.rb | 9 ++++++ 28 files changed, 186 insertions(+) create mode 100644 app/assets/javascripts/users.js create mode 100644 app/assets/javascripts/votes.js create mode 100644 app/assets/javascripts/works.js create mode 100644 app/assets/stylesheets/users.scss create mode 100644 app/assets/stylesheets/votes.scss create mode 100644 app/assets/stylesheets/works.scss create mode 100644 app/controllers/users_controller.rb create mode 100644 app/controllers/votes_controller.rb create mode 100644 app/controllers/works_controller.rb create mode 100644 app/helpers/users_helper.rb create mode 100644 app/helpers/votes_helper.rb create mode 100644 app/helpers/works_helper.rb create mode 100644 app/models/user.rb create mode 100644 app/models/vote.rb create mode 100644 app/models/work.rb create mode 100644 db/migrate/20171010213942_create_users.rb create mode 100644 db/migrate/20171010214431_create_votes.rb create mode 100644 db/migrate/20171010214644_create_works.rb create mode 100644 db/schema.rb create mode 100644 test/controllers/users_controller_test.rb create mode 100644 test/controllers/votes_controller_test.rb create mode 100644 test/controllers/works_controller_test.rb create mode 100644 test/fixtures/users.yml create mode 100644 test/fixtures/votes.yml create mode 100644 test/fixtures/works.yml create mode 100644 test/models/user_test.rb create mode 100644 test/models/vote_test.rb create mode 100644 test/models/work_test.rb diff --git a/app/assets/javascripts/users.js b/app/assets/javascripts/users.js new file mode 100644 index 0000000000..dee720facd --- /dev/null +++ b/app/assets/javascripts/users.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/javascripts/votes.js b/app/assets/javascripts/votes.js new file mode 100644 index 0000000000..dee720facd --- /dev/null +++ b/app/assets/javascripts/votes.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/javascripts/works.js b/app/assets/javascripts/works.js new file mode 100644 index 0000000000..dee720facd --- /dev/null +++ b/app/assets/javascripts/works.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/stylesheets/users.scss b/app/assets/stylesheets/users.scss new file mode 100644 index 0000000000..31a2eacb84 --- /dev/null +++ b/app/assets/stylesheets/users.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Users controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/votes.scss b/app/assets/stylesheets/votes.scss new file mode 100644 index 0000000000..9a6720f80e --- /dev/null +++ b/app/assets/stylesheets/votes.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Votes controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/works.scss b/app/assets/stylesheets/works.scss new file mode 100644 index 0000000000..5618452f3e --- /dev/null +++ b/app/assets/stylesheets/works.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Works controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb new file mode 100644 index 0000000000..3e74dea87f --- /dev/null +++ b/app/controllers/users_controller.rb @@ -0,0 +1,2 @@ +class UsersController < ApplicationController +end diff --git a/app/controllers/votes_controller.rb b/app/controllers/votes_controller.rb new file mode 100644 index 0000000000..ffdb2760e0 --- /dev/null +++ b/app/controllers/votes_controller.rb @@ -0,0 +1,2 @@ +class VotesController < ApplicationController +end diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb new file mode 100644 index 0000000000..56b02c9f2e --- /dev/null +++ b/app/controllers/works_controller.rb @@ -0,0 +1,2 @@ +class WorksController < ApplicationController +end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb new file mode 100644 index 0000000000..2310a240d7 --- /dev/null +++ b/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/app/helpers/votes_helper.rb b/app/helpers/votes_helper.rb new file mode 100644 index 0000000000..5a82eed07d --- /dev/null +++ b/app/helpers/votes_helper.rb @@ -0,0 +1,2 @@ +module VotesHelper +end diff --git a/app/helpers/works_helper.rb b/app/helpers/works_helper.rb new file mode 100644 index 0000000000..ccb78c2b73 --- /dev/null +++ b/app/helpers/works_helper.rb @@ -0,0 +1,2 @@ +module WorksHelper +end diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000000..db11855600 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,3 @@ +class User < ApplicationRecord + has_many :votes +end diff --git a/app/models/vote.rb b/app/models/vote.rb new file mode 100644 index 0000000000..b8b6f9f0aa --- /dev/null +++ b/app/models/vote.rb @@ -0,0 +1,4 @@ +class Vote < ApplicationRecord + belongs_to :user + belongs_to :work +end diff --git a/app/models/work.rb b/app/models/work.rb new file mode 100644 index 0000000000..0ee427352c --- /dev/null +++ b/app/models/work.rb @@ -0,0 +1,3 @@ +class Work < ApplicationRecord + has_many :votes +end diff --git a/db/migrate/20171010213942_create_users.rb b/db/migrate/20171010213942_create_users.rb new file mode 100644 index 0000000000..b877b7c380 --- /dev/null +++ b/db/migrate/20171010213942_create_users.rb @@ -0,0 +1,8 @@ +class CreateUsers < ActiveRecord::Migration[5.1] + def change + create_table :users do |t| + t.string :name + t.timestamps + end + end +end diff --git a/db/migrate/20171010214431_create_votes.rb b/db/migrate/20171010214431_create_votes.rb new file mode 100644 index 0000000000..065d5600bf --- /dev/null +++ b/db/migrate/20171010214431_create_votes.rb @@ -0,0 +1,9 @@ +class CreateVotes < ActiveRecord::Migration[5.1] + def change + create_table :votes do |t| + t.integer :user_id + t.integer :work_id + t.timestamps + end + end +end diff --git a/db/migrate/20171010214644_create_works.rb b/db/migrate/20171010214644_create_works.rb new file mode 100644 index 0000000000..03d448f433 --- /dev/null +++ b/db/migrate/20171010214644_create_works.rb @@ -0,0 +1,12 @@ +class CreateWorks < ActiveRecord::Migration[5.1] + def change + create_table :works do |t| + t.string :category + t.string :title + t.string :creator + t.integer :publication_year + t.string :description + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000000..385a6538ec --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,39 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20171010214644) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "users", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "votes", force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "works", force: :cascade do |t| + t.string "category" + t.string "title" + t.string "creator" + t.integer "publication_year" + t.string "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb new file mode 100644 index 0000000000..89decb54e0 --- /dev/null +++ b/test/controllers/users_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +describe UsersController do + # it "must be a real test" do + # flunk "Need real tests" + # end +end diff --git a/test/controllers/votes_controller_test.rb b/test/controllers/votes_controller_test.rb new file mode 100644 index 0000000000..cf4d03935f --- /dev/null +++ b/test/controllers/votes_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +describe VotesController do + # it "must be a real test" do + # flunk "Need real tests" + # end +end diff --git a/test/controllers/works_controller_test.rb b/test/controllers/works_controller_test.rb new file mode 100644 index 0000000000..d95073c22e --- /dev/null +++ b/test/controllers/works_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +describe WorksController do + # it "must be a real test" do + # flunk "Need real tests" + # end +end diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml new file mode 100644 index 0000000000..dc3ee79b5d --- /dev/null +++ b/test/fixtures/users.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the "{}" from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/fixtures/votes.yml b/test/fixtures/votes.yml new file mode 100644 index 0000000000..dc3ee79b5d --- /dev/null +++ b/test/fixtures/votes.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the "{}" from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/fixtures/works.yml b/test/fixtures/works.yml new file mode 100644 index 0000000000..dc3ee79b5d --- /dev/null +++ b/test/fixtures/works.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the "{}" from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/models/user_test.rb b/test/models/user_test.rb new file mode 100644 index 0000000000..cc862ac2d9 --- /dev/null +++ b/test/models/user_test.rb @@ -0,0 +1,9 @@ +require "test_helper" + +describe User do + let(:user) { User.new } + + it "must be valid" do + value(user).must_be :valid? + end +end diff --git a/test/models/vote_test.rb b/test/models/vote_test.rb new file mode 100644 index 0000000000..fc15947bd3 --- /dev/null +++ b/test/models/vote_test.rb @@ -0,0 +1,9 @@ +require "test_helper" + +describe Vote do + let(:vote) { Vote.new } + + it "must be valid" do + value(vote).must_be :valid? + end +end diff --git a/test/models/work_test.rb b/test/models/work_test.rb new file mode 100644 index 0000000000..f6fba7104d --- /dev/null +++ b/test/models/work_test.rb @@ -0,0 +1,9 @@ +require "test_helper" + +describe Work do + let(:work) { Work.new } + + it "must be valid" do + value(work).must_be :valid? + end +end From 33c899e557f7434f2590f7d402cdd007ca689fab Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 15:25:47 -0700 Subject: [PATCH 03/61] completed initial set up of models and controls with correct schema --- db/schema.rb | 2 ++ db/seeds.rb | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/db/schema.rb b/db/schema.rb index 385a6538ec..9dd175fc85 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -22,6 +22,8 @@ end create_table "votes", force: :cascade do |t| + t.integer "user_id" + t.integer "work_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end diff --git a/db/seeds.rb b/db/seeds.rb index 1beea2accd..07e3771fd0 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -5,3 +5,83 @@ # # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) # Character.create(name: 'Luke', movie: movies.first) + +require 'csv' + +WORK_FILE = Rails.root.join('db', 'seed_data', 'media-seeds.csv') +puts "Loading raw media data from #{WORK_FILE}" + +work_failures = [] +CSV.foreach(WORK_FILE, :headers => true) do |row| + work = Work.new + work.category = row['category'] + work.title = row['title'] + work.creator = row['creator'] + work.publication_year = row['publication_year'] + work.description = row['description'] + puts "Created driver: #{driver.inspect}" + successful = work.save + if !successful + work_failures << work + end +end + +puts "Added #{Driver.count} driver records" +puts "#{driver_failures.length} drivers failed to save" + + + +PASSENGER_FILE = Rails.root.join('db', 'seed_data', 'passengers.csv') +puts "Loading raw passenger data from #{PASSENGER_FILE}" + +passenger_failures = [] +CSV.foreach(PASSENGER_FILE, :headers => true) do |row| + passenger = Passenger.new + passenger.id = row['id'] + passenger.name = row['name'] + passenger.phone_num = row['phone_num'] + puts "Created passenger: #{passenger.inspect}" + successful = passenger.save + if !successful + passenger_failures << passenger + end +end + +puts "Added #{Passenger.count} passenger records" +puts "#{passenger_failures.length} passengers failed to save" + + + +TRIP_FILE = Rails.root.join('db', 'seed_data', 'trips.csv') +puts "Loading raw trip data from #{TRIP_FILE}" + +trip_failures = [] +CSV.foreach(TRIP_FILE, :headers => true) do |row| + trip = Trip.new + trip.id = row['id'] + trip.driver_id = row['driver_id'] + trip.passenger_id = row['passenger_id'] + trip.date = Date.strptime(row['date'], '%Y-%m-%d') + trip.rating = row['rating'] + trip.cost = row['cost'] + puts "Created trip: #{trip.inspect}" + successful = trip.save + if !successful + trip_failures << trip + end +end + +puts "Added #{Trip.count} trip records" +puts "#{trip_failures.length} trips failed to save" + + +# Since we set the primary key (the ID) manually on each of the +# tables, we've got to tell postgres to reload the latest ID +# values. Otherwise when we create a new record it will try +# to start at ID 1, which will be a conflict. +puts "Manually resetting PK sequence on each table" +ActiveRecord::Base.connection.tables.each do |t| + ActiveRecord::Base.connection.reset_pk_sequence!(t) +end + +puts "done" From 7cfee9c6ffca638aa9330772164a00a3d3c7c615 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 15:56:10 -0700 Subject: [PATCH 04/61] seeded data successfully. Added to WorksController: method for index and method for show. --- app/controllers/works_controller.rb | 8 ++++ config/routes.rb | 3 ++ db/seeds.rb | 73 ++--------------------------- 3 files changed, 15 insertions(+), 69 deletions(-) diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index 56b02c9f2e..e52f426a9a 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -1,2 +1,10 @@ class WorksController < ApplicationController + def index + @works = Work.all + end + + def show + @work = Work.find(params[:id]) + end + end diff --git a/config/routes.rb b/config/routes.rb index 787824f888..8257c8c620 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,3 +1,6 @@ Rails.application.routes.draw do + resources :users + resources :works + resources :votes # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/db/seeds.rb b/db/seeds.rb index 07e3771fd0..162e3a0669 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,14 +1,6 @@ -# This file should contain all the record creation needed to seed the database with its default values. -# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). -# -# Examples: -# -# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) -# Character.create(name: 'Luke', movie: movies.first) - require 'csv' -WORK_FILE = Rails.root.join('db', 'seed_data', 'media-seeds.csv') +WORK_FILE = Rails.root.join('db', 'media_seeds.csv') puts "Loading raw media data from #{WORK_FILE}" work_failures = [] @@ -19,69 +11,12 @@ work.creator = row['creator'] work.publication_year = row['publication_year'] work.description = row['description'] - puts "Created driver: #{driver.inspect}" + puts "Created work: #{work.inspect}" successful = work.save if !successful work_failures << work end end -puts "Added #{Driver.count} driver records" -puts "#{driver_failures.length} drivers failed to save" - - - -PASSENGER_FILE = Rails.root.join('db', 'seed_data', 'passengers.csv') -puts "Loading raw passenger data from #{PASSENGER_FILE}" - -passenger_failures = [] -CSV.foreach(PASSENGER_FILE, :headers => true) do |row| - passenger = Passenger.new - passenger.id = row['id'] - passenger.name = row['name'] - passenger.phone_num = row['phone_num'] - puts "Created passenger: #{passenger.inspect}" - successful = passenger.save - if !successful - passenger_failures << passenger - end -end - -puts "Added #{Passenger.count} passenger records" -puts "#{passenger_failures.length} passengers failed to save" - - - -TRIP_FILE = Rails.root.join('db', 'seed_data', 'trips.csv') -puts "Loading raw trip data from #{TRIP_FILE}" - -trip_failures = [] -CSV.foreach(TRIP_FILE, :headers => true) do |row| - trip = Trip.new - trip.id = row['id'] - trip.driver_id = row['driver_id'] - trip.passenger_id = row['passenger_id'] - trip.date = Date.strptime(row['date'], '%Y-%m-%d') - trip.rating = row['rating'] - trip.cost = row['cost'] - puts "Created trip: #{trip.inspect}" - successful = trip.save - if !successful - trip_failures << trip - end -end - -puts "Added #{Trip.count} trip records" -puts "#{trip_failures.length} trips failed to save" - - -# Since we set the primary key (the ID) manually on each of the -# tables, we've got to tell postgres to reload the latest ID -# values. Otherwise when we create a new record it will try -# to start at ID 1, which will be a conflict. -puts "Manually resetting PK sequence on each table" -ActiveRecord::Base.connection.tables.each do |t| - ActiveRecord::Base.connection.reset_pk_sequence!(t) -end - -puts "done" +puts "Added #{Work.count} work records" +puts "#{work_failures.length} works failed to save" From d1bc8486ff34fd44230c00fe700daecdb20483aa Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 15:58:12 -0700 Subject: [PATCH 05/61] added folder for main page in views, and added index html erb file. --- app/views/main/index.html.erb | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/views/main/index.html.erb diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb new file mode 100644 index 0000000000..e69de29bb2 From 29631b78bbf8e47b1fbc0f19a4b3a5b347f17a6a Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 16:24:44 -0700 Subject: [PATCH 06/61] works#index page, creating table --- app/views/main/index.html.erb | 1 + app/views/works/index.html.erb | 30 ++++++++++++++++++++++++++++++ config/routes.rb | 2 ++ 3 files changed, 33 insertions(+) create mode 100644 app/views/works/index.html.erb diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index e69de29bb2..d782d29e53 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -0,0 +1 @@ +This is the homepage diff --git a/app/views/works/index.html.erb b/app/views/works/index.html.erb new file mode 100644 index 0000000000..341b4ce353 --- /dev/null +++ b/app/views/works/index.html.erb @@ -0,0 +1,30 @@ +
+

+ List of Works +

+ +

Albums +

+ + + + + + + + + + + + <% @works.each do |work| %> + + + + + + + + <% end %> + +
VotesTitleCreated ByPublishedUpvote
TBD <%= work.title %> <%= work.creator %> <%= work.publication_year %> upvote button
+
diff --git a/config/routes.rb b/config/routes.rb index 8257c8c620..db3be5fcc6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,5 +2,7 @@ resources :users resources :works resources :votes + + root 'main#index' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end From 753abb0ff63f12b5fc997295982c42790b62f291 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 16:32:04 -0700 Subject: [PATCH 07/61] still working on table for all media. --- app/controllers/works_controller.rb | 8 ++++---- app/views/main/index.html.erb | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 app/views/main/index.html.erb diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index e52f426a9a..4d715b6df6 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -3,8 +3,8 @@ def index @works = Work.all end - def show - @work = Work.find(params[:id]) - end - + # def show + # @work = Work.find(params[:id]) + # end + end diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb deleted file mode 100644 index d782d29e53..0000000000 --- a/app/views/main/index.html.erb +++ /dev/null @@ -1 +0,0 @@ -This is the homepage From 421314cefb48bcf87eb07884b188f2012e243235 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 20:46:57 -0700 Subject: [PATCH 08/61] added main controller for homepage and a main#index view --- app/assets/javascripts/main.js | 2 + app/assets/stylesheets/main.scss | 3 + app/controllers/main_controller.rb | 4 ++ app/helpers/main_helper.rb | 2 + app/views/main/index.html.erb | 1 + app/views/works/index.html.erb | 70 +++++++++++++++++++++--- test/controllers/main_controller_test.rb | 7 +++ 7 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 app/assets/javascripts/main.js create mode 100644 app/assets/stylesheets/main.scss create mode 100644 app/controllers/main_controller.rb create mode 100644 app/helpers/main_helper.rb create mode 100644 app/views/main/index.html.erb create mode 100644 test/controllers/main_controller_test.rb diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js new file mode 100644 index 0000000000..dee720facd --- /dev/null +++ b/app/assets/javascripts/main.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss new file mode 100644 index 0000000000..971b13c825 --- /dev/null +++ b/app/assets/stylesheets/main.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Main controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb new file mode 100644 index 0000000000..88181c281f --- /dev/null +++ b/app/controllers/main_controller.rb @@ -0,0 +1,4 @@ +class MainController < ApplicationController + def index + end +end diff --git a/app/helpers/main_helper.rb b/app/helpers/main_helper.rb new file mode 100644 index 0000000000..826effed96 --- /dev/null +++ b/app/helpers/main_helper.rb @@ -0,0 +1,2 @@ +module MainHelper +end diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb new file mode 100644 index 0000000000..d782d29e53 --- /dev/null +++ b/app/views/main/index.html.erb @@ -0,0 +1 @@ +This is the homepage diff --git a/app/views/works/index.html.erb b/app/views/works/index.html.erb index 341b4ce353..26ec220dcf 100644 --- a/app/views/works/index.html.erb +++ b/app/views/works/index.html.erb @@ -17,14 +17,70 @@ <% @works.each do |work| %> - - TBD - <%= work.title %> - <%= work.creator %> - <%= work.publication_year %> - upvote button - + <% if work.category == "album" %> + + TBD + <%= work.title %> + <%= work.creator %> + <%= work.publication_year %> + upvote button + + <% end %> <% end %> + +

Books +

+ + + + + + + + + + + + <% @works.each do |work| %> + <% if work.category == "book" %> + + + + + + + + <% end %> + <% end %> + +
VotesTitleCreated ByPublishedUpvote
TBD <%= work.title %> <%= work.creator %> <%= work.publication_year %> upvote button
+ +

Movies +

+ + + + + + + + + + + + <% @works.each do |work| %> + <% if work.category == "movie" %> + + + + + + + + <% end %> + <% end %> + +
VotesTitleCreated ByPublishedUpvote
TBD <%= work.title %> <%= work.creator %> <%= work.publication_year %> upvote button
diff --git a/test/controllers/main_controller_test.rb b/test/controllers/main_controller_test.rb new file mode 100644 index 0000000000..33c8140433 --- /dev/null +++ b/test/controllers/main_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +describe MainController do + # it "must be a real test" do + # flunk "Need real tests" + # end +end From f002dac6000eeda83e7489a1a913c96eeb0c03ec Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Tue, 10 Oct 2017 21:36:57 -0700 Subject: [PATCH 09/61] Attempted to add a form to create the tables to display full list of media by category, but it's not working. Updated current table to include number of votes --- app/views/works/_list.html.erb | 32 ++++++++++++++++++++++++++++++++ app/views/works/index.html.erb | 9 ++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 app/views/works/_list.html.erb diff --git a/app/views/works/_list.html.erb b/app/views/works/_list.html.erb new file mode 100644 index 0000000000..c4a9c0e324 --- /dev/null +++ b/app/views/works/_list.html.erb @@ -0,0 +1,32 @@ + +I this doing anything? + + +<% @data = Work.where(:category => @category) %> + +

<%=@category.capitalize%>s +

+ + + + + + + + + + + + <% @data.each do |data| %> + + + + + + + + + + <% end %> + +
VotesTitleCreated ByPublishedUpvote
TBD <%= data.title %> <%= data.creator %> <%= data.publication_year %> upvote button
diff --git a/app/views/works/index.html.erb b/app/views/works/index.html.erb index 26ec220dcf..bcdc6bc0df 100644 --- a/app/views/works/index.html.erb +++ b/app/views/works/index.html.erb @@ -3,6 +3,9 @@ List of Works + <% @category = "album" %> + <%= render partial: 'list' %> +

Albums

@@ -19,7 +22,7 @@ <% @works.each do |work| %> <% if work.category == "album" %> - + @@ -46,7 +49,7 @@ <% @works.each do |work| %> <% if work.category == "book" %> - + @@ -73,7 +76,7 @@ <% @works.each do |work| %> <% if work.category == "movie" %> - + From e6f8f2c2b87c32b5157a62d55fe406a9a933ae5b Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Wed, 11 Oct 2017 18:28:05 -0700 Subject: [PATCH 10/61] added defs in works controller. Fixed issue in Works Model def for top ten. Fixed issue in partial and works index html page. Dried up the code --- app/controllers/works_controller.rb | 56 ++++++++++++++++++- app/models/work.rb | 7 +++ app/views/main/index.html.erb | 1 + app/views/works/_list.html.erb | 7 +-- app/views/works/index.html.erb | 87 +++-------------------------- db/schema.rb | 12 ---- 6 files changed, 70 insertions(+), 100 deletions(-) diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index 4d715b6df6..73c4d82d6d 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -3,8 +3,58 @@ def index @works = Work.all end - # def show - # @work = Work.find(params[:id]) - # end + def show + find_work_by_id + end + + def new + @work = Work.new + end + + def create + @work = Work.new(work_params) + if @work.save + redirect_to works_path + return + else + render :new, status: :bad_request + return + end + end + + def edit + find_work_by_id + end + + def update + if find_work_by_id + @work.update_attributes(work_params) + if @work.save + redirect_to work_path(@work) + return + else + render edit, status: :bad_request + return + end + end + + end + + def destroy + + end + + private + + def work_params + params.require(:work).permit(:title, :category, :creator, :publication_year, :description) + end + + def find_work_by_id + @work = work.find(params[:id]) + unless @work + head :not_found + end + end end diff --git a/app/models/work.rb b/app/models/work.rb index 0ee427352c..6655e507b5 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -1,3 +1,10 @@ class Work < ApplicationRecord has_many :votes + + def self.top_ten + top_ten = all.sort_by do |work| + work.votes.count + end + return top_ten[0...10] + end end diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index d782d29e53..b0c53d67d4 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -1 +1,2 @@ This is the homepage +<%= Work.top_ten %> diff --git a/app/views/works/_list.html.erb b/app/views/works/_list.html.erb index c4a9c0e324..0464f70871 100644 --- a/app/views/works/_list.html.erb +++ b/app/views/works/_list.html.erb @@ -1,10 +1,7 @@ - -I this doing anything? +<% @data = Work.where(:category => category) %> -<% @data = Work.where(:category => @category) %> - -

<%=@category.capitalize%>s +

<%= category.capitalize%>s

TBD <%= work.votes.count %> <%= work.title %> <%= work.creator %> <%= work.publication_year %>
TBD <%= work.votes.count %> <%= work.title %> <%= work.creator %> <%= work.publication_year %>
TBD <%= work.votes.count %> <%= work.title %> <%= work.creator %> <%= work.publication_year %>
diff --git a/app/views/works/index.html.erb b/app/views/works/index.html.erb index bcdc6bc0df..8a3a8e53ff 100644 --- a/app/views/works/index.html.erb +++ b/app/views/works/index.html.erb @@ -1,89 +1,16 @@ +

List of Works

- <% @category = "album" %> - <%= render partial: 'list' %> + <% @category = "album" %> + <%= render partial: 'list', locals: { category: "album" } %> -

Albums -

-
- - - - - - - - - - - <% @works.each do |work| %> - <% if work.category == "album" %> - - - - - - - - <% end %> - <% end %> - -
VotesTitleCreated ByPublishedUpvote
<%= work.votes.count %> <%= work.title %> <%= work.creator %> <%= work.publication_year %> upvote button
+ <% @category = "book" %> + <%= render partial: 'list', locals: { category: "book" } %> -

Books -

- - - - - - - - - - - - <% @works.each do |work| %> - <% if work.category == "book" %> - - - - - - - - <% end %> - <% end %> - -
VotesTitleCreated ByPublishedUpvote
<%= work.votes.count %> <%= work.title %> <%= work.creator %> <%= work.publication_year %> upvote button
+ <% @category = "movie" %> + <%= render partial: 'list', locals: { category: "movie" } %> -

Movies -

- - - - - - - - - - - - <% @works.each do |work| %> - <% if work.category == "movie" %> - - - - - - - - <% end %> - <% end %> - -
VotesTitleCreated ByPublishedUpvote
<%= work.votes.count %> <%= work.title %> <%= work.creator %> <%= work.publication_year %> upvote button
diff --git a/db/schema.rb b/db/schema.rb index 9dd175fc85..cf1cbcfd04 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1,15 +1,3 @@ -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended that you check this file into your version control system. - ActiveRecord::Schema.define(version: 20171010214644) do # These are extensions that must be enabled in order to support this database From 8555095e31d36a9db511a8f810753ac5ba83dcd7 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Wed, 11 Oct 2017 22:17:42 -0700 Subject: [PATCH 11/61] forgot to commit updates. Nearly completed wave 1, refactoring some code. --- app/controllers/main_controller.rb | 1 + app/controllers/works_controller.rb | 16 +++++++-- app/models/work.rb | 49 ++++++++++++++++++++++++-- app/views/layouts/application.html.erb | 1 + app/views/main/index.html.erb | 30 ++++++++++++++-- app/views/works/_form.html.erb | 17 +++++++++ app/views/works/_list.html.erb | 13 +++---- app/views/works/index.html.erb | 13 ++++--- app/views/works/new.html.erb | 1 + app/views/works/show.html.erb | 17 +++++++++ 10 files changed, 135 insertions(+), 23 deletions(-) create mode 100644 app/views/works/_form.html.erb create mode 100644 app/views/works/new.html.erb create mode 100644 app/views/works/show.html.erb diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb index 88181c281f..f8759b2476 100644 --- a/app/controllers/main_controller.rb +++ b/app/controllers/main_controller.rb @@ -1,4 +1,5 @@ class MainController < ApplicationController def index + # @top_ten_albums = Work.where(category: "album").limit(10) end end diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index 73c4d82d6d..27143b6ae3 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -1,6 +1,6 @@ class WorksController < ApplicationController def index - @works = Work.all + # @works = Work.all end def show @@ -13,6 +13,8 @@ def new def create @work = Work.new(work_params) + @work.creator = "Unknown" if @work.creator.nil? + if @work.save redirect_to works_path return @@ -41,7 +43,13 @@ def update end def destroy - + p "heere 4" + if find_work_by_id + p "heere" + @work.destroy + redirect_to works_path + return + end end private @@ -51,10 +59,12 @@ def work_params end def find_work_by_id - @work = work.find(params[:id]) + @work = Work.find(params[:id]) unless @work head :not_found end + + return @work end end diff --git a/app/models/work.rb b/app/models/work.rb index 6655e507b5..cd6425bd0c 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -1,10 +1,55 @@ class Work < ApplicationRecord has_many :votes - def self.top_ten - top_ten = all.sort_by do |work| + validates :title, presence: {message: "Media must have a title."} + validates :category, presence: {message: "Media must have a category."} + + def self.sort_by_votes + sort_by_votes = all.sort_by do |work| + work.votes.count + end + return sort_by_votes + end + + def self.all_albums + albums = all.where(category: "albums") + return albums + end + + def self.all_books + books = all.where(category: "books") + return books + end + + def self.all_movies + movies = all.where(category: "movies") + return movies + end + + def self.top_ten_albums + category = "album" + self.top_ten(category) + end + + def self.top_ten_books + category = "book" + self.top_ten(category) + end + + def self.top_ten_movies + category = "movie" + self.top_ten(category) + end + + private + + def self.top_ten(category) + top_ten = Work.where(category: category) + top_ten = top_ten.sort_by do |work| work.votes.count end return top_ten[0...10] end + + end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 6af511b830..34cb6495f9 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -9,6 +9,7 @@ + <%= link_to "Add New Work", new_work_path %> <%= yield %> diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index b0c53d67d4..5d54ed0a87 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -1,2 +1,28 @@ -This is the homepage -<%= Work.top_ten %> + +<% work = Work.sort_by_votes.first %> +

+<%= "Media Spotlight: #{work.title} by #{work.creator}" %> +

<%= "Votes: #{work.votes.count}" %>

+

+ + +

Top Albums

+
    + <% Work.top_ten_albums.each do |work| %> +
  1. <%= "#{work.title} by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  2. + <% end %> +
+ +

Top Books

+
    + <% Work.top_ten_books.each do |work| %> +
  1. <%= "#{work.title} by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  2. + <% end %> +
+ +

Top Movies

+
    + <% Work.top_ten_movies.each do |work| %> +
  1. <%= "#{work.title} by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  2. + <% end %> +
diff --git a/app/views/works/_form.html.erb b/app/views/works/_form.html.erb new file mode 100644 index 0000000000..c488ce27ff --- /dev/null +++ b/app/views/works/_form.html.erb @@ -0,0 +1,17 @@ +
+ + <%= form_for @work do |f| %> + <%= f.label :title %> + <%= f.text_field :title, placeholder: "Media Title"%> + <%= f.label :creator %> + <%= f.text_field :creator, placeholder: "Bob Dylan"%> + <%= f.label :category %> + <%= f.select(:category, options_for_select([["Album", "album"], ["Book", "book"], ["Movie", "movie"]]))%> + <%= f.label :publication_year %> + <%= f.number_field :publication_year, placeholder: "1999" %> + <%= f.label :description %> + <%= f.text_field :description, placeholder: "Description" %> + + <%= f.submit %> + <% end %> +
diff --git a/app/views/works/_list.html.erb b/app/views/works/_list.html.erb index 0464f70871..5ddb90f51f 100644 --- a/app/views/works/_list.html.erb +++ b/app/views/works/_list.html.erb @@ -1,8 +1,3 @@ - -<% @data = Work.where(:category => category) %> - -

<%= category.capitalize%>s -

@@ -14,13 +9,13 @@ - <% @data.each do |data| %> + <% works.each do |work| %> - - - + + + diff --git a/app/views/works/index.html.erb b/app/views/works/index.html.erb index 8a3a8e53ff..b8961178b0 100644 --- a/app/views/works/index.html.erb +++ b/app/views/works/index.html.erb @@ -3,14 +3,13 @@

List of Works

+

Albums

+ <%= render partial: 'list', locals: { works: Work.where(:category => "album") } %> - <% @category = "album" %> - <%= render partial: 'list', locals: { category: "album" } %> +

Books

+ <%= render partial: 'list', locals: { works: Work.where(:category => "book") } %> - <% @category = "book" %> - <%= render partial: 'list', locals: { category: "book" } %> - - <% @category = "movie" %> - <%= render partial: 'list', locals: { category: "movie" } %> +

Movies

+ <%= render partial: 'list', locals: { works: Work.where(:category => "movie") } %> diff --git a/app/views/works/new.html.erb b/app/views/works/new.html.erb new file mode 100644 index 0000000000..23997ae13a --- /dev/null +++ b/app/views/works/new.html.erb @@ -0,0 +1 @@ +<%= render partial: 'form' %> diff --git a/app/views/works/show.html.erb b/app/views/works/show.html.erb new file mode 100644 index 0000000000..352000904a --- /dev/null +++ b/app/views/works/show.html.erb @@ -0,0 +1,17 @@ + +
+

<%= @work.title %>

+<% if @work.creator != nil || @work.creator == "Unknown" %> +

<%= "by #{@work.creator}" %>

+<%end%> +
    +
  • Category: <%= @work.category %>
  • +
  • Publication Year: <%= @work.publication_year %>
  • +
  • Description: <%= @work.description %>
  • +
+
+ +
+<%=link_to "Edit", edit_work_path %> +<%=link_to "Delete", work_path, method: :delete, data: { confirm: "Are you sure you want to delete this #{@work.category}?" } %> +
From db93a93a9589be64ae8075943bbf5c9f8e6eeac9 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Wed, 11 Oct 2017 22:27:08 -0700 Subject: [PATCH 12/61] finished refactoring the list form for works index --- app/models/work.rb | 9 +++------ app/views/works/index.html.erb | 6 +++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/models/work.rb b/app/models/work.rb index cd6425bd0c..de7c96a51a 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -12,18 +12,15 @@ def self.sort_by_votes end def self.all_albums - albums = all.where(category: "albums") - return albums + return Work.where(category: "album") end def self.all_books - books = all.where(category: "books") - return books + return Work.where(category: "book") end def self.all_movies - movies = all.where(category: "movies") - return movies + return Work.where(category: "movie") end def self.top_ten_albums diff --git a/app/views/works/index.html.erb b/app/views/works/index.html.erb index b8961178b0..d100581e8d 100644 --- a/app/views/works/index.html.erb +++ b/app/views/works/index.html.erb @@ -4,12 +4,12 @@ List of Works

Albums

- <%= render partial: 'list', locals: { works: Work.where(:category => "album") } %> + <%= render partial: 'list', locals: { works: Work.all_albums } %>

Books

- <%= render partial: 'list', locals: { works: Work.where(:category => "book") } %> + <%= render partial: 'list', locals: { works: Work.all_books } %>

Movies

- <%= render partial: 'list', locals: { works: Work.where(:category => "movie") } %> + <%= render partial: 'list', locals: { works: Work.all_movies } %> From 61dac8a396efe318a7f25ff57137be1dc872e560 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Wed, 11 Oct 2017 22:33:24 -0700 Subject: [PATCH 13/61] edited routes to only have what I am currently using --- config/routes.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index db3be5fcc6..9d66c81a59 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,7 @@ Rails.application.routes.draw do - resources :users - resources :works - resources :votes + resources :users, only: [:index] + resources :works, only: [:index, :show, :edit, :update, :create, :destroy] + # resources :votes root 'main#index' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From c8ad15c6c0a1c34fb02306406015328704d406d5 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Thu, 12 Oct 2017 00:01:16 -0700 Subject: [PATCH 14/61] wrote just a few tests --- app/models/user.rb | 2 ++ test/models/user_test.rb | 19 ++++++++++++++++--- test/models/vote_test.rb | 18 +++++++++--------- test/models/work_test.rb | 18 +++++++++--------- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index db11855600..fd329f8b84 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,5 @@ class User < ApplicationRecord has_many :votes + + validates :name, presence: {message: "User must have a category."} end diff --git a/test/models/user_test.rb b/test/models/user_test.rb index cc862ac2d9..a7da415422 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -1,9 +1,22 @@ require "test_helper" describe User do - let(:user) { User.new } + describe "validations" do + it "can be created with a name" do + u = User.new(name: "Tanja") + u.valid?.must_equal true + end - it "must be valid" do - value(user).must_be :valid? + it "must have a name" do + u = User.new + u.valid?.must_equal false + end + end + + describe "relationships" do + it "can access votes" do + u = User.new(name: "Tanja") + u.votes.count.must_equal 0 + end end end diff --git a/test/models/vote_test.rb b/test/models/vote_test.rb index fc15947bd3..d361711147 100644 --- a/test/models/vote_test.rb +++ b/test/models/vote_test.rb @@ -1,9 +1,9 @@ -require "test_helper" - -describe Vote do - let(:vote) { Vote.new } - - it "must be valid" do - value(vote).must_be :valid? - end -end +# require "test_helper" +# +# describe Vote do +# let(:vote) { Vote.new } +# +# it "must be valid" do +# value(vote).must_be :valid? +# end +# end diff --git a/test/models/work_test.rb b/test/models/work_test.rb index f6fba7104d..183910e650 100644 --- a/test/models/work_test.rb +++ b/test/models/work_test.rb @@ -1,9 +1,9 @@ -require "test_helper" - -describe Work do - let(:work) { Work.new } - - it "must be valid" do - value(work).must_be :valid? - end -end +# require "test_helper" +# +# describe Work do +# let(:work) { Work.new } +# +# it "must be valid" do +# value(work).must_be :valid? +# end +# end From 004b742c04f395002e49bd437e9040c3fa858962 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Thu, 12 Oct 2017 14:36:39 -0700 Subject: [PATCH 15/61] we did some stuff for css framework in class that did not work --- app/assets/stylesheets/foundation.css | 5805 ++++++++++++++++++++++++ app/views/layouts/application.html.erb | 8 +- config/routes.rb | 2 +- 3 files changed, 5813 insertions(+), 2 deletions(-) create mode 100644 app/assets/stylesheets/foundation.css diff --git a/app/assets/stylesheets/foundation.css b/app/assets/stylesheets/foundation.css new file mode 100644 index 0000000000..ac6648c4d6 --- /dev/null +++ b/app/assets/stylesheets/foundation.css @@ -0,0 +1,5805 @@ +@charset "UTF-8"; +/** + * Foundation for Sites by ZURB + * Version 6.4.2 + * foundation.zurb.com + * Licensed under MIT Open Source + */ +@media print, screen and (min-width: 40em) { + .reveal, .reveal.tiny, .reveal.small, .reveal.large { + right: auto; + left: auto; + margin: 0 auto; } } + +/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ +/* Document + ========================================================================== */ +/** + * 1. Change the default font family in all browsers (opinionated). + * 2. Correct the line height in all browsers. + * 3. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ +html { + font-family: sans-serif; + /* 1 */ + line-height: 1.15; + /* 2 */ + -ms-text-size-adjust: 100%; + /* 3 */ + -webkit-text-size-adjust: 100%; + /* 3 */ } + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers (opinionated). + */ +body { + margin: 0; } + +/** + * Add the correct display in IE 9-. + */ +article, +aside, +footer, +header, +nav, +section { + display: block; } + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; } + +/* Grouping content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +figcaption, +figure { + display: block; } + +/** + * Add the correct margin in IE 8. + */ +figure { + margin: 1em 40px; } + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ } + +/** + * Add the correct display in IE. + */ +main { + display: block; } + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } + +/* Links + ========================================================================== */ +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ +a { + background-color: transparent; + /* 1 */ + -webkit-text-decoration-skip: objects; + /* 2 */ } + +/** + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ +a:active, +a:hover { + outline-width: 0; } + +/* Text-level semantics + ========================================================================== */ +/** + * 1. Remove the bottom border in Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ } + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ +b, +strong { + font-weight: inherit; } + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; } + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } + +/** + * Add the correct font style in Android 4.3-. + */ +dfn { + font-style: italic; } + +/** + * Add the correct background and color in IE 9-. + */ +mark { + background-color: #ff0; + color: #000; } + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; } + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; } + +sub { + bottom: -0.25em; } + +sup { + top: -0.5em; } + +/* Embedded content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +audio, +video { + display: inline-block; } + +/** + * Add the correct display in iOS 4-7. + */ +audio:not([controls]) { + display: none; + height: 0; } + +/** + * Remove the border on images inside links in IE 10-. + */ +img { + border-style: none; } + +/** + * Hide the overflow in IE. + */ +svg:not(:root) { + overflow: hidden; } + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ } + +/** + * Show the overflow in IE. + */ +button { + overflow: visible; } + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; } + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; + /* 2 */ } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + /** + * Remove the inner border and padding in Firefox. + */ + /** + * Restore the focus styles unset by the previous rule. + */ } + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; } + button:-moz-focusring, + [type="button"]:-moz-focusring, + [type="reset"]:-moz-focusring, + [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; } + +/** + * Show the overflow in Edge. + */ +input { + overflow: visible; } + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ } + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; } + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ + /** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ } + [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ } + +/** + * Change the border, margin, and padding in all browsers (opinionated). + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; } + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + color: inherit; + /* 2 */ + white-space: normal; + /* 1 */ } + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } + +/** + * Remove the default vertical scrollbar in IE. + */ +textarea { + overflow: auto; } + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE, and Firefox. + */ +details { + display: block; } + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; } + +/* + * Add the correct display in IE 9-. + */ +menu { + display: block; } + +/* Scripting + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +canvas { + display: inline-block; } + +/** + * Add the correct display in IE. + */ +template { + display: none; } + +/* Hidden + ========================================================================== */ +/** + * Add the correct display in IE 10-. + */ +[hidden] { + display: none; } + +.foundation-mq { + font-family: "small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"; } + +html { + box-sizing: border-box; + font-size: 100%; } + +*, +*::before, +*::after { + box-sizing: inherit; } + +body { + margin: 0; + padding: 0; + background: #fefefe; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: 1.5; + color: #0a0a0a; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +img { + display: inline-block; + vertical-align: middle; + max-width: 100%; + height: auto; + -ms-interpolation-mode: bicubic; } + +textarea { + height: auto; + min-height: 50px; + border-radius: 0; } + +select { + box-sizing: border-box; + width: 100%; + border-radius: 0; } + +.map_canvas img, +.map_canvas embed, +.map_canvas object, +.mqa-display img, +.mqa-display embed, +.mqa-display object { + max-width: none !important; } + +button { + padding: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: 0; + border-radius: 0; + background: transparent; + line-height: 1; + cursor: auto; } + [data-whatinput='mouse'] button { + outline: 0; } + +pre { + overflow: auto; } + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; } + +.is-visible { + display: block !important; } + +.is-hidden { + display: none !important; } + +.grid-container { + padding-right: 0.625rem; + padding-left: 0.625rem; + max-width: 75rem; + margin: 0 auto; } + @media print, screen and (min-width: 40em) { + .grid-container { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + .grid-container.fluid { + padding-right: 0.625rem; + padding-left: 0.625rem; + max-width: 100%; + margin: 0 auto; } + @media print, screen and (min-width: 40em) { + .grid-container.fluid { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + .grid-container.full { + padding-right: 0; + padding-left: 0; + max-width: 100%; + margin: 0 auto; } + +.grid-x { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; } + +.cell { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + min-height: 0px; + min-width: 0px; + width: 100%; } + .cell.auto { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .cell.shrink { + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + +.grid-x > .auto { + width: auto; } + +.grid-x > .shrink { + width: auto; } + +.grid-x > .small-shrink, .grid-x > .small-full, .grid-x > .small-1, .grid-x > .small-2, .grid-x > .small-3, .grid-x > .small-4, .grid-x > .small-5, .grid-x > .small-6, .grid-x > .small-7, .grid-x > .small-8, .grid-x > .small-9, .grid-x > .small-10, .grid-x > .small-11, .grid-x > .small-12 { + -ms-flex-preferred-size: auto; + flex-basis: auto; } + +@media print, screen and (min-width: 40em) { + .grid-x > .medium-shrink, .grid-x > .medium-full, .grid-x > .medium-1, .grid-x > .medium-2, .grid-x > .medium-3, .grid-x > .medium-4, .grid-x > .medium-5, .grid-x > .medium-6, .grid-x > .medium-7, .grid-x > .medium-8, .grid-x > .medium-9, .grid-x > .medium-10, .grid-x > .medium-11, .grid-x > .medium-12 { + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + +@media print, screen and (min-width: 64em) { + .grid-x > .large-shrink, .grid-x > .large-full, .grid-x > .large-1, .grid-x > .large-2, .grid-x > .large-3, .grid-x > .large-4, .grid-x > .large-5, .grid-x > .large-6, .grid-x > .large-7, .grid-x > .large-8, .grid-x > .large-9, .grid-x > .large-10, .grid-x > .large-11, .grid-x > .large-12 { + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + +.grid-x > .small-1 { + width: 8.33333%; } + +.grid-x > .small-2 { + width: 16.66667%; } + +.grid-x > .small-3 { + width: 25%; } + +.grid-x > .small-4 { + width: 33.33333%; } + +.grid-x > .small-5 { + width: 41.66667%; } + +.grid-x > .small-6 { + width: 50%; } + +.grid-x > .small-7 { + width: 58.33333%; } + +.grid-x > .small-8 { + width: 66.66667%; } + +.grid-x > .small-9 { + width: 75%; } + +.grid-x > .small-10 { + width: 83.33333%; } + +.grid-x > .small-11 { + width: 91.66667%; } + +.grid-x > .small-12 { + width: 100%; } + +@media print, screen and (min-width: 40em) { + .grid-x > .medium-auto { + -ms-flex: 1 1 0px; + flex: 1 1 0px; + width: auto; } + .grid-x > .medium-shrink { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; } + .grid-x > .medium-1 { + width: 8.33333%; } + .grid-x > .medium-2 { + width: 16.66667%; } + .grid-x > .medium-3 { + width: 25%; } + .grid-x > .medium-4 { + width: 33.33333%; } + .grid-x > .medium-5 { + width: 41.66667%; } + .grid-x > .medium-6 { + width: 50%; } + .grid-x > .medium-7 { + width: 58.33333%; } + .grid-x > .medium-8 { + width: 66.66667%; } + .grid-x > .medium-9 { + width: 75%; } + .grid-x > .medium-10 { + width: 83.33333%; } + .grid-x > .medium-11 { + width: 91.66667%; } + .grid-x > .medium-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .grid-x > .large-auto { + -ms-flex: 1 1 0px; + flex: 1 1 0px; + width: auto; } + .grid-x > .large-shrink { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; } + .grid-x > .large-1 { + width: 8.33333%; } + .grid-x > .large-2 { + width: 16.66667%; } + .grid-x > .large-3 { + width: 25%; } + .grid-x > .large-4 { + width: 33.33333%; } + .grid-x > .large-5 { + width: 41.66667%; } + .grid-x > .large-6 { + width: 50%; } + .grid-x > .large-7 { + width: 58.33333%; } + .grid-x > .large-8 { + width: 66.66667%; } + .grid-x > .large-9 { + width: 75%; } + .grid-x > .large-10 { + width: 83.33333%; } + .grid-x > .large-11 { + width: 91.66667%; } + .grid-x > .large-12 { + width: 100%; } } + +.grid-margin-x:not(.grid-x) > .cell { + width: auto; } + +.grid-margin-y:not(.grid-y) > .cell { + height: auto; } + +.grid-margin-x { + margin-left: -0.625rem; + margin-right: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-x { + margin-left: -0.9375rem; + margin-right: -0.9375rem; } } + .grid-margin-x > .cell { + width: calc(100% - 1.25rem); + margin-left: 0.625rem; + margin-right: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-x > .cell { + width: calc(100% - 1.875rem); + margin-left: 0.9375rem; + margin-right: 0.9375rem; } } + .grid-margin-x > .auto { + width: auto; } + .grid-margin-x > .shrink { + width: auto; } + .grid-margin-x > .small-1 { + width: calc(8.33333% - 1.25rem); } + .grid-margin-x > .small-2 { + width: calc(16.66667% - 1.25rem); } + .grid-margin-x > .small-3 { + width: calc(25% - 1.25rem); } + .grid-margin-x > .small-4 { + width: calc(33.33333% - 1.25rem); } + .grid-margin-x > .small-5 { + width: calc(41.66667% - 1.25rem); } + .grid-margin-x > .small-6 { + width: calc(50% - 1.25rem); } + .grid-margin-x > .small-7 { + width: calc(58.33333% - 1.25rem); } + .grid-margin-x > .small-8 { + width: calc(66.66667% - 1.25rem); } + .grid-margin-x > .small-9 { + width: calc(75% - 1.25rem); } + .grid-margin-x > .small-10 { + width: calc(83.33333% - 1.25rem); } + .grid-margin-x > .small-11 { + width: calc(91.66667% - 1.25rem); } + .grid-margin-x > .small-12 { + width: calc(100% - 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-margin-x > .auto { + width: auto; } + .grid-margin-x > .shrink { + width: auto; } + .grid-margin-x > .small-1 { + width: calc(8.33333% - 1.875rem); } + .grid-margin-x > .small-2 { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x > .small-3 { + width: calc(25% - 1.875rem); } + .grid-margin-x > .small-4 { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x > .small-5 { + width: calc(41.66667% - 1.875rem); } + .grid-margin-x > .small-6 { + width: calc(50% - 1.875rem); } + .grid-margin-x > .small-7 { + width: calc(58.33333% - 1.875rem); } + .grid-margin-x > .small-8 { + width: calc(66.66667% - 1.875rem); } + .grid-margin-x > .small-9 { + width: calc(75% - 1.875rem); } + .grid-margin-x > .small-10 { + width: calc(83.33333% - 1.875rem); } + .grid-margin-x > .small-11 { + width: calc(91.66667% - 1.875rem); } + .grid-margin-x > .small-12 { + width: calc(100% - 1.875rem); } + .grid-margin-x > .medium-auto { + width: auto; } + .grid-margin-x > .medium-shrink { + width: auto; } + .grid-margin-x > .medium-1 { + width: calc(8.33333% - 1.875rem); } + .grid-margin-x > .medium-2 { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x > .medium-3 { + width: calc(25% - 1.875rem); } + .grid-margin-x > .medium-4 { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x > .medium-5 { + width: calc(41.66667% - 1.875rem); } + .grid-margin-x > .medium-6 { + width: calc(50% - 1.875rem); } + .grid-margin-x > .medium-7 { + width: calc(58.33333% - 1.875rem); } + .grid-margin-x > .medium-8 { + width: calc(66.66667% - 1.875rem); } + .grid-margin-x > .medium-9 { + width: calc(75% - 1.875rem); } + .grid-margin-x > .medium-10 { + width: calc(83.33333% - 1.875rem); } + .grid-margin-x > .medium-11 { + width: calc(91.66667% - 1.875rem); } + .grid-margin-x > .medium-12 { + width: calc(100% - 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-margin-x > .large-auto { + width: auto; } + .grid-margin-x > .large-shrink { + width: auto; } + .grid-margin-x > .large-1 { + width: calc(8.33333% - 1.875rem); } + .grid-margin-x > .large-2 { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x > .large-3 { + width: calc(25% - 1.875rem); } + .grid-margin-x > .large-4 { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x > .large-5 { + width: calc(41.66667% - 1.875rem); } + .grid-margin-x > .large-6 { + width: calc(50% - 1.875rem); } + .grid-margin-x > .large-7 { + width: calc(58.33333% - 1.875rem); } + .grid-margin-x > .large-8 { + width: calc(66.66667% - 1.875rem); } + .grid-margin-x > .large-9 { + width: calc(75% - 1.875rem); } + .grid-margin-x > .large-10 { + width: calc(83.33333% - 1.875rem); } + .grid-margin-x > .large-11 { + width: calc(91.66667% - 1.875rem); } + .grid-margin-x > .large-12 { + width: calc(100% - 1.875rem); } } + +.grid-padding-x .grid-padding-x { + margin-right: -0.625rem; + margin-left: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-x .grid-padding-x { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + +.grid-container:not(.full) > .grid-padding-x { + margin-right: -0.625rem; + margin-left: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-container:not(.full) > .grid-padding-x { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + +.grid-padding-x > .cell { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-x > .cell { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + +.small-up-1 > .cell { + width: 100%; } + +.small-up-2 > .cell { + width: 50%; } + +.small-up-3 > .cell { + width: 33.33333%; } + +.small-up-4 > .cell { + width: 25%; } + +.small-up-5 > .cell { + width: 20%; } + +.small-up-6 > .cell { + width: 16.66667%; } + +.small-up-7 > .cell { + width: 14.28571%; } + +.small-up-8 > .cell { + width: 12.5%; } + +@media print, screen and (min-width: 40em) { + .medium-up-1 > .cell { + width: 100%; } + .medium-up-2 > .cell { + width: 50%; } + .medium-up-3 > .cell { + width: 33.33333%; } + .medium-up-4 > .cell { + width: 25%; } + .medium-up-5 > .cell { + width: 20%; } + .medium-up-6 > .cell { + width: 16.66667%; } + .medium-up-7 > .cell { + width: 14.28571%; } + .medium-up-8 > .cell { + width: 12.5%; } } + +@media print, screen and (min-width: 64em) { + .large-up-1 > .cell { + width: 100%; } + .large-up-2 > .cell { + width: 50%; } + .large-up-3 > .cell { + width: 33.33333%; } + .large-up-4 > .cell { + width: 25%; } + .large-up-5 > .cell { + width: 20%; } + .large-up-6 > .cell { + width: 16.66667%; } + .large-up-7 > .cell { + width: 14.28571%; } + .large-up-8 > .cell { + width: 12.5%; } } + +.grid-margin-x.small-up-1 > .cell { + width: calc(100% - 1.25rem); } + +.grid-margin-x.small-up-2 > .cell { + width: calc(50% - 1.25rem); } + +.grid-margin-x.small-up-3 > .cell { + width: calc(33.33333% - 1.25rem); } + +.grid-margin-x.small-up-4 > .cell { + width: calc(25% - 1.25rem); } + +.grid-margin-x.small-up-5 > .cell { + width: calc(20% - 1.25rem); } + +.grid-margin-x.small-up-6 > .cell { + width: calc(16.66667% - 1.25rem); } + +.grid-margin-x.small-up-7 > .cell { + width: calc(14.28571% - 1.25rem); } + +.grid-margin-x.small-up-8 > .cell { + width: calc(12.5% - 1.25rem); } + +@media print, screen and (min-width: 40em) { + .grid-margin-x.small-up-1 > .cell { + width: calc(100% - 1.25rem); } + .grid-margin-x.small-up-2 > .cell { + width: calc(50% - 1.25rem); } + .grid-margin-x.small-up-3 > .cell { + width: calc(33.33333% - 1.25rem); } + .grid-margin-x.small-up-4 > .cell { + width: calc(25% - 1.25rem); } + .grid-margin-x.small-up-5 > .cell { + width: calc(20% - 1.25rem); } + .grid-margin-x.small-up-6 > .cell { + width: calc(16.66667% - 1.25rem); } + .grid-margin-x.small-up-7 > .cell { + width: calc(14.28571% - 1.25rem); } + .grid-margin-x.small-up-8 > .cell { + width: calc(12.5% - 1.25rem); } + .grid-margin-x.medium-up-1 > .cell { + width: calc(100% - 1.875rem); } + .grid-margin-x.medium-up-2 > .cell { + width: calc(50% - 1.875rem); } + .grid-margin-x.medium-up-3 > .cell { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x.medium-up-4 > .cell { + width: calc(25% - 1.875rem); } + .grid-margin-x.medium-up-5 > .cell { + width: calc(20% - 1.875rem); } + .grid-margin-x.medium-up-6 > .cell { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x.medium-up-7 > .cell { + width: calc(14.28571% - 1.875rem); } + .grid-margin-x.medium-up-8 > .cell { + width: calc(12.5% - 1.875rem); } } + +@media print, screen and (min-width: 64em) { + .grid-margin-x.large-up-1 > .cell { + width: calc(100% - 1.875rem); } + .grid-margin-x.large-up-2 > .cell { + width: calc(50% - 1.875rem); } + .grid-margin-x.large-up-3 > .cell { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x.large-up-4 > .cell { + width: calc(25% - 1.875rem); } + .grid-margin-x.large-up-5 > .cell { + width: calc(20% - 1.875rem); } + .grid-margin-x.large-up-6 > .cell { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x.large-up-7 > .cell { + width: calc(14.28571% - 1.875rem); } + .grid-margin-x.large-up-8 > .cell { + width: calc(12.5% - 1.875rem); } } + +.small-margin-collapse { + margin-right: 0; + margin-left: 0; } + .small-margin-collapse > .cell { + margin-right: 0; + margin-left: 0; } + .small-margin-collapse > .small-1 { + width: 8.33333%; } + .small-margin-collapse > .small-2 { + width: 16.66667%; } + .small-margin-collapse > .small-3 { + width: 25%; } + .small-margin-collapse > .small-4 { + width: 33.33333%; } + .small-margin-collapse > .small-5 { + width: 41.66667%; } + .small-margin-collapse > .small-6 { + width: 50%; } + .small-margin-collapse > .small-7 { + width: 58.33333%; } + .small-margin-collapse > .small-8 { + width: 66.66667%; } + .small-margin-collapse > .small-9 { + width: 75%; } + .small-margin-collapse > .small-10 { + width: 83.33333%; } + .small-margin-collapse > .small-11 { + width: 91.66667%; } + .small-margin-collapse > .small-12 { + width: 100%; } + @media print, screen and (min-width: 40em) { + .small-margin-collapse > .medium-1 { + width: 8.33333%; } + .small-margin-collapse > .medium-2 { + width: 16.66667%; } + .small-margin-collapse > .medium-3 { + width: 25%; } + .small-margin-collapse > .medium-4 { + width: 33.33333%; } + .small-margin-collapse > .medium-5 { + width: 41.66667%; } + .small-margin-collapse > .medium-6 { + width: 50%; } + .small-margin-collapse > .medium-7 { + width: 58.33333%; } + .small-margin-collapse > .medium-8 { + width: 66.66667%; } + .small-margin-collapse > .medium-9 { + width: 75%; } + .small-margin-collapse > .medium-10 { + width: 83.33333%; } + .small-margin-collapse > .medium-11 { + width: 91.66667%; } + .small-margin-collapse > .medium-12 { + width: 100%; } } + @media print, screen and (min-width: 64em) { + .small-margin-collapse > .large-1 { + width: 8.33333%; } + .small-margin-collapse > .large-2 { + width: 16.66667%; } + .small-margin-collapse > .large-3 { + width: 25%; } + .small-margin-collapse > .large-4 { + width: 33.33333%; } + .small-margin-collapse > .large-5 { + width: 41.66667%; } + .small-margin-collapse > .large-6 { + width: 50%; } + .small-margin-collapse > .large-7 { + width: 58.33333%; } + .small-margin-collapse > .large-8 { + width: 66.66667%; } + .small-margin-collapse > .large-9 { + width: 75%; } + .small-margin-collapse > .large-10 { + width: 83.33333%; } + .small-margin-collapse > .large-11 { + width: 91.66667%; } + .small-margin-collapse > .large-12 { + width: 100%; } } + +.small-padding-collapse { + margin-right: 0; + margin-left: 0; } + .small-padding-collapse > .cell { + padding-right: 0; + padding-left: 0; } + +@media print, screen and (min-width: 40em) { + .medium-margin-collapse { + margin-right: 0; + margin-left: 0; } + .medium-margin-collapse > .cell { + margin-right: 0; + margin-left: 0; } } + +@media print, screen and (min-width: 40em) { + .medium-margin-collapse > .small-1 { + width: 8.33333%; } + .medium-margin-collapse > .small-2 { + width: 16.66667%; } + .medium-margin-collapse > .small-3 { + width: 25%; } + .medium-margin-collapse > .small-4 { + width: 33.33333%; } + .medium-margin-collapse > .small-5 { + width: 41.66667%; } + .medium-margin-collapse > .small-6 { + width: 50%; } + .medium-margin-collapse > .small-7 { + width: 58.33333%; } + .medium-margin-collapse > .small-8 { + width: 66.66667%; } + .medium-margin-collapse > .small-9 { + width: 75%; } + .medium-margin-collapse > .small-10 { + width: 83.33333%; } + .medium-margin-collapse > .small-11 { + width: 91.66667%; } + .medium-margin-collapse > .small-12 { + width: 100%; } } + +@media print, screen and (min-width: 40em) { + .medium-margin-collapse > .medium-1 { + width: 8.33333%; } + .medium-margin-collapse > .medium-2 { + width: 16.66667%; } + .medium-margin-collapse > .medium-3 { + width: 25%; } + .medium-margin-collapse > .medium-4 { + width: 33.33333%; } + .medium-margin-collapse > .medium-5 { + width: 41.66667%; } + .medium-margin-collapse > .medium-6 { + width: 50%; } + .medium-margin-collapse > .medium-7 { + width: 58.33333%; } + .medium-margin-collapse > .medium-8 { + width: 66.66667%; } + .medium-margin-collapse > .medium-9 { + width: 75%; } + .medium-margin-collapse > .medium-10 { + width: 83.33333%; } + .medium-margin-collapse > .medium-11 { + width: 91.66667%; } + .medium-margin-collapse > .medium-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .medium-margin-collapse > .large-1 { + width: 8.33333%; } + .medium-margin-collapse > .large-2 { + width: 16.66667%; } + .medium-margin-collapse > .large-3 { + width: 25%; } + .medium-margin-collapse > .large-4 { + width: 33.33333%; } + .medium-margin-collapse > .large-5 { + width: 41.66667%; } + .medium-margin-collapse > .large-6 { + width: 50%; } + .medium-margin-collapse > .large-7 { + width: 58.33333%; } + .medium-margin-collapse > .large-8 { + width: 66.66667%; } + .medium-margin-collapse > .large-9 { + width: 75%; } + .medium-margin-collapse > .large-10 { + width: 83.33333%; } + .medium-margin-collapse > .large-11 { + width: 91.66667%; } + .medium-margin-collapse > .large-12 { + width: 100%; } } + +@media print, screen and (min-width: 40em) { + .medium-padding-collapse { + margin-right: 0; + margin-left: 0; } + .medium-padding-collapse > .cell { + padding-right: 0; + padding-left: 0; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse { + margin-right: 0; + margin-left: 0; } + .large-margin-collapse > .cell { + margin-right: 0; + margin-left: 0; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse > .small-1 { + width: 8.33333%; } + .large-margin-collapse > .small-2 { + width: 16.66667%; } + .large-margin-collapse > .small-3 { + width: 25%; } + .large-margin-collapse > .small-4 { + width: 33.33333%; } + .large-margin-collapse > .small-5 { + width: 41.66667%; } + .large-margin-collapse > .small-6 { + width: 50%; } + .large-margin-collapse > .small-7 { + width: 58.33333%; } + .large-margin-collapse > .small-8 { + width: 66.66667%; } + .large-margin-collapse > .small-9 { + width: 75%; } + .large-margin-collapse > .small-10 { + width: 83.33333%; } + .large-margin-collapse > .small-11 { + width: 91.66667%; } + .large-margin-collapse > .small-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse > .medium-1 { + width: 8.33333%; } + .large-margin-collapse > .medium-2 { + width: 16.66667%; } + .large-margin-collapse > .medium-3 { + width: 25%; } + .large-margin-collapse > .medium-4 { + width: 33.33333%; } + .large-margin-collapse > .medium-5 { + width: 41.66667%; } + .large-margin-collapse > .medium-6 { + width: 50%; } + .large-margin-collapse > .medium-7 { + width: 58.33333%; } + .large-margin-collapse > .medium-8 { + width: 66.66667%; } + .large-margin-collapse > .medium-9 { + width: 75%; } + .large-margin-collapse > .medium-10 { + width: 83.33333%; } + .large-margin-collapse > .medium-11 { + width: 91.66667%; } + .large-margin-collapse > .medium-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse > .large-1 { + width: 8.33333%; } + .large-margin-collapse > .large-2 { + width: 16.66667%; } + .large-margin-collapse > .large-3 { + width: 25%; } + .large-margin-collapse > .large-4 { + width: 33.33333%; } + .large-margin-collapse > .large-5 { + width: 41.66667%; } + .large-margin-collapse > .large-6 { + width: 50%; } + .large-margin-collapse > .large-7 { + width: 58.33333%; } + .large-margin-collapse > .large-8 { + width: 66.66667%; } + .large-margin-collapse > .large-9 { + width: 75%; } + .large-margin-collapse > .large-10 { + width: 83.33333%; } + .large-margin-collapse > .large-11 { + width: 91.66667%; } + .large-margin-collapse > .large-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .large-padding-collapse { + margin-right: 0; + margin-left: 0; } + .large-padding-collapse > .cell { + padding-right: 0; + padding-left: 0; } } + +.small-offset-0 { + margin-left: 0%; } + +.grid-margin-x > .small-offset-0 { + margin-left: calc(0% + 0.625rem); } + +.small-offset-1 { + margin-left: 8.33333%; } + +.grid-margin-x > .small-offset-1 { + margin-left: calc(8.33333% + 0.625rem); } + +.small-offset-2 { + margin-left: 16.66667%; } + +.grid-margin-x > .small-offset-2 { + margin-left: calc(16.66667% + 0.625rem); } + +.small-offset-3 { + margin-left: 25%; } + +.grid-margin-x > .small-offset-3 { + margin-left: calc(25% + 0.625rem); } + +.small-offset-4 { + margin-left: 33.33333%; } + +.grid-margin-x > .small-offset-4 { + margin-left: calc(33.33333% + 0.625rem); } + +.small-offset-5 { + margin-left: 41.66667%; } + +.grid-margin-x > .small-offset-5 { + margin-left: calc(41.66667% + 0.625rem); } + +.small-offset-6 { + margin-left: 50%; } + +.grid-margin-x > .small-offset-6 { + margin-left: calc(50% + 0.625rem); } + +.small-offset-7 { + margin-left: 58.33333%; } + +.grid-margin-x > .small-offset-7 { + margin-left: calc(58.33333% + 0.625rem); } + +.small-offset-8 { + margin-left: 66.66667%; } + +.grid-margin-x > .small-offset-8 { + margin-left: calc(66.66667% + 0.625rem); } + +.small-offset-9 { + margin-left: 75%; } + +.grid-margin-x > .small-offset-9 { + margin-left: calc(75% + 0.625rem); } + +.small-offset-10 { + margin-left: 83.33333%; } + +.grid-margin-x > .small-offset-10 { + margin-left: calc(83.33333% + 0.625rem); } + +.small-offset-11 { + margin-left: 91.66667%; } + +.grid-margin-x > .small-offset-11 { + margin-left: calc(91.66667% + 0.625rem); } + +@media print, screen and (min-width: 40em) { + .medium-offset-0 { + margin-left: 0%; } + .grid-margin-x > .medium-offset-0 { + margin-left: calc(0% + 0.9375rem); } + .medium-offset-1 { + margin-left: 8.33333%; } + .grid-margin-x > .medium-offset-1 { + margin-left: calc(8.33333% + 0.9375rem); } + .medium-offset-2 { + margin-left: 16.66667%; } + .grid-margin-x > .medium-offset-2 { + margin-left: calc(16.66667% + 0.9375rem); } + .medium-offset-3 { + margin-left: 25%; } + .grid-margin-x > .medium-offset-3 { + margin-left: calc(25% + 0.9375rem); } + .medium-offset-4 { + margin-left: 33.33333%; } + .grid-margin-x > .medium-offset-4 { + margin-left: calc(33.33333% + 0.9375rem); } + .medium-offset-5 { + margin-left: 41.66667%; } + .grid-margin-x > .medium-offset-5 { + margin-left: calc(41.66667% + 0.9375rem); } + .medium-offset-6 { + margin-left: 50%; } + .grid-margin-x > .medium-offset-6 { + margin-left: calc(50% + 0.9375rem); } + .medium-offset-7 { + margin-left: 58.33333%; } + .grid-margin-x > .medium-offset-7 { + margin-left: calc(58.33333% + 0.9375rem); } + .medium-offset-8 { + margin-left: 66.66667%; } + .grid-margin-x > .medium-offset-8 { + margin-left: calc(66.66667% + 0.9375rem); } + .medium-offset-9 { + margin-left: 75%; } + .grid-margin-x > .medium-offset-9 { + margin-left: calc(75% + 0.9375rem); } + .medium-offset-10 { + margin-left: 83.33333%; } + .grid-margin-x > .medium-offset-10 { + margin-left: calc(83.33333% + 0.9375rem); } + .medium-offset-11 { + margin-left: 91.66667%; } + .grid-margin-x > .medium-offset-11 { + margin-left: calc(91.66667% + 0.9375rem); } } + +@media print, screen and (min-width: 64em) { + .large-offset-0 { + margin-left: 0%; } + .grid-margin-x > .large-offset-0 { + margin-left: calc(0% + 0.9375rem); } + .large-offset-1 { + margin-left: 8.33333%; } + .grid-margin-x > .large-offset-1 { + margin-left: calc(8.33333% + 0.9375rem); } + .large-offset-2 { + margin-left: 16.66667%; } + .grid-margin-x > .large-offset-2 { + margin-left: calc(16.66667% + 0.9375rem); } + .large-offset-3 { + margin-left: 25%; } + .grid-margin-x > .large-offset-3 { + margin-left: calc(25% + 0.9375rem); } + .large-offset-4 { + margin-left: 33.33333%; } + .grid-margin-x > .large-offset-4 { + margin-left: calc(33.33333% + 0.9375rem); } + .large-offset-5 { + margin-left: 41.66667%; } + .grid-margin-x > .large-offset-5 { + margin-left: calc(41.66667% + 0.9375rem); } + .large-offset-6 { + margin-left: 50%; } + .grid-margin-x > .large-offset-6 { + margin-left: calc(50% + 0.9375rem); } + .large-offset-7 { + margin-left: 58.33333%; } + .grid-margin-x > .large-offset-7 { + margin-left: calc(58.33333% + 0.9375rem); } + .large-offset-8 { + margin-left: 66.66667%; } + .grid-margin-x > .large-offset-8 { + margin-left: calc(66.66667% + 0.9375rem); } + .large-offset-9 { + margin-left: 75%; } + .grid-margin-x > .large-offset-9 { + margin-left: calc(75% + 0.9375rem); } + .large-offset-10 { + margin-left: 83.33333%; } + .grid-margin-x > .large-offset-10 { + margin-left: calc(83.33333% + 0.9375rem); } + .large-offset-11 { + margin-left: 91.66667%; } + .grid-margin-x > .large-offset-11 { + margin-left: calc(91.66667% + 0.9375rem); } } + +.grid-y { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; } + .grid-y > .cell { + width: auto; } + .grid-y > .auto { + height: auto; } + .grid-y > .shrink { + height: auto; } + .grid-y > .small-shrink, .grid-y > .small-full, .grid-y > .small-1, .grid-y > .small-2, .grid-y > .small-3, .grid-y > .small-4, .grid-y > .small-5, .grid-y > .small-6, .grid-y > .small-7, .grid-y > .small-8, .grid-y > .small-9, .grid-y > .small-10, .grid-y > .small-11, .grid-y > .small-12 { + -ms-flex-preferred-size: auto; + flex-basis: auto; } + @media print, screen and (min-width: 40em) { + .grid-y > .medium-shrink, .grid-y > .medium-full, .grid-y > .medium-1, .grid-y > .medium-2, .grid-y > .medium-3, .grid-y > .medium-4, .grid-y > .medium-5, .grid-y > .medium-6, .grid-y > .medium-7, .grid-y > .medium-8, .grid-y > .medium-9, .grid-y > .medium-10, .grid-y > .medium-11, .grid-y > .medium-12 { + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + @media print, screen and (min-width: 64em) { + .grid-y > .large-shrink, .grid-y > .large-full, .grid-y > .large-1, .grid-y > .large-2, .grid-y > .large-3, .grid-y > .large-4, .grid-y > .large-5, .grid-y > .large-6, .grid-y > .large-7, .grid-y > .large-8, .grid-y > .large-9, .grid-y > .large-10, .grid-y > .large-11, .grid-y > .large-12 { + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + .grid-y > .small-1 { + height: 8.33333%; } + .grid-y > .small-2 { + height: 16.66667%; } + .grid-y > .small-3 { + height: 25%; } + .grid-y > .small-4 { + height: 33.33333%; } + .grid-y > .small-5 { + height: 41.66667%; } + .grid-y > .small-6 { + height: 50%; } + .grid-y > .small-7 { + height: 58.33333%; } + .grid-y > .small-8 { + height: 66.66667%; } + .grid-y > .small-9 { + height: 75%; } + .grid-y > .small-10 { + height: 83.33333%; } + .grid-y > .small-11 { + height: 91.66667%; } + .grid-y > .small-12 { + height: 100%; } + @media print, screen and (min-width: 40em) { + .grid-y > .medium-auto { + -ms-flex: 1 1 0px; + flex: 1 1 0px; + height: auto; } + .grid-y > .medium-shrink { + height: auto; } + .grid-y > .medium-1 { + height: 8.33333%; } + .grid-y > .medium-2 { + height: 16.66667%; } + .grid-y > .medium-3 { + height: 25%; } + .grid-y > .medium-4 { + height: 33.33333%; } + .grid-y > .medium-5 { + height: 41.66667%; } + .grid-y > .medium-6 { + height: 50%; } + .grid-y > .medium-7 { + height: 58.33333%; } + .grid-y > .medium-8 { + height: 66.66667%; } + .grid-y > .medium-9 { + height: 75%; } + .grid-y > .medium-10 { + height: 83.33333%; } + .grid-y > .medium-11 { + height: 91.66667%; } + .grid-y > .medium-12 { + height: 100%; } } + @media print, screen and (min-width: 64em) { + .grid-y > .large-auto { + -ms-flex: 1 1 0px; + flex: 1 1 0px; + height: auto; } + .grid-y > .large-shrink { + height: auto; } + .grid-y > .large-1 { + height: 8.33333%; } + .grid-y > .large-2 { + height: 16.66667%; } + .grid-y > .large-3 { + height: 25%; } + .grid-y > .large-4 { + height: 33.33333%; } + .grid-y > .large-5 { + height: 41.66667%; } + .grid-y > .large-6 { + height: 50%; } + .grid-y > .large-7 { + height: 58.33333%; } + .grid-y > .large-8 { + height: 66.66667%; } + .grid-y > .large-9 { + height: 75%; } + .grid-y > .large-10 { + height: 83.33333%; } + .grid-y > .large-11 { + height: 91.66667%; } + .grid-y > .large-12 { + height: 100%; } } + +.grid-padding-y .grid-padding-y { + margin-top: -0.625rem; + margin-bottom: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-y .grid-padding-y { + margin-top: -0.9375rem; + margin-bottom: -0.9375rem; } } + +.grid-padding-y > .cell { + padding-top: 0.625rem; + padding-bottom: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-y > .cell { + padding-top: 0.9375rem; + padding-bottom: 0.9375rem; } } + +.grid-margin-y { + margin-top: -0.625rem; + margin-bottom: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y { + margin-top: -0.9375rem; + margin-bottom: -0.9375rem; } } + .grid-margin-y > .cell { + height: calc(100% - 1.25rem); + margin-top: 0.625rem; + margin-bottom: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .cell { + height: calc(100% - 1.875rem); + margin-top: 0.9375rem; + margin-bottom: 0.9375rem; } } + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.25rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.25rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.25rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.25rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.25rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.25rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.25rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.25rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.25rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.25rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.25rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.875rem); } + .grid-margin-y > .medium-auto { + height: auto; } + .grid-margin-y > .medium-shrink { + height: auto; } + .grid-margin-y > .medium-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .medium-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .medium-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .medium-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .medium-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .medium-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .medium-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .medium-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .medium-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .medium-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .medium-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .medium-12 { + height: calc(100% - 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-margin-y > .large-auto { + height: auto; } + .grid-margin-y > .large-shrink { + height: auto; } + .grid-margin-y > .large-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .large-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .large-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .large-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .large-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .large-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .large-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .large-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .large-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .large-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .large-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .large-12 { + height: calc(100% - 1.875rem); } } + +.grid-frame { + overflow: hidden; + position: relative; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100vw; } + +.cell .grid-frame { + width: 100%; } + +.cell-block { + overflow-x: auto; + max-width: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-stype: -ms-autohiding-scrollbar; } + +.cell-block-y { + overflow-y: auto; + max-height: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-stype: -ms-autohiding-scrollbar; } + +.cell-block-container { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + max-height: 100%; } + .cell-block-container > .grid-x { + max-height: 100%; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + +@media print, screen and (min-width: 40em) { + .medium-grid-frame { + overflow: hidden; + position: relative; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100vw; } + .cell .medium-grid-frame { + width: 100%; } + .medium-cell-block { + overflow-x: auto; + max-width: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-stype: -ms-autohiding-scrollbar; } + .medium-cell-block-container { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + max-height: 100%; } + .medium-cell-block-container > .grid-x { + max-height: 100%; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .medium-cell-block-y { + overflow-y: auto; + max-height: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-stype: -ms-autohiding-scrollbar; } } + +@media print, screen and (min-width: 64em) { + .large-grid-frame { + overflow: hidden; + position: relative; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100vw; } + .cell .large-grid-frame { + width: 100%; } + .large-cell-block { + overflow-x: auto; + max-width: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-stype: -ms-autohiding-scrollbar; } + .large-cell-block-container { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + max-height: 100%; } + .large-cell-block-container > .grid-x { + max-height: 100%; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .large-cell-block-y { + overflow-y: auto; + max-height: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-stype: -ms-autohiding-scrollbar; } } + +.grid-y.grid-frame { + width: auto; + overflow: hidden; + position: relative; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-align: stretch; + align-items: stretch; + height: 100vh; } + +@media print, screen and (min-width: 40em) { + .grid-y.medium-grid-frame { + width: auto; + overflow: hidden; + position: relative; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-align: stretch; + align-items: stretch; + height: 100vh; } } + +@media print, screen and (min-width: 64em) { + .grid-y.large-grid-frame { + width: auto; + overflow: hidden; + position: relative; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-align: stretch; + align-items: stretch; + height: 100vh; } } + +.cell .grid-y.grid-frame { + height: 100%; } + +@media print, screen and (min-width: 40em) { + .cell .grid-y.medium-grid-frame { + height: 100%; } } + +@media print, screen and (min-width: 64em) { + .cell .grid-y.large-grid-frame { + height: 100%; } } + +.grid-margin-y { + margin-top: -0.625rem; + margin-bottom: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y { + margin-top: -0.9375rem; + margin-bottom: -0.9375rem; } } + .grid-margin-y > .cell { + height: calc(100% - 1.25rem); + margin-top: 0.625rem; + margin-bottom: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .cell { + height: calc(100% - 1.875rem); + margin-top: 0.9375rem; + margin-bottom: 0.9375rem; } } + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.25rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.25rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.25rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.25rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.25rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.25rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.25rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.25rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.25rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.25rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.25rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.875rem); } + .grid-margin-y > .medium-auto { + height: auto; } + .grid-margin-y > .medium-shrink { + height: auto; } + .grid-margin-y > .medium-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .medium-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .medium-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .medium-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .medium-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .medium-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .medium-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .medium-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .medium-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .medium-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .medium-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .medium-12 { + height: calc(100% - 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-margin-y > .large-auto { + height: auto; } + .grid-margin-y > .large-shrink { + height: auto; } + .grid-margin-y > .large-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .large-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .large-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .large-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .large-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .large-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .large-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .large-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .large-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .large-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .large-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .large-12 { + height: calc(100% - 1.875rem); } } + +.grid-frame.grid-margin-y { + height: calc(100vh + 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-frame.grid-margin-y { + height: calc(100vh + 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-frame.grid-margin-y { + height: calc(100vh + 1.875rem); } } + +@media print, screen and (min-width: 40em) { + .grid-margin-y.medium-grid-frame { + height: calc(100vh + 1.875rem); } } + +@media print, screen and (min-width: 64em) { + .grid-margin-y.large-grid-frame { + height: calc(100vh + 1.875rem); } } + +.align-right { + -ms-flex-pack: end; + justify-content: flex-end; } + +.align-center { + -ms-flex-pack: center; + justify-content: center; } + +.align-justify { + -ms-flex-pack: justify; + justify-content: space-between; } + +.align-spaced { + -ms-flex-pack: distribute; + justify-content: space-around; } + +.align-right.vertical.menu > li > a { + -ms-flex-pack: end; + justify-content: flex-end; } + +.align-center.vertical.menu > li > a { + -ms-flex-pack: center; + justify-content: center; } + +.align-top { + -ms-flex-align: start; + align-items: flex-start; } + +.align-self-top { + -ms-flex-item-align: start; + align-self: flex-start; } + +.align-bottom { + -ms-flex-align: end; + align-items: flex-end; } + +.align-self-bottom { + -ms-flex-item-align: end; + align-self: flex-end; } + +.align-middle { + -ms-flex-align: center; + align-items: center; } + +.align-self-middle { + -ms-flex-item-align: center; + -ms-grid-row-align: center; + align-self: center; } + +.align-stretch { + -ms-flex-align: stretch; + align-items: stretch; } + +.align-self-stretch { + -ms-flex-item-align: stretch; + -ms-grid-row-align: stretch; + align-self: stretch; } + +.align-center-middle { + -ms-flex-pack: center; + justify-content: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-line-pack: center; + align-content: center; } + +.small-order-1 { + -ms-flex-order: 1; + order: 1; } + +.small-order-2 { + -ms-flex-order: 2; + order: 2; } + +.small-order-3 { + -ms-flex-order: 3; + order: 3; } + +.small-order-4 { + -ms-flex-order: 4; + order: 4; } + +.small-order-5 { + -ms-flex-order: 5; + order: 5; } + +.small-order-6 { + -ms-flex-order: 6; + order: 6; } + +@media print, screen and (min-width: 40em) { + .medium-order-1 { + -ms-flex-order: 1; + order: 1; } + .medium-order-2 { + -ms-flex-order: 2; + order: 2; } + .medium-order-3 { + -ms-flex-order: 3; + order: 3; } + .medium-order-4 { + -ms-flex-order: 4; + order: 4; } + .medium-order-5 { + -ms-flex-order: 5; + order: 5; } + .medium-order-6 { + -ms-flex-order: 6; + order: 6; } } + +@media print, screen and (min-width: 64em) { + .large-order-1 { + -ms-flex-order: 1; + order: 1; } + .large-order-2 { + -ms-flex-order: 2; + order: 2; } + .large-order-3 { + -ms-flex-order: 3; + order: 3; } + .large-order-4 { + -ms-flex-order: 4; + order: 4; } + .large-order-5 { + -ms-flex-order: 5; + order: 5; } + .large-order-6 { + -ms-flex-order: 6; + order: 6; } } + +.flex-container { + display: -ms-flexbox; + display: flex; } + +.flex-child-auto { + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + +.flex-child-grow { + -ms-flex: 1 0 auto; + flex: 1 0 auto; } + +.flex-child-shrink { + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + +.flex-dir-row { + -ms-flex-direction: row; + flex-direction: row; } + +.flex-dir-row-reverse { + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + +.flex-dir-column { + -ms-flex-direction: column; + flex-direction: column; } + +.flex-dir-column-reverse { + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } + +@media print, screen and (min-width: 40em) { + .medium-flex-container { + display: -ms-flexbox; + display: flex; } + .medium-flex-child-auto { + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + .medium-flex-child-grow { + -ms-flex: 1 0 auto; + flex: 1 0 auto; } + .medium-flex-child-shrink { + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + .medium-flex-dir-row { + -ms-flex-direction: row; + flex-direction: row; } + .medium-flex-dir-row-reverse { + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .medium-flex-dir-column { + -ms-flex-direction: column; + flex-direction: column; } + .medium-flex-dir-column-reverse { + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } } + +@media print, screen and (min-width: 64em) { + .large-flex-container { + display: -ms-flexbox; + display: flex; } + .large-flex-child-auto { + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + .large-flex-child-grow { + -ms-flex: 1 0 auto; + flex: 1 0 auto; } + .large-flex-child-shrink { + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + .large-flex-dir-row { + -ms-flex-direction: row; + flex-direction: row; } + .large-flex-dir-row-reverse { + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .large-flex-dir-column { + -ms-flex-direction: column; + flex-direction: column; } + .large-flex-dir-column-reverse { + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } } + +div, +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +form, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; } + +p { + margin-bottom: 1rem; + font-size: inherit; + line-height: 1.6; + text-rendering: optimizeLegibility; } + +em, +i { + font-style: italic; + line-height: inherit; } + +strong, +b { + font-weight: bold; + line-height: inherit; } + +small { + font-size: 80%; + line-height: inherit; } + +h1, .h1, +h2, .h2, +h3, .h3, +h4, .h4, +h5, .h5, +h6, .h6 { + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-style: normal; + font-weight: normal; + color: inherit; + text-rendering: optimizeLegibility; } + h1 small, .h1 small, + h2 small, .h2 small, + h3 small, .h3 small, + h4 small, .h4 small, + h5 small, .h5 small, + h6 small, .h6 small { + line-height: 0; + color: #cacaca; } + +h1, .h1 { + font-size: 1.5rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h2, .h2 { + font-size: 1.25rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h3, .h3 { + font-size: 1.1875rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h4, .h4 { + font-size: 1.125rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h5, .h5 { + font-size: 1.0625rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h6, .h6 { + font-size: 1rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +@media print, screen and (min-width: 40em) { + h1, .h1 { + font-size: 3rem; } + h2, .h2 { + font-size: 2.5rem; } + h3, .h3 { + font-size: 1.9375rem; } + h4, .h4 { + font-size: 1.5625rem; } + h5, .h5 { + font-size: 1.25rem; } + h6, .h6 { + font-size: 1rem; } } + +a { + line-height: inherit; + color: #1779ba; + text-decoration: none; + cursor: pointer; } + a:hover, a:focus { + color: #1468a0; } + a img { + border: 0; } + +hr { + clear: both; + max-width: 75rem; + height: 0; + margin: 1.25rem auto; + border-top: 0; + border-right: 0; + border-bottom: 1px solid #cacaca; + border-left: 0; } + +ul, +ol, +dl { + margin-bottom: 1rem; + list-style-position: outside; + line-height: 1.6; } + +li { + font-size: inherit; } + +ul { + margin-left: 1.25rem; + list-style-type: disc; } + +ol { + margin-left: 1.25rem; } + +ul ul, ol ul, ul ol, ol ol { + margin-left: 1.25rem; + margin-bottom: 0; } + +dl { + margin-bottom: 1rem; } + dl dt { + margin-bottom: 0.3rem; + font-weight: bold; } + +blockquote { + margin: 0 0 1rem; + padding: 0.5625rem 1.25rem 0 1.1875rem; + border-left: 1px solid #cacaca; } + blockquote, blockquote p { + line-height: 1.6; + color: #8a8a8a; } + +cite { + display: block; + font-size: 0.8125rem; + color: #8a8a8a; } + cite:before { + content: "— "; } + +abbr, abbr[title] { + border-bottom: 1px dotted #0a0a0a; + cursor: help; + text-decoration: none; } + +figure { + margin: 0; } + +code { + padding: 0.125rem 0.3125rem 0.0625rem; + border: 1px solid #cacaca; + background-color: #e6e6e6; + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-weight: normal; + color: #0a0a0a; } + +kbd { + margin: 0; + padding: 0.125rem 0.25rem 0; + background-color: #e6e6e6; + font-family: Consolas, "Liberation Mono", Courier, monospace; + color: #0a0a0a; } + +.subheader { + margin-top: 0.2rem; + margin-bottom: 0.5rem; + font-weight: normal; + line-height: 1.4; + color: #8a8a8a; } + +.lead { + font-size: 125%; + line-height: 1.6; } + +.stat { + font-size: 2.5rem; + line-height: 1; } + p + .stat { + margin-top: -1rem; } + +ul.no-bullet, ol.no-bullet { + margin-left: 0; + list-style: none; } + +.text-left { + text-align: left; } + +.text-right { + text-align: right; } + +.text-center { + text-align: center; } + +.text-justify { + text-align: justify; } + +@media print, screen and (min-width: 40em) { + .medium-text-left { + text-align: left; } + .medium-text-right { + text-align: right; } + .medium-text-center { + text-align: center; } + .medium-text-justify { + text-align: justify; } } + +@media print, screen and (min-width: 64em) { + .large-text-left { + text-align: left; } + .large-text-right { + text-align: right; } + .large-text-center { + text-align: center; } + .large-text-justify { + text-align: justify; } } + +.show-for-print { + display: none !important; } + +@media print { + * { + background: transparent !important; + box-shadow: none !important; + color: black !important; + text-shadow: none !important; } + .show-for-print { + display: block !important; } + .hide-for-print { + display: none !important; } + table.show-for-print { + display: table !important; } + thead.show-for-print { + display: table-header-group !important; } + tbody.show-for-print { + display: table-row-group !important; } + tr.show-for-print { + display: table-row !important; } + td.show-for-print { + display: table-cell !important; } + th.show-for-print { + display: table-cell !important; } + a, + a:visited { + text-decoration: underline; } + a[href]:after { + content: " (" attr(href) ")"; } + .ir a:after, + a[href^='javascript:']:after, + a[href^='#']:after { + content: ''; } + abbr[title]:after { + content: " (" attr(title) ")"; } + pre, + blockquote { + border: 1px solid #8a8a8a; + page-break-inside: avoid; } + thead { + display: table-header-group; } + tr, + img { + page-break-inside: avoid; } + img { + max-width: 100% !important; } + @page { + margin: 0.5cm; } + p, + h2, + h3 { + orphans: 3; + widows: 3; } + h2, + h3 { + page-break-after: avoid; } + .print-break-inside { + page-break-inside: auto; } } + +.button { + display: inline-block; + vertical-align: middle; + margin: 0 0 1rem 0; + font-family: inherit; + padding: 0.85em 1em; + -webkit-appearance: none; + border: 1px solid transparent; + border-radius: 0; + transition: background-color 0.25s ease-out, color 0.25s ease-out; + font-size: 0.9rem; + line-height: 1; + text-align: center; + cursor: pointer; + background-color: #1779ba; + color: #fefefe; } + [data-whatinput='mouse'] .button { + outline: 0; } + .button:hover, .button:focus { + background-color: #14679e; + color: #fefefe; } + .button.tiny { + font-size: 0.6rem; } + .button.small { + font-size: 0.75rem; } + .button.large { + font-size: 1.25rem; } + .button.expanded { + display: block; + width: 100%; + margin-right: 0; + margin-left: 0; } + .button.primary { + background-color: #1779ba; + color: #fefefe; } + .button.primary:hover, .button.primary:focus { + background-color: #126195; + color: #fefefe; } + .button.secondary { + background-color: #767676; + color: #fefefe; } + .button.secondary:hover, .button.secondary:focus { + background-color: #5e5e5e; + color: #fefefe; } + .button.success { + background-color: #3adb76; + color: #0a0a0a; } + .button.success:hover, .button.success:focus { + background-color: #22bb5b; + color: #0a0a0a; } + .button.warning { + background-color: #ffae00; + color: #0a0a0a; } + .button.warning:hover, .button.warning:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button.alert { + background-color: #cc4b37; + color: #fefefe; } + .button.alert:hover, .button.alert:focus { + background-color: #a53b2a; + color: #fefefe; } + .button.disabled, .button[disabled] { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled, .button.disabled:hover, .button.disabled:focus, .button[disabled], .button[disabled]:hover, .button[disabled]:focus { + background-color: #1779ba; + color: #fefefe; } + .button.disabled.primary, .button[disabled].primary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.primary, .button.disabled.primary:hover, .button.disabled.primary:focus, .button[disabled].primary, .button[disabled].primary:hover, .button[disabled].primary:focus { + background-color: #1779ba; + color: #fefefe; } + .button.disabled.secondary, .button[disabled].secondary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.secondary, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #767676; + color: #fefefe; } + .button.disabled.success, .button[disabled].success { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.success, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #3adb76; + color: #0a0a0a; } + .button.disabled.warning, .button[disabled].warning { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.warning, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #ffae00; + color: #0a0a0a; } + .button.disabled.alert, .button[disabled].alert { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.alert, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #cc4b37; + color: #fefefe; } + .button.hollow { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow, .button.hollow:hover, .button.hollow:focus { + background-color: transparent; } + .button.hollow.disabled, .button.hollow.disabled:hover, .button.hollow.disabled:focus, .button.hollow[disabled], .button.hollow[disabled]:hover, .button.hollow[disabled]:focus { + background-color: transparent; } + .button.hollow:hover, .button.hollow:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow:hover.disabled, .button.hollow:hover[disabled], .button.hollow:focus.disabled, .button.hollow:focus[disabled] { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow.primary { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow.primary:hover, .button.hollow.primary:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow.primary:hover.disabled, .button.hollow.primary:hover[disabled], .button.hollow.primary:focus.disabled, .button.hollow.primary:focus[disabled] { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow.secondary { + border: 1px solid #767676; + color: #767676; } + .button.hollow.secondary:hover, .button.hollow.secondary:focus { + border-color: #3b3b3b; + color: #3b3b3b; } + .button.hollow.secondary:hover.disabled, .button.hollow.secondary:hover[disabled], .button.hollow.secondary:focus.disabled, .button.hollow.secondary:focus[disabled] { + border: 1px solid #767676; + color: #767676; } + .button.hollow.success { + border: 1px solid #3adb76; + color: #3adb76; } + .button.hollow.success:hover, .button.hollow.success:focus { + border-color: #157539; + color: #157539; } + .button.hollow.success:hover.disabled, .button.hollow.success:hover[disabled], .button.hollow.success:focus.disabled, .button.hollow.success:focus[disabled] { + border: 1px solid #3adb76; + color: #3adb76; } + .button.hollow.warning { + border: 1px solid #ffae00; + color: #ffae00; } + .button.hollow.warning:hover, .button.hollow.warning:focus { + border-color: #805700; + color: #805700; } + .button.hollow.warning:hover.disabled, .button.hollow.warning:hover[disabled], .button.hollow.warning:focus.disabled, .button.hollow.warning:focus[disabled] { + border: 1px solid #ffae00; + color: #ffae00; } + .button.hollow.alert { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button.hollow.alert:hover, .button.hollow.alert:focus { + border-color: #67251a; + color: #67251a; } + .button.hollow.alert:hover.disabled, .button.hollow.alert:hover[disabled], .button.hollow.alert:focus.disabled, .button.hollow.alert:focus[disabled] { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button.clear { + border: 1px solid #1779ba; + color: #1779ba; } + .button.clear, .button.clear:hover, .button.clear:focus { + background-color: transparent; } + .button.clear.disabled, .button.clear.disabled:hover, .button.clear.disabled:focus, .button.clear[disabled], .button.clear[disabled]:hover, .button.clear[disabled]:focus { + background-color: transparent; } + .button.clear:hover, .button.clear:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.clear:hover.disabled, .button.clear:hover[disabled], .button.clear:focus.disabled, .button.clear:focus[disabled] { + border: 1px solid #1779ba; + color: #1779ba; } + .button.clear, .button.clear.disabled, .button.clear[disabled], .button.clear:hover, .button.clear:hover.disabled, .button.clear:hover[disabled], .button.clear:focus, .button.clear:focus.disabled, .button.clear:focus[disabled] { + border-color: transparent; } + .button.clear.primary { + border: 1px solid #1779ba; + color: #1779ba; } + .button.clear.primary:hover, .button.clear.primary:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.clear.primary:hover.disabled, .button.clear.primary:hover[disabled], .button.clear.primary:focus.disabled, .button.clear.primary:focus[disabled] { + border: 1px solid #1779ba; + color: #1779ba; } + .button.clear.primary, .button.clear.primary.disabled, .button.clear.primary[disabled], .button.clear.primary:hover, .button.clear.primary:hover.disabled, .button.clear.primary:hover[disabled], .button.clear.primary:focus, .button.clear.primary:focus.disabled, .button.clear.primary:focus[disabled] { + border-color: transparent; } + .button.clear.secondary { + border: 1px solid #767676; + color: #767676; } + .button.clear.secondary:hover, .button.clear.secondary:focus { + border-color: #3b3b3b; + color: #3b3b3b; } + .button.clear.secondary:hover.disabled, .button.clear.secondary:hover[disabled], .button.clear.secondary:focus.disabled, .button.clear.secondary:focus[disabled] { + border: 1px solid #767676; + color: #767676; } + .button.clear.secondary, .button.clear.secondary.disabled, .button.clear.secondary[disabled], .button.clear.secondary:hover, .button.clear.secondary:hover.disabled, .button.clear.secondary:hover[disabled], .button.clear.secondary:focus, .button.clear.secondary:focus.disabled, .button.clear.secondary:focus[disabled] { + border-color: transparent; } + .button.clear.success { + border: 1px solid #3adb76; + color: #3adb76; } + .button.clear.success:hover, .button.clear.success:focus { + border-color: #157539; + color: #157539; } + .button.clear.success:hover.disabled, .button.clear.success:hover[disabled], .button.clear.success:focus.disabled, .button.clear.success:focus[disabled] { + border: 1px solid #3adb76; + color: #3adb76; } + .button.clear.success, .button.clear.success.disabled, .button.clear.success[disabled], .button.clear.success:hover, .button.clear.success:hover.disabled, .button.clear.success:hover[disabled], .button.clear.success:focus, .button.clear.success:focus.disabled, .button.clear.success:focus[disabled] { + border-color: transparent; } + .button.clear.warning { + border: 1px solid #ffae00; + color: #ffae00; } + .button.clear.warning:hover, .button.clear.warning:focus { + border-color: #805700; + color: #805700; } + .button.clear.warning:hover.disabled, .button.clear.warning:hover[disabled], .button.clear.warning:focus.disabled, .button.clear.warning:focus[disabled] { + border: 1px solid #ffae00; + color: #ffae00; } + .button.clear.warning, .button.clear.warning.disabled, .button.clear.warning[disabled], .button.clear.warning:hover, .button.clear.warning:hover.disabled, .button.clear.warning:hover[disabled], .button.clear.warning:focus, .button.clear.warning:focus.disabled, .button.clear.warning:focus[disabled] { + border-color: transparent; } + .button.clear.alert { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button.clear.alert:hover, .button.clear.alert:focus { + border-color: #67251a; + color: #67251a; } + .button.clear.alert:hover.disabled, .button.clear.alert:hover[disabled], .button.clear.alert:focus.disabled, .button.clear.alert:focus[disabled] { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button.clear.alert, .button.clear.alert.disabled, .button.clear.alert[disabled], .button.clear.alert:hover, .button.clear.alert:hover.disabled, .button.clear.alert:hover[disabled], .button.clear.alert:focus, .button.clear.alert:focus.disabled, .button.clear.alert:focus[disabled] { + border-color: transparent; } + .button.dropdown::after { + display: block; + width: 0; + height: 0; + border: inset 0.4em; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #fefefe transparent transparent; + position: relative; + top: 0.4em; + display: inline-block; + float: right; + margin-left: 1em; } + .button.dropdown.hollow::after { + border-top-color: #1779ba; } + .button.dropdown.hollow.primary::after { + border-top-color: #1779ba; } + .button.dropdown.hollow.secondary::after { + border-top-color: #767676; } + .button.dropdown.hollow.success::after { + border-top-color: #3adb76; } + .button.dropdown.hollow.warning::after { + border-top-color: #ffae00; } + .button.dropdown.hollow.alert::after { + border-top-color: #cc4b37; } + .button.arrow-only::after { + top: -0.1em; + float: none; + margin-left: 0; } + +a.button:hover, a.button:focus { + text-decoration: none; } + +[type='text'], [type='password'], [type='date'], [type='datetime'], [type='datetime-local'], [type='month'], [type='week'], [type='email'], [type='number'], [type='search'], [type='tel'], [type='time'], [type='url'], [type='color'], +textarea { + display: block; + box-sizing: border-box; + width: 100%; + height: 2.4375rem; + margin: 0 0 1rem; + padding: 0.5rem; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + font-family: inherit; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + color: #0a0a0a; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } + [type='text']:focus, [type='password']:focus, [type='date']:focus, [type='datetime']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='week']:focus, [type='email']:focus, [type='number']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='url']:focus, [type='color']:focus, + textarea:focus { + outline: none; + border: 1px solid #8a8a8a; + background-color: #fefefe; + box-shadow: 0 0 5px #cacaca; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + +textarea { + max-width: 100%; } + textarea[rows] { + height: auto; } + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #cacaca; } + +input::-moz-placeholder, +textarea::-moz-placeholder { + color: #cacaca; } + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #cacaca; } + +input::placeholder, +textarea::placeholder { + color: #cacaca; } + +input:disabled, input[readonly], +textarea:disabled, +textarea[readonly] { + background-color: #e6e6e6; + cursor: not-allowed; } + +[type='submit'], +[type='button'] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0; } + +input[type='search'] { + box-sizing: border-box; } + +[type='file'], +[type='checkbox'], +[type='radio'] { + margin: 0 0 1rem; } + +[type='checkbox'] + label, +[type='radio'] + label { + display: inline-block; + vertical-align: baseline; + margin-left: 0.5rem; + margin-right: 1rem; + margin-bottom: 0; } + [type='checkbox'] + label[for], + [type='radio'] + label[for] { + cursor: pointer; } + +label > [type='checkbox'], +label > [type='radio'] { + margin-right: 0.5rem; } + +[type='file'] { + width: 100%; } + +label { + display: block; + margin: 0; + font-size: 0.875rem; + font-weight: normal; + line-height: 1.8; + color: #0a0a0a; } + label.middle { + margin: 0 0 1rem; + padding: 0.5625rem 0; } + +.help-text { + margin-top: -0.5rem; + font-size: 0.8125rem; + font-style: italic; + color: #0a0a0a; } + +.input-group { + display: -ms-flexbox; + display: flex; + width: 100%; + margin-bottom: 1rem; + -ms-flex-align: stretch; + align-items: stretch; } + .input-group > :first-child { + border-radius: 0 0 0 0; } + .input-group > :last-child > * { + border-radius: 0 0 0 0; } + +.input-group-label, .input-group-field, .input-group-button, .input-group-button a, +.input-group-button input, +.input-group-button button, +.input-group-button label { + margin: 0; + white-space: nowrap; } + +.input-group-label { + padding: 0 1rem; + border: 1px solid #cacaca; + background: #e6e6e6; + color: #0a0a0a; + text-align: center; + white-space: nowrap; + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-align: center; + align-items: center; } + .input-group-label:first-child { + border-right: 0; } + .input-group-label:last-child { + border-left: 0; } + +.input-group-field { + border-radius: 0; + -ms-flex: 1 1 0px; + flex: 1 1 0px; + height: auto; + min-width: 0; } + +.input-group-button { + padding-top: 0; + padding-bottom: 0; + text-align: center; + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .input-group-button a, + .input-group-button input, + .input-group-button button, + .input-group-button label { + height: auto; + -ms-flex-item-align: stretch; + -ms-grid-row-align: stretch; + align-self: stretch; + padding-top: 0; + padding-bottom: 0; + font-size: 1rem; } + +fieldset { + margin: 0; + padding: 0; + border: 0; } + +legend { + max-width: 100%; + margin-bottom: 0.5rem; } + +.fieldset { + margin: 1.125rem 0; + padding: 1.25rem; + border: 1px solid #cacaca; } + .fieldset legend { + margin: 0; + margin-left: -0.1875rem; + padding: 0 0.1875rem; } + +select { + height: 2.4375rem; + margin: 0 0 1rem; + padding: 0.5rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + font-family: inherit; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + color: #0a0a0a; + background-image: url("data:image/svg+xml;utf8,"); + background-origin: content-box; + background-position: right -1rem center; + background-repeat: no-repeat; + background-size: 9px 6px; + padding-right: 1.5rem; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + @media screen and (min-width: 0\0) { + select { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg=="); } } + select:focus { + outline: none; + border: 1px solid #8a8a8a; + background-color: #fefefe; + box-shadow: 0 0 5px #cacaca; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + select:disabled { + background-color: #e6e6e6; + cursor: not-allowed; } + select::-ms-expand { + display: none; } + select[multiple] { + height: auto; + background-image: none; } + +.is-invalid-input:not(:focus) { + border-color: #cc4b37; + background-color: #f9ecea; } + .is-invalid-input:not(:focus)::-webkit-input-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus)::-moz-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus):-ms-input-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus)::placeholder { + color: #cc4b37; } + +.is-invalid-label { + color: #cc4b37; } + +.form-error { + display: none; + margin-top: -0.5rem; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: bold; + color: #cc4b37; } + .form-error.is-visible { + display: block; } + +.accordion { + margin-left: 0; + background: #fefefe; + list-style-type: none; } + .accordion[disabled] .accordion-title { + cursor: not-allowed; } + +.accordion-item:first-child > :first-child { + border-radius: 0 0 0 0; } + +.accordion-item:last-child > :last-child { + border-radius: 0 0 0 0; } + +.accordion-title { + position: relative; + display: block; + padding: 1.25rem 1rem; + border: 1px solid #e6e6e6; + border-bottom: 0; + font-size: 0.75rem; + line-height: 1; + color: #1779ba; } + :last-child:not(.is-active) > .accordion-title { + border-bottom: 1px solid #e6e6e6; + border-radius: 0 0 0 0; } + .accordion-title:hover, .accordion-title:focus { + background-color: #e6e6e6; } + .accordion-title::before { + position: absolute; + top: 50%; + right: 1rem; + margin-top: -0.5rem; + content: '+'; } + .is-active > .accordion-title::before { + content: '\2013'; } + +.accordion-content { + display: none; + padding: 1rem; + border: 1px solid #e6e6e6; + border-bottom: 0; + background-color: #fefefe; + color: #0a0a0a; } + :last-child > .accordion-content:last-child { + border-bottom: 1px solid #e6e6e6; } + +.accordion-menu li { + width: 100%; } + +.accordion-menu a { + padding: 0.7rem 1rem; } + +.accordion-menu .is-accordion-submenu a { + padding: 0.7rem 1rem; } + +.accordion-menu .nested.is-accordion-submenu { + margin-right: 0; + margin-left: 1rem; } + +.accordion-menu.align-right .nested.is-accordion-submenu { + margin-right: 1rem; + margin-left: 0; } + +.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a { + position: relative; } + .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; + position: absolute; + top: 50%; + margin-top: -3px; + right: 1rem; } + +.accordion-menu.align-left .is-accordion-submenu-parent > a::after { + left: auto; + right: 1rem; } + +.accordion-menu.align-right .is-accordion-submenu-parent > a::after { + right: auto; + left: 1rem; } + +.accordion-menu .is-accordion-submenu-parent[aria-expanded='true'] > a::after { + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; } + +.is-accordion-submenu-parent { + position: relative; } + +.has-submenu-toggle > a { + margin-right: 40px; } + +.submenu-toggle { + position: absolute; + top: 0; + right: 0; + cursor: pointer; + width: 40px; + height: 40px; } + .submenu-toggle::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; + top: 0; + bottom: 0; + margin: auto; } + +.submenu-toggle[aria-expanded='true']::after { + -ms-transform: scaleY(-1); + transform: scaleY(-1); + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; } + +.submenu-toggle-text { + position: absolute !important; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + border: 0; } + +.badge { + display: inline-block; + min-width: 2.1em; + padding: 0.3em; + border-radius: 50%; + font-size: 0.6rem; + text-align: center; + background: #1779ba; + color: #fefefe; } + .badge.primary { + background: #1779ba; + color: #fefefe; } + .badge.secondary { + background: #767676; + color: #fefefe; } + .badge.success { + background: #3adb76; + color: #0a0a0a; } + .badge.warning { + background: #ffae00; + color: #0a0a0a; } + .badge.alert { + background: #cc4b37; + color: #fefefe; } + +.breadcrumbs { + margin: 0 0 1rem 0; + list-style: none; } + .breadcrumbs::before, .breadcrumbs::after { + display: table; + content: ' '; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-order: 1; + order: 1; } + .breadcrumbs::after { + clear: both; } + .breadcrumbs li { + float: left; + font-size: 0.6875rem; + color: #0a0a0a; + cursor: default; + text-transform: uppercase; } + .breadcrumbs li:not(:last-child)::after { + position: relative; + margin: 0 0.75rem; + opacity: 1; + content: "/"; + color: #cacaca; } + .breadcrumbs a { + color: #1779ba; } + .breadcrumbs a:hover { + text-decoration: underline; } + .breadcrumbs .disabled { + color: #cacaca; + cursor: not-allowed; } + +.button-group { + margin-bottom: 1rem; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-align: stretch; + align-items: stretch; } + .button-group::before, .button-group::after { + display: table; + content: ' '; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-order: 1; + order: 1; } + .button-group::after { + clear: both; } + .button-group .button { + margin: 0; + margin-right: 1px; + margin-bottom: 1px; + font-size: 0.9rem; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .button-group .button:last-child { + margin-right: 0; } + .button-group.tiny .button { + font-size: 0.6rem; } + .button-group.small .button { + font-size: 0.75rem; } + .button-group.large .button { + font-size: 1.25rem; } + .button-group.expanded .button { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .button-group.primary .button { + background-color: #1779ba; + color: #fefefe; } + .button-group.primary .button:hover, .button-group.primary .button:focus { + background-color: #126195; + color: #fefefe; } + .button-group.secondary .button { + background-color: #767676; + color: #fefefe; } + .button-group.secondary .button:hover, .button-group.secondary .button:focus { + background-color: #5e5e5e; + color: #fefefe; } + .button-group.success .button { + background-color: #3adb76; + color: #0a0a0a; } + .button-group.success .button:hover, .button-group.success .button:focus { + background-color: #22bb5b; + color: #0a0a0a; } + .button-group.warning .button { + background-color: #ffae00; + color: #0a0a0a; } + .button-group.warning .button:hover, .button-group.warning .button:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button-group.alert .button { + background-color: #cc4b37; + color: #fefefe; } + .button-group.alert .button:hover, .button-group.alert .button:focus { + background-color: #a53b2a; + color: #fefefe; } + .button-group.stacked, .button-group.stacked-for-small, .button-group.stacked-for-medium { + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button { + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child { + margin-bottom: 0; } + @media print, screen and (min-width: 40em) { + .button-group.stacked-for-small .button { + -ms-flex: 1 1 0px; + flex: 1 1 0px; + margin-bottom: 0; } } + @media print, screen and (min-width: 64em) { + .button-group.stacked-for-medium .button { + -ms-flex: 1 1 0px; + flex: 1 1 0px; + margin-bottom: 0; } } + @media screen and (max-width: 39.9375em) { + .button-group.stacked-for-small.expanded { + display: block; } + .button-group.stacked-for-small.expanded .button { + display: block; + margin-right: 0; } } + +.card { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-positive: 1; + flex-grow: 1; + margin-bottom: 1rem; + border: 1px solid #e6e6e6; + border-radius: 0; + background: #fefefe; + box-shadow: none; + overflow: hidden; + color: #0a0a0a; } + .card > :last-child { + margin-bottom: 0; } + +.card-divider { + -ms-flex: 0 1 auto; + flex: 0 1 auto; + display: -ms-flexbox; + display: flex; + padding: 1rem; + background: #e6e6e6; } + .card-divider > :last-child { + margin-bottom: 0; } + +.card-section { + -ms-flex: 1 0 auto; + flex: 1 0 auto; + padding: 1rem; } + .card-section > :last-child { + margin-bottom: 0; } + +.card-image { + min-height: 1px; } + +.callout { + position: relative; + margin: 0 0 1rem 0; + padding: 1rem; + border: 1px solid rgba(10, 10, 10, 0.25); + border-radius: 0; + background-color: white; + color: #0a0a0a; } + .callout > :first-child { + margin-top: 0; } + .callout > :last-child { + margin-bottom: 0; } + .callout.primary { + background-color: #d7ecfa; + color: #0a0a0a; } + .callout.secondary { + background-color: #eaeaea; + color: #0a0a0a; } + .callout.success { + background-color: #e1faea; + color: #0a0a0a; } + .callout.warning { + background-color: #fff3d9; + color: #0a0a0a; } + .callout.alert { + background-color: #f7e4e1; + color: #0a0a0a; } + .callout.small { + padding-top: 0.5rem; + padding-right: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 0.5rem; } + .callout.large { + padding-top: 3rem; + padding-right: 3rem; + padding-bottom: 3rem; + padding-left: 3rem; } + +.close-button { + position: absolute; + color: #8a8a8a; + cursor: pointer; } + [data-whatinput='mouse'] .close-button { + outline: 0; } + .close-button:hover, .close-button:focus { + color: #0a0a0a; } + .close-button.small { + right: 0.66rem; + top: 0.33em; + font-size: 1.5em; + line-height: 1; } + .close-button, .close-button.medium { + right: 1rem; + top: 0.5rem; + font-size: 2em; + line-height: 1; } + +.menu { + padding: 0; + margin: 0; + list-style: none; + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + [data-whatinput='mouse'] .menu li { + outline: 0; } + .menu a, + .menu .button { + line-height: 1; + text-decoration: none; + display: block; + padding: 0.7rem 1rem; } + .menu input, + .menu select, + .menu a, + .menu button { + margin-bottom: 0; } + .menu input { + display: inline-block; } + .menu, .menu.horizontal { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-direction: row; + flex-direction: row; } + .menu.vertical { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-direction: column; + flex-direction: column; } + .menu.expanded li { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .menu.simple { + -ms-flex-align: center; + align-items: center; } + .menu.simple li + li { + margin-left: 1rem; } + .menu.simple a { + padding: 0; } + @media print, screen and (min-width: 40em) { + .menu.medium-horizontal { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-direction: row; + flex-direction: row; } + .menu.medium-vertical { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-direction: column; + flex-direction: column; } + .menu.medium-expanded li { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .menu.medium-simple li { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } } + @media print, screen and (min-width: 64em) { + .menu.large-horizontal { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-direction: row; + flex-direction: row; } + .menu.large-vertical { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-direction: column; + flex-direction: column; } + .menu.large-expanded li { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .menu.large-simple li { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } } + .menu.nested { + margin-right: 0; + margin-left: 1rem; } + .menu.icons a { + display: -ms-flexbox; + display: flex; } + .menu.icon-top a, .menu.icon-right a, .menu.icon-bottom a, .menu.icon-left a { + display: -ms-flexbox; + display: flex; } + .menu.icon-left li a { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; } + .menu.icon-left li a img, + .menu.icon-left li a i, + .menu.icon-left li a svg { + margin-right: 0.25rem; } + .menu.icon-right li a { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; } + .menu.icon-right li a img, + .menu.icon-right li a i, + .menu.icon-right li a svg { + margin-left: 0.25rem; } + .menu.icon-top li a { + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; } + .menu.icon-top li a img, + .menu.icon-top li a i, + .menu.icon-top li a svg { + -ms-flex-item-align: stretch; + -ms-grid-row-align: stretch; + align-self: stretch; + margin-bottom: 0.25rem; + text-align: center; } + .menu.icon-bottom li a { + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; } + .menu.icon-bottom li a img, + .menu.icon-bottom li a i, + .menu.icon-bottom li a svg { + -ms-flex-item-align: stretch; + -ms-grid-row-align: stretch; + align-self: stretch; + margin-bottom: 0.25rem; + text-align: center; } + .menu .is-active > a { + background: #1779ba; + color: #fefefe; } + .menu .active > a { + background: #1779ba; + color: #fefefe; } + .menu.align-left { + -ms-flex-pack: start; + justify-content: flex-start; } + .menu.align-right li { + display: -ms-flexbox; + display: flex; + -ms-flex-pack: end; + justify-content: flex-end; } + .menu.align-right li .submenu li { + -ms-flex-pack: start; + justify-content: flex-start; } + .menu.align-right.vertical li { + display: block; + text-align: right; } + .menu.align-right.vertical li .submenu li { + text-align: right; } + .menu.align-right .nested { + margin-right: 1rem; + margin-left: 0; } + .menu.align-center li { + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; } + .menu.align-center li .submenu li { + -ms-flex-pack: start; + justify-content: flex-start; } + .menu .menu-text { + padding: 0.7rem 1rem; + font-weight: bold; + line-height: 1; + color: inherit; } + +.menu-centered > .menu { + -ms-flex-pack: center; + justify-content: center; } + .menu-centered > .menu li { + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; } + .menu-centered > .menu li .submenu li { + -ms-flex-pack: start; + justify-content: flex-start; } + +.no-js [data-responsive-menu] ul { + display: none; } + +.menu-icon { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #fefefe; + box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + content: ''; } + .menu-icon:hover::after { + background: #cacaca; + box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; } + +.menu-icon.dark { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon.dark::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #0a0a0a; + box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + content: ''; } + .menu-icon.dark:hover::after { + background: #8a8a8a; + box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } + +.is-drilldown { + position: relative; + overflow: hidden; } + .is-drilldown li { + display: block; } + .is-drilldown.animate-height { + transition: height 0.5s; } + +.drilldown a { + padding: 0.7rem 1rem; + background: #fefefe; } + +.drilldown .is-drilldown-submenu { + position: absolute; + top: 0; + left: 100%; + z-index: -1; + width: 100%; + background: #fefefe; + transition: transform 0.15s linear; } + .drilldown .is-drilldown-submenu.is-active { + z-index: 1; + display: block; + -ms-transform: translateX(-100%); + transform: translateX(-100%); } + .drilldown .is-drilldown-submenu.is-closing { + -ms-transform: translateX(100%); + transform: translateX(100%); } + .drilldown .is-drilldown-submenu a { + padding: 0.7rem 1rem; } + +.drilldown .nested.is-drilldown-submenu { + margin-right: 0; + margin-left: 0; } + +.drilldown .drilldown-submenu-cover-previous { + min-height: 100%; } + +.drilldown .is-drilldown-submenu-parent > a { + position: relative; } + .drilldown .is-drilldown-submenu-parent > a::after { + position: absolute; + top: 50%; + margin-top: -6px; + right: 1rem; + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #1779ba; } + +.drilldown.align-left .is-drilldown-submenu-parent > a::after { + left: auto; + right: 1rem; + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #1779ba; } + +.drilldown.align-right .is-drilldown-submenu-parent > a::after { + right: auto; + left: 1rem; + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #1779ba transparent transparent; } + +.drilldown .js-drilldown-back > a::before { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #1779ba transparent transparent; + border-left-width: 0; + display: inline-block; + vertical-align: middle; + margin-right: 0.75rem; + border-left-width: 0; } + +.dropdown-pane { + position: absolute; + z-index: 10; + width: 300px; + padding: 1rem; + visibility: hidden; + display: none; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + font-size: 1rem; } + .dropdown-pane.is-opening { + display: block; } + .dropdown-pane.is-open { + visibility: visible; + display: block; } + +.dropdown-pane.tiny { + width: 100px; } + +.dropdown-pane.small { + width: 200px; } + +.dropdown-pane.large { + width: 400px; } + +.dropdown.menu > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + +.dropdown.menu > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + +.dropdown.menu > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + +.dropdown.menu > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; + right: 5px; + left: auto; + margin-top: -3px; } + +.dropdown.menu a { + padding: 0.7rem 1rem; } + [data-whatinput='mouse'] .dropdown.menu a { + outline: 0; } + +.dropdown.menu .is-active > a { + background: transparent; + color: #1779ba; } + +.no-js .dropdown.menu ul { + display: none; } + +.dropdown.menu .nested.is-dropdown-submenu { + margin-right: 0; + margin-left: 0; } + +.dropdown.menu.vertical > li .is-dropdown-submenu { + top: 0; } + +.dropdown.menu.vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; + top: 0; } + +.dropdown.menu.vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + +.dropdown.menu.vertical > li > a::after { + right: 14px; } + +.dropdown.menu.vertical > li.opens-left > a::after { + right: auto; + left: 5px; + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #1779ba transparent transparent; } + +.dropdown.menu.vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #1779ba; } + +@media print, screen and (min-width: 40em) { + .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; + right: 5px; + left: auto; + margin-top: -3px; } + .dropdown.menu.medium-vertical > li .is-dropdown-submenu { + top: 0; } + .dropdown.menu.medium-vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; + top: 0; } + .dropdown.menu.medium-vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + .dropdown.menu.medium-vertical > li > a::after { + right: 14px; } + .dropdown.menu.medium-vertical > li.opens-left > a::after { + right: auto; + left: 5px; + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #1779ba transparent transparent; } + .dropdown.menu.medium-vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #1779ba; } } + +@media print, screen and (min-width: 64em) { + .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #1779ba transparent transparent; + right: 5px; + left: auto; + margin-top: -3px; } + .dropdown.menu.large-vertical > li .is-dropdown-submenu { + top: 0; } + .dropdown.menu.large-vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; + top: 0; } + .dropdown.menu.large-vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + .dropdown.menu.large-vertical > li > a::after { + right: 14px; } + .dropdown.menu.large-vertical > li.opens-left > a::after { + right: auto; + left: 5px; + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #1779ba transparent transparent; } + .dropdown.menu.large-vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #1779ba; } } + +.dropdown.menu.align-right .is-dropdown-submenu.first-sub { + top: 100%; + right: 0; + left: auto; } + +.is-dropdown-menu.vertical { + width: 100px; } + .is-dropdown-menu.vertical.align-right { + float: right; } + +.is-dropdown-submenu-parent { + position: relative; } + .is-dropdown-submenu-parent a::after { + position: absolute; + top: 50%; + right: 5px; + left: auto; + margin-top: -6px; } + .is-dropdown-submenu-parent.opens-inner > .is-dropdown-submenu { + top: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + +.is-dropdown-submenu { + position: absolute; + top: 0; + left: 100%; + z-index: 1; + display: none; + min-width: 200px; + border: 1px solid #cacaca; + background: #fefefe; } + .dropdown .is-dropdown-submenu a { + padding: 0.7rem 1rem; } + .is-dropdown-submenu .is-dropdown-submenu-parent > a::after { + right: 14px; } + .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after { + right: auto; + left: 5px; + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #1779ba transparent transparent; } + .is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #1779ba; } + .is-dropdown-submenu .is-dropdown-submenu { + margin-top: -1px; } + .is-dropdown-submenu > li { + width: 100%; } + .is-dropdown-submenu.js-dropdown-active { + display: block; } + +.responsive-embed, +.flex-video { + position: relative; + height: 0; + margin-bottom: 1rem; + padding-bottom: 75%; + overflow: hidden; } + .responsive-embed iframe, + .responsive-embed object, + .responsive-embed embed, + .responsive-embed video, + .flex-video iframe, + .flex-video object, + .flex-video embed, + .flex-video video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + .responsive-embed.widescreen, + .flex-video.widescreen { + padding-bottom: 56.25%; } + +.label { + display: inline-block; + padding: 0.33333rem 0.5rem; + border-radius: 0; + font-size: 0.8rem; + line-height: 1; + white-space: nowrap; + cursor: default; + background: #1779ba; + color: #fefefe; } + .label.primary { + background: #1779ba; + color: #fefefe; } + .label.secondary { + background: #767676; + color: #fefefe; } + .label.success { + background: #3adb76; + color: #0a0a0a; } + .label.warning { + background: #ffae00; + color: #0a0a0a; } + .label.alert { + background: #cc4b37; + color: #fefefe; } + +.media-object { + display: -ms-flexbox; + display: flex; + margin-bottom: 1rem; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .media-object img { + max-width: none; } + @media screen and (max-width: 39.9375em) { + .media-object.stack-for-small { + -ms-flex-wrap: wrap; + flex-wrap: wrap; } } + @media screen and (max-width: 39.9375em) { + .media-object.stack-for-small .media-object-section { + padding: 0; + padding-bottom: 1rem; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + max-width: 100%; } + .media-object.stack-for-small .media-object-section img { + width: 100%; } } + +.media-object-section { + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + .media-object-section:first-child { + padding-right: 1rem; } + .media-object-section:last-child:not(:nth-child(2)) { + padding-left: 1rem; } + .media-object-section > :last-child { + margin-bottom: 0; } + .media-object-section.main-section { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + +.is-off-canvas-open { + overflow: hidden; } + +.js-off-canvas-overlay { + position: absolute; + top: 0; + left: 0; + z-index: 11; + width: 100%; + height: 100%; + transition: opacity 0.5s ease, visibility 0.5s ease; + background: rgba(254, 254, 254, 0.25); + opacity: 0; + visibility: hidden; + overflow: hidden; } + .js-off-canvas-overlay.is-visible { + opacity: 1; + visibility: visible; } + .js-off-canvas-overlay.is-closable { + cursor: pointer; } + .js-off-canvas-overlay.is-overlay-absolute { + position: absolute; } + .js-off-canvas-overlay.is-overlay-fixed { + position: fixed; } + +.off-canvas-wrapper { + position: relative; + overflow: hidden; } + +.off-canvas { + position: fixed; + z-index: 12; + transition: transform 0.5s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background: #e6e6e6; } + [data-whatinput='mouse'] .off-canvas { + outline: 0; } + .off-canvas.is-transition-push { + z-index: 12; } + .off-canvas.is-closed { + visibility: hidden; } + .off-canvas.is-transition-overlap { + z-index: 13; } + .off-canvas.is-transition-overlap.is-open { + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + .off-canvas.is-open { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +.off-canvas-absolute { + position: absolute; + z-index: 12; + transition: transform 0.5s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background: #e6e6e6; } + [data-whatinput='mouse'] .off-canvas-absolute { + outline: 0; } + .off-canvas-absolute.is-transition-push { + z-index: 12; } + .off-canvas-absolute.is-closed { + visibility: hidden; } + .off-canvas-absolute.is-transition-overlap { + z-index: 13; } + .off-canvas-absolute.is-transition-overlap.is-open { + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + .off-canvas-absolute.is-open { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +.position-left { + top: 0; + left: 0; + height: 100%; + overflow-y: auto; + width: 250px; + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .off-canvas-content .off-canvas.position-left { + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-left.has-transition-push { + -ms-transform: translateX(250px); + transform: translateX(250px); } + .position-left.is-transition-push { + box-shadow: inset -13px 0 20px -13px rgba(10, 10, 10, 0.25); } + +.position-right { + top: 0; + right: 0; + height: 100%; + overflow-y: auto; + width: 250px; + -ms-transform: translateX(250px); + transform: translateX(250px); } + .off-canvas-content .off-canvas.position-right { + -ms-transform: translateX(250px); + transform: translateX(250px); } + .off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-right.has-transition-push { + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .position-right.is-transition-push { + box-shadow: inset 13px 0 20px -13px rgba(10, 10, 10, 0.25); } + +.position-top { + top: 0; + left: 0; + width: 100%; + overflow-x: auto; + height: 250px; + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .off-canvas-content .off-canvas.position-top { + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-top.has-transition-push { + -ms-transform: translateY(250px); + transform: translateY(250px); } + .position-top.is-transition-push { + box-shadow: inset 0 -13px 20px -13px rgba(10, 10, 10, 0.25); } + +.position-bottom { + bottom: 0; + left: 0; + width: 100%; + overflow-x: auto; + height: 250px; + -ms-transform: translateY(250px); + transform: translateY(250px); } + .off-canvas-content .off-canvas.position-bottom { + -ms-transform: translateY(250px); + transform: translateY(250px); } + .off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-bottom.has-transition-push { + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .position-bottom.is-transition-push { + box-shadow: inset 0 13px 20px -13px rgba(10, 10, 10, 0.25); } + +.off-canvas-content { + -ms-transform: none; + transform: none; + transition: transform 0.5s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .off-canvas-content.has-transition-push { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content .off-canvas.is-open { + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +@media print, screen and (min-width: 40em) { + .position-left.reveal-for-medium { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-left.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-left.reveal-for-medium { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-left { + margin-left: 250px; } + .position-left.reveal-for-medium ~ .off-canvas-content { + margin-left: 250px; } + .position-right.reveal-for-medium { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-right.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-right.reveal-for-medium { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-right { + margin-right: 250px; } + .position-right.reveal-for-medium ~ .off-canvas-content { + margin-right: 250px; } + .position-top.reveal-for-medium { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-top.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-top.reveal-for-medium { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-top { + margin-top: 250px; } + .position-top.reveal-for-medium ~ .off-canvas-content { + margin-top: 250px; } + .position-bottom.reveal-for-medium { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-bottom.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-bottom.reveal-for-medium { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-bottom { + margin-bottom: 250px; } + .position-bottom.reveal-for-medium ~ .off-canvas-content { + margin-bottom: 250px; } } + +@media print, screen and (min-width: 64em) { + .position-left.reveal-for-large { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-left.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-left.reveal-for-large { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-left { + margin-left: 250px; } + .position-left.reveal-for-large ~ .off-canvas-content { + margin-left: 250px; } + .position-right.reveal-for-large { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-right.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-right.reveal-for-large { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-right { + margin-right: 250px; } + .position-right.reveal-for-large ~ .off-canvas-content { + margin-right: 250px; } + .position-top.reveal-for-large { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-top.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-top.reveal-for-large { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-top { + margin-top: 250px; } + .position-top.reveal-for-large ~ .off-canvas-content { + margin-top: 250px; } + .position-bottom.reveal-for-large { + -ms-transform: none; + transform: none; + z-index: 12; + transition: none; + visibility: visible; } + .position-bottom.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-bottom.reveal-for-large { + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-bottom { + margin-bottom: 250px; } + .position-bottom.reveal-for-large ~ .off-canvas-content { + margin-bottom: 250px; } } + +@media print, screen and (min-width: 40em) { + .off-canvas.in-canvas-for-medium { + visibility: visible; + height: auto; + position: static; + background: inherit; + width: inherit; + overflow: inherit; + transition: inherit; } + .off-canvas.in-canvas-for-medium.position-left, .off-canvas.in-canvas-for-medium.position-right, .off-canvas.in-canvas-for-medium.position-top, .off-canvas.in-canvas-for-medium.position-bottom { + box-shadow: none; + -ms-transform: none; + transform: none; } + .off-canvas.in-canvas-for-medium .close-button { + display: none; } } + +@media print, screen and (min-width: 64em) { + .off-canvas.in-canvas-for-large { + visibility: visible; + height: auto; + position: static; + background: inherit; + width: inherit; + overflow: inherit; + transition: inherit; } + .off-canvas.in-canvas-for-large.position-left, .off-canvas.in-canvas-for-large.position-right, .off-canvas.in-canvas-for-large.position-top, .off-canvas.in-canvas-for-large.position-bottom { + box-shadow: none; + -ms-transform: none; + transform: none; } + .off-canvas.in-canvas-for-large .close-button { + display: none; } } + +.orbit { + position: relative; } + +.orbit-container { + position: relative; + height: 0; + margin: 0; + list-style: none; + overflow: hidden; } + +.orbit-slide { + width: 100%; } + .orbit-slide.no-motionui.is-active { + top: 0; + left: 0; } + +.orbit-figure { + margin: 0; } + +.orbit-image { + width: 100%; + max-width: 100%; + margin: 0; } + +.orbit-caption { + position: absolute; + bottom: 0; + width: 100%; + margin-bottom: 0; + padding: 1rem; + background-color: rgba(10, 10, 10, 0.5); + color: #fefefe; } + +.orbit-previous, .orbit-next { + position: absolute; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); + z-index: 10; + padding: 1rem; + color: #fefefe; } + [data-whatinput='mouse'] .orbit-previous, [data-whatinput='mouse'] .orbit-next { + outline: 0; } + .orbit-previous:hover, .orbit-next:hover, .orbit-previous:active, .orbit-next:active, .orbit-previous:focus, .orbit-next:focus { + background-color: rgba(10, 10, 10, 0.5); } + +.orbit-previous { + left: 0; } + +.orbit-next { + left: auto; + right: 0; } + +.orbit-bullets { + position: relative; + margin-top: 0.8rem; + margin-bottom: 0.8rem; + text-align: center; } + [data-whatinput='mouse'] .orbit-bullets { + outline: 0; } + .orbit-bullets button { + width: 1.2rem; + height: 1.2rem; + margin: 0.1rem; + border-radius: 50%; + background-color: #cacaca; } + .orbit-bullets button:hover { + background-color: #8a8a8a; } + .orbit-bullets button.is-active { + background-color: #8a8a8a; } + +.pagination { + margin-left: 0; + margin-bottom: 1rem; } + .pagination::before, .pagination::after { + display: table; + content: ' '; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-order: 1; + order: 1; } + .pagination::after { + clear: both; } + .pagination li { + margin-right: 0.0625rem; + border-radius: 0; + font-size: 0.875rem; + display: none; } + .pagination li:last-child, .pagination li:first-child { + display: inline-block; } + @media print, screen and (min-width: 40em) { + .pagination li { + display: inline-block; } } + .pagination a, + .pagination button { + display: block; + padding: 0.1875rem 0.625rem; + border-radius: 0; + color: #0a0a0a; } + .pagination a:hover, + .pagination button:hover { + background: #e6e6e6; } + .pagination .current { + padding: 0.1875rem 0.625rem; + background: #1779ba; + color: #fefefe; + cursor: default; } + .pagination .disabled { + padding: 0.1875rem 0.625rem; + color: #cacaca; + cursor: not-allowed; } + .pagination .disabled:hover { + background: transparent; } + .pagination .ellipsis::after { + padding: 0.1875rem 0.625rem; + content: '\2026'; + color: #0a0a0a; } + +.pagination-previous a::before, +.pagination-previous.disabled::before { + display: inline-block; + margin-right: 0.5rem; + content: '\00ab'; } + +.pagination-next a::after, +.pagination-next.disabled::after { + display: inline-block; + margin-left: 0.5rem; + content: '\00bb'; } + +.progress { + height: 1rem; + margin-bottom: 1rem; + border-radius: 0; + background-color: #cacaca; } + .progress.primary .progress-meter { + background-color: #1779ba; } + .progress.secondary .progress-meter { + background-color: #767676; } + .progress.success .progress-meter { + background-color: #3adb76; } + .progress.warning .progress-meter { + background-color: #ffae00; } + .progress.alert .progress-meter { + background-color: #cc4b37; } + +.progress-meter { + position: relative; + display: block; + width: 0%; + height: 100%; + background-color: #1779ba; } + +.progress-meter-text { + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + position: absolute; + margin: 0; + font-size: 0.75rem; + font-weight: bold; + color: #fefefe; + white-space: nowrap; } + +body.is-reveal-open { + overflow: hidden; } + +html.is-reveal-open, +html.is-reveal-open body { + min-height: 100%; + overflow: hidden; + position: fixed; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.reveal-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1005; + display: none; + background-color: rgba(10, 10, 10, 0.45); + overflow-y: scroll; } + +.reveal { + z-index: 1006; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + display: none; + padding: 1rem; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + position: relative; + top: 100px; + margin-right: auto; + margin-left: auto; + overflow-y: auto; } + [data-whatinput='mouse'] .reveal { + outline: 0; } + @media print, screen and (min-width: 40em) { + .reveal { + min-height: 0; } } + .reveal .column { + min-width: 0; } + .reveal > :last-child { + margin-bottom: 0; } + @media print, screen and (min-width: 40em) { + .reveal { + width: 600px; + max-width: 75rem; } } + .reveal.collapse { + padding: 0; } + @media print, screen and (min-width: 40em) { + .reveal.tiny { + width: 30%; + max-width: 75rem; } } + @media print, screen and (min-width: 40em) { + .reveal.small { + width: 50%; + max-width: 75rem; } } + @media print, screen and (min-width: 40em) { + .reveal.large { + width: 90%; + max-width: 75rem; } } + .reveal.full { + top: 0; + left: 0; + width: 100%; + max-width: none; + height: 100%; + height: 100vh; + min-height: 100vh; + margin-left: 0; + border: 0; + border-radius: 0; } + @media screen and (max-width: 39.9375em) { + .reveal { + top: 0; + left: 0; + width: 100%; + max-width: none; + height: 100%; + height: 100vh; + min-height: 100vh; + margin-left: 0; + border: 0; + border-radius: 0; } } + .reveal.without-overlay { + position: fixed; } + +.slider { + position: relative; + height: 0.5rem; + margin-top: 1.25rem; + margin-bottom: 2.25rem; + background-color: #e6e6e6; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -ms-touch-action: none; + touch-action: none; } + +.slider-fill { + position: absolute; + top: 0; + left: 0; + display: inline-block; + max-width: 100%; + height: 0.5rem; + background-color: #cacaca; + transition: all 0.2s ease-in-out; } + .slider-fill.is-dragging { + transition: all 0s linear; } + +.slider-handle { + position: absolute; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); + left: 0; + z-index: 1; + display: inline-block; + width: 1.4rem; + height: 1.4rem; + border-radius: 0; + background-color: #1779ba; + transition: all 0.2s ease-in-out; + -ms-touch-action: manipulation; + touch-action: manipulation; } + [data-whatinput='mouse'] .slider-handle { + outline: 0; } + .slider-handle:hover { + background-color: #14679e; } + .slider-handle.is-dragging { + transition: all 0s linear; } + +.slider.disabled, +.slider[disabled] { + opacity: 0.25; + cursor: not-allowed; } + +.slider.vertical { + display: inline-block; + width: 0.5rem; + height: 12.5rem; + margin: 0 1.25rem; + -ms-transform: scale(1, -1); + transform: scale(1, -1); } + .slider.vertical .slider-fill { + top: 0; + width: 0.5rem; + max-height: 100%; } + .slider.vertical .slider-handle { + position: absolute; + top: 0; + left: 50%; + width: 1.4rem; + height: 1.4rem; + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + +.sticky-container { + position: relative; } + +.sticky { + position: relative; + z-index: 0; + transform: translate3d(0, 0, 0); } + +.sticky.is-stuck { + position: fixed; + z-index: 5; + width: 100%; } + .sticky.is-stuck.is-at-top { + top: 0; } + .sticky.is-stuck.is-at-bottom { + bottom: 0; } + +.sticky.is-anchored { + position: relative; + right: auto; + left: auto; } + .sticky.is-anchored.is-at-bottom { + bottom: 0; } + +.switch { + height: 2rem; + position: relative; + margin-bottom: 1rem; + outline: 0; + font-size: 0.875rem; + font-weight: bold; + color: #fefefe; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.switch-input { + position: absolute; + margin-bottom: 0; + opacity: 0; } + +.switch-paddle { + position: relative; + display: block; + width: 4rem; + height: 2rem; + border-radius: 0; + background: #cacaca; + transition: all 0.25s ease-out; + font-weight: inherit; + color: inherit; + cursor: pointer; } + input + .switch-paddle { + margin: 0; } + .switch-paddle::after { + position: absolute; + top: 0.25rem; + left: 0.25rem; + display: block; + width: 1.5rem; + height: 1.5rem; + transform: translate3d(0, 0, 0); + border-radius: 0; + background: #fefefe; + transition: all 0.25s ease-out; + content: ''; } + input:checked ~ .switch-paddle { + background: #1779ba; } + input:checked ~ .switch-paddle::after { + left: 2.25rem; } + [data-whatinput='mouse'] input:focus ~ .switch-paddle { + outline: 0; } + +.switch-active, .switch-inactive { + position: absolute; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + +.switch-active { + left: 8%; + display: none; } + input:checked + label > .switch-active { + display: block; } + +.switch-inactive { + right: 15%; } + input:checked + label > .switch-inactive { + display: none; } + +.switch.tiny { + height: 1.5rem; } + .switch.tiny .switch-paddle { + width: 3rem; + height: 1.5rem; + font-size: 0.625rem; } + .switch.tiny .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1rem; + height: 1rem; } + .switch.tiny input:checked ~ .switch-paddle::after { + left: 1.75rem; } + +.switch.small { + height: 1.75rem; } + .switch.small .switch-paddle { + width: 3.5rem; + height: 1.75rem; + font-size: 0.75rem; } + .switch.small .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1.25rem; + height: 1.25rem; } + .switch.small input:checked ~ .switch-paddle::after { + left: 2rem; } + +.switch.large { + height: 2.5rem; } + .switch.large .switch-paddle { + width: 5rem; + height: 2.5rem; + font-size: 1rem; } + .switch.large .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 2rem; + height: 2rem; } + .switch.large input:checked ~ .switch-paddle::after { + left: 2.75rem; } + +table { + border-collapse: collapse; + width: 100%; + margin-bottom: 1rem; + border-radius: 0; } + table thead, + table tbody, + table tfoot { + border: 1px solid #f1f1f1; + background-color: #fefefe; } + table caption { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; } + table thead { + background: #f8f8f8; + color: #0a0a0a; } + table tfoot { + background: #f1f1f1; + color: #0a0a0a; } + table thead tr, + table tfoot tr { + background: transparent; } + table thead th, + table thead td, + table tfoot th, + table tfoot td { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; + text-align: left; } + table tbody th, + table tbody td { + padding: 0.5rem 0.625rem 0.625rem; } + table tbody tr:nth-child(even) { + border-bottom: 0; + background-color: #f1f1f1; } + table.unstriped tbody { + background-color: #fefefe; } + table.unstriped tbody tr { + border-bottom: 0; + border-bottom: 1px solid #f1f1f1; + background-color: #fefefe; } + +@media screen and (max-width: 63.9375em) { + table.stack thead { + display: none; } + table.stack tfoot { + display: none; } + table.stack tr, + table.stack th, + table.stack td { + display: block; } + table.stack td { + border-top: 0; } } + +table.scroll { + display: block; + width: 100%; + overflow-x: auto; } + +table.hover thead tr:hover { + background-color: #f3f3f3; } + +table.hover tfoot tr:hover { + background-color: #ececec; } + +table.hover tbody tr:hover { + background-color: #f9f9f9; } + +table.hover:not(.unstriped) tr:nth-of-type(even):hover { + background-color: #ececec; } + +.table-scroll { + overflow-x: auto; } + .table-scroll table { + width: auto; } + +.tabs { + margin: 0; + border: 1px solid #e6e6e6; + background: #fefefe; + list-style-type: none; } + .tabs::before, .tabs::after { + display: table; + content: ' '; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-order: 1; + order: 1; } + .tabs::after { + clear: both; } + +.tabs.vertical > li { + display: block; + float: none; + width: auto; } + +.tabs.simple > li > a { + padding: 0; } + .tabs.simple > li > a:hover { + background: transparent; } + +.tabs.primary { + background: #1779ba; } + .tabs.primary > li > a { + color: #fefefe; } + .tabs.primary > li > a:hover, .tabs.primary > li > a:focus { + background: #1673b1; } + +.tabs-title { + float: left; } + .tabs-title > a { + display: block; + padding: 1.25rem 1.5rem; + font-size: 0.75rem; + line-height: 1; + color: #1779ba; } + .tabs-title > a:hover { + background: #fefefe; + color: #1468a0; } + .tabs-title > a:focus, .tabs-title > a[aria-selected='true'] { + background: #e6e6e6; + color: #1779ba; } + +.tabs-content { + border: 1px solid #e6e6e6; + border-top: 0; + background: #fefefe; + color: #0a0a0a; + transition: all 0.5s ease; } + +.tabs-content.vertical { + border: 1px solid #e6e6e6; + border-left: 0; } + +.tabs-panel { + display: none; + padding: 1rem; } + .tabs-panel.is-active { + display: block; } + +.thumbnail { + display: inline-block; + max-width: 100%; + margin-bottom: 1rem; + border: solid 4px #fefefe; + border-radius: 0; + box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + line-height: 0; } + +a.thumbnail { + transition: box-shadow 200ms ease-out; } + a.thumbnail:hover, a.thumbnail:focus { + box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); } + a.thumbnail image { + box-shadow: none; } + +.title-bar { + padding: 0.5rem; + background: #0a0a0a; + color: #fefefe; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: start; + justify-content: flex-start; + -ms-flex-align: center; + align-items: center; } + .title-bar .menu-icon { + margin-left: 0.25rem; + margin-right: 0.25rem; } + +.title-bar-left, +.title-bar-right { + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + +.title-bar-right { + text-align: right; } + +.title-bar-title { + display: inline-block; + vertical-align: middle; + font-weight: bold; } + +.has-tip { + position: relative; + display: inline-block; + border-bottom: dotted 1px #8a8a8a; + font-weight: bold; + cursor: help; } + +.tooltip { + position: absolute; + top: calc(100% + 0.6495rem); + z-index: 1200; + max-width: 10rem; + padding: 0.75rem; + border-radius: 0; + background-color: #0a0a0a; + font-size: 80%; + color: #fefefe; } + .tooltip::before { + position: absolute; } + .tooltip.bottom::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-top-width: 0; + border-bottom-style: solid; + border-color: transparent transparent #0a0a0a; + bottom: 100%; } + .tooltip.bottom.align-center::before { + left: 50%; + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + .tooltip.top::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #0a0a0a transparent transparent; + top: 100%; + bottom: auto; } + .tooltip.top.align-center::before { + left: 50%; + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + .tooltip.left::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #0a0a0a; + left: 100%; } + .tooltip.left.align-center::before { + bottom: auto; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + .tooltip.right::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #0a0a0a transparent transparent; + right: 100%; + left: auto; } + .tooltip.right.align-center::before { + bottom: auto; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + .tooltip.align-top::before { + bottom: auto; + top: 10%; } + .tooltip.align-bottom::before { + bottom: 10%; + top: auto; } + .tooltip.align-left::before { + left: 10%; + right: auto; } + .tooltip.align-right::before { + left: auto; + right: 10%; } + +.top-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: justify; + justify-content: space-between; + -ms-flex-align: center; + align-items: center; + padding: 0.5rem; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .top-bar, + .top-bar ul { + background-color: #e6e6e6; } + .top-bar input { + max-width: 200px; + margin-right: 1rem; } + .top-bar .input-group-field { + width: 100%; + margin-right: 0; } + .top-bar input.button { + width: auto; } + .top-bar .top-bar-left, + .top-bar .top-bar-right { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + @media print, screen and (min-width: 40em) { + .top-bar { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .top-bar .top-bar-left { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + margin-right: auto; } + .top-bar .top-bar-right { + -ms-flex: 0 1 auto; + flex: 0 1 auto; + margin-left: auto; } } + @media screen and (max-width: 63.9375em) { + .top-bar.stacked-for-medium { + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .top-bar.stacked-for-medium .top-bar-left, + .top-bar.stacked-for-medium .top-bar-right { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } } + @media screen and (max-width: 74.9375em) { + .top-bar.stacked-for-large { + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .top-bar.stacked-for-large .top-bar-left, + .top-bar.stacked-for-large .top-bar-right { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } } + +.top-bar-title { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + margin: 0.5rem 1rem 0.5rem 0; } + +.top-bar-left, +.top-bar-right { + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + +.hide { + display: none !important; } + +.invisible { + visibility: hidden; } + +@media screen and (max-width: 39.9375em) { + .hide-for-small-only { + display: none !important; } } + +@media screen and (max-width: 0em), screen and (min-width: 40em) { + .show-for-small-only { + display: none !important; } } + +@media print, screen and (min-width: 40em) { + .hide-for-medium { + display: none !important; } } + +@media screen and (max-width: 39.9375em) { + .show-for-medium { + display: none !important; } } + +@media screen and (min-width: 40em) and (max-width: 63.9375em) { + .hide-for-medium-only { + display: none !important; } } + +@media screen and (max-width: 39.9375em), screen and (min-width: 64em) { + .show-for-medium-only { + display: none !important; } } + +@media print, screen and (min-width: 64em) { + .hide-for-large { + display: none !important; } } + +@media screen and (max-width: 63.9375em) { + .show-for-large { + display: none !important; } } + +@media screen and (min-width: 64em) and (max-width: 74.9375em) { + .hide-for-large-only { + display: none !important; } } + +@media screen and (max-width: 63.9375em), screen and (min-width: 75em) { + .show-for-large-only { + display: none !important; } } + +.show-for-sr, +.show-on-focus { + position: absolute !important; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + border: 0; } + +.show-on-focus:active, .show-on-focus:focus { + position: static !important; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + -webkit-clip-path: none; + clip-path: none; } + +.show-for-landscape, +.hide-for-portrait { + display: block !important; } + @media screen and (orientation: landscape) { + .show-for-landscape, + .hide-for-portrait { + display: block !important; } } + @media screen and (orientation: portrait) { + .show-for-landscape, + .hide-for-portrait { + display: none !important; } } + +.hide-for-landscape, +.show-for-portrait { + display: none !important; } + @media screen and (orientation: landscape) { + .hide-for-landscape, + .show-for-portrait { + display: none !important; } } + @media screen and (orientation: portrait) { + .hide-for-landscape, + .show-for-portrait { + display: block !important; } } + +.float-left { + float: left !important; } + +.float-right { + float: right !important; } + +.float-center { + display: block; + margin-right: auto; + margin-left: auto; } + +.clearfix::before, .clearfix::after { + display: table; + content: ' '; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-order: 1; + order: 1; } + +.clearfix::after { + clear: both; } + +.slide-in-down.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(-100%); + transform: translateY(-100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-down.mui-enter.mui-enter-active { + -ms-transform: translateY(0); + transform: translateY(0); } + +.slide-in-left.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(-100%); + transform: translateX(-100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-left.mui-enter.mui-enter-active { + -ms-transform: translateX(0); + transform: translateX(0); } + +.slide-in-up.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(100%); + transform: translateY(100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-up.mui-enter.mui-enter-active { + -ms-transform: translateY(0); + transform: translateY(0); } + +.slide-in-right.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(100%); + transform: translateX(100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-right.mui-enter.mui-enter-active { + -ms-transform: translateX(0); + transform: translateX(0); } + +.slide-out-down.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(0); + transform: translateY(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-down.mui-leave.mui-leave-active { + -ms-transform: translateY(100%); + transform: translateY(100%); } + +.slide-out-right.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(0); + transform: translateX(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-right.mui-leave.mui-leave-active { + -ms-transform: translateX(100%); + transform: translateX(100%); } + +.slide-out-up.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(0); + transform: translateY(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-up.mui-leave.mui-leave-active { + -ms-transform: translateY(-100%); + transform: translateY(-100%); } + +.slide-out-left.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(0); + transform: translateX(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-left.mui-leave.mui-leave-active { + -ms-transform: translateX(-100%); + transform: translateX(-100%); } + +.fade-in.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + opacity: 0; + transition-property: opacity; } + +.fade-in.mui-enter.mui-enter-active { + opacity: 1; } + +.fade-out.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + opacity: 1; + transition-property: opacity; } + +.fade-out.mui-leave.mui-leave-active { + opacity: 0; } + +.hinge-in-from-top.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateX(-90deg); + -ms-transform-origin: top; + transform-origin: top; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-top.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-right.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateY(-90deg); + -ms-transform-origin: right; + transform-origin: right; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-right.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-bottom.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateX(90deg); + -ms-transform-origin: bottom; + transform-origin: bottom; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-bottom.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-left.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateY(90deg); + -ms-transform-origin: left; + transform-origin: left; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-left.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-middle-x.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateX(-90deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-middle-x.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-middle-y.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateY(-90deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-middle-y.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-out-from-top.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: top; + transform-origin: top; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-top.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateX(-90deg); + opacity: 0; } + +.hinge-out-from-right.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: right; + transform-origin: right; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-right.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateY(-90deg); + opacity: 0; } + +.hinge-out-from-bottom.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: bottom; + transform-origin: bottom; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-bottom.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateX(90deg); + opacity: 0; } + +.hinge-out-from-left.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: left; + transform-origin: left; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-left.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateY(90deg); + opacity: 0; } + +.hinge-out-from-middle-x.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-middle-x.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateX(-90deg); + opacity: 0; } + +.hinge-out-from-middle-y.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-middle-y.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateY(-90deg); + opacity: 0; } + +.scale-in-up.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(0.5); + transform: scale(0.5); + transition-property: transform, opacity; + opacity: 0; } + +.scale-in-up.mui-enter.mui-enter-active { + -ms-transform: scale(1); + transform: scale(1); + opacity: 1; } + +.scale-in-down.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(1.5); + transform: scale(1.5); + transition-property: transform, opacity; + opacity: 0; } + +.scale-in-down.mui-enter.mui-enter-active { + -ms-transform: scale(1); + transform: scale(1); + opacity: 1; } + +.scale-out-up.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(1); + transform: scale(1); + transition-property: transform, opacity; + opacity: 1; } + +.scale-out-up.mui-leave.mui-leave-active { + -ms-transform: scale(1.5); + transform: scale(1.5); + opacity: 0; } + +.scale-out-down.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(1); + transform: scale(1); + transition-property: transform, opacity; + opacity: 1; } + +.scale-out-down.mui-leave.mui-leave-active { + -ms-transform: scale(0.5); + transform: scale(0.5); + opacity: 0; } + +.spin-in.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(-0.75turn); + transform: rotate(-0.75turn); + transition-property: transform, opacity; + opacity: 0; } + +.spin-in.mui-enter.mui-enter-active { + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; } + +.spin-out.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(0); + transform: rotate(0); + transition-property: transform, opacity; + opacity: 1; } + +.spin-out.mui-leave.mui-leave-active { + -ms-transform: rotate(0.75turn); + transform: rotate(0.75turn); + opacity: 0; } + +.spin-in-ccw.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(0.75turn); + transform: rotate(0.75turn); + transition-property: transform, opacity; + opacity: 0; } + +.spin-in-ccw.mui-enter.mui-enter-active { + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; } + +.spin-out-ccw.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(0); + transform: rotate(0); + transition-property: transform, opacity; + opacity: 1; } + +.spin-out-ccw.mui-leave.mui-leave-active { + -ms-transform: rotate(-0.75turn); + transform: rotate(-0.75turn); + opacity: 0; } + +.slow { + transition-duration: 750ms !important; } + +.fast { + transition-duration: 250ms !important; } + +.linear { + transition-timing-function: linear !important; } + +.ease { + transition-timing-function: ease !important; } + +.ease-in { + transition-timing-function: ease-in !important; } + +.ease-out { + transition-timing-function: ease-out !important; } + +.ease-in-out { + transition-timing-function: ease-in-out !important; } + +.bounce-in { + transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } + +.bounce-out { + transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } + +.bounce-in-out { + transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } + +.short-delay { + transition-delay: 300ms !important; } + +.long-delay { + transition-delay: 700ms !important; } + +.shake { + animation-name: shake-7; } + +@keyframes shake-7 { + 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% { + transform: translateX(7%); } + 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% { + transform: translateX(-7%); } } + +.spin-cw { + animation-name: spin-cw-1turn; } + +@keyframes spin-cw-1turn { + 0% { + transform: rotate(-1turn); } + 100% { + transform: rotate(0); } } + +.spin-ccw { + animation-name: spin-cw-1turn; } + +@keyframes spin-cw-1turn { + 0% { + transform: rotate(0); } + 100% { + transform: rotate(1turn); } } + +.wiggle { + animation-name: wiggle-7deg; } + +@keyframes wiggle-7deg { + 40%, 50%, 60% { + transform: rotate(7deg); } + 35%, 45%, 55%, 65% { + transform: rotate(-7deg); } + 0%, 30%, 70%, 100% { + transform: rotate(0); } } + +.shake, +.spin-cw, +.spin-ccw, +.wiggle { + animation-duration: 500ms; } + +.infinite { + animation-iteration-count: infinite; } + +.slow { + animation-duration: 750ms !important; } + +.fast { + animation-duration: 250ms !important; } + +.linear { + animation-timing-function: linear !important; } + +.ease { + animation-timing-function: ease !important; } + +.ease-in { + animation-timing-function: ease-in !important; } + +.ease-out { + animation-timing-function: ease-out !important; } + +.ease-in-out { + animation-timing-function: ease-in-out !important; } + +.bounce-in { + animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } + +.bounce-out { + animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } + +.bounce-in-out { + animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } + +.short-delay { + animation-delay: 300ms !important; } + +.long-delay { + animation-delay: 700ms !important; } diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 34cb6495f9..d67ab1645a 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -9,7 +9,13 @@ - <%= link_to "Add New Work", new_work_path %> +
+

Media Ranker

+
<%= yield %> diff --git a/config/routes.rb b/config/routes.rb index 9d66c81a59..50741d673c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,6 @@ Rails.application.routes.draw do resources :users, only: [:index] - resources :works, only: [:index, :show, :edit, :update, :create, :destroy] + resources :works, only: [:index, :show, :new, :edit, :update, :create, :destroy] # resources :votes root 'main#index' From 167fc80a2242a3fbf91737f91f6809020eebf928 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Thu, 12 Oct 2017 15:05:51 -0700 Subject: [PATCH 16/61] wrote some YAMLS in fixtures. starting writing tests for models, starting with works --- app/models/user.rb | 3 ++- test/fixtures/users.yml | 15 ++++----------- test/fixtures/votes.yml | 18 +++++++----------- test/fixtures/works.yml | 29 +++++++++++++++++++---------- test/models/user_test.rb | 2 +- test/models/work_test.rb | 20 +++++++++++--------- 6 files changed, 44 insertions(+), 43 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index fd329f8b84..673f47d8ff 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,6 @@ class User < ApplicationRecord has_many :votes - validates :name, presence: {message: "User must have a category."} + validates :name, presence: {message: "User must have a name."} + end diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index dc3ee79b5d..8740167fa8 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -1,11 +1,4 @@ -# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html - -# This model initially had no columns defined. If you add columns to the -# model remove the "{}" from the fixture names and add the columns immediately -# below each fixture, per the syntax in the comments below -# -one: {} -# column: value -# -two: {} -# column: value +tanja: + name: Tanja +kim: + name: Kim diff --git a/test/fixtures/votes.yml b/test/fixtures/votes.yml index dc3ee79b5d..009564457c 100644 --- a/test/fixtures/votes.yml +++ b/test/fixtures/votes.yml @@ -1,11 +1,7 @@ -# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html - -# This model initially had no columns defined. If you add columns to the -# model remove the "{}" from the fixture names and add the columns immediately -# below each fixture, per the syntax in the comments below -# -one: {} -# column: value -# -two: {} -# column: value +vote1: + user: tanja + work: cat_stevens + +vote2: + user: kim + work: cat_stevens diff --git a/test/fixtures/works.yml b/test/fixtures/works.yml index dc3ee79b5d..f1e3ffef67 100644 --- a/test/fixtures/works.yml +++ b/test/fixtures/works.yml @@ -1,11 +1,20 @@ -# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html +poodr: + title: POODR + category: book + publication_year: 2000 + creator: Sandi Metz + description: org your code -# This model initially had no columns defined. If you add columns to the -# model remove the "{}" from the fixture names and add the columns immediately -# below each fixture, per the syntax in the comments below -# -one: {} -# column: value -# -two: {} -# column: value +cat_stevens: + title: Cats in the Cradle + category: album + publication_year: 1970 + creator: Cat Stevens + description: + +wonder_woman: + title: Wonder Woman + category: movie + publication_year: 2017 + creator: Jane Doe + description: awesome diff --git a/test/models/user_test.rb b/test/models/user_test.rb index a7da415422..931878ffcb 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -15,7 +15,7 @@ describe "relationships" do it "can access votes" do - u = User.new(name: "Tanja") + u = User.new(name: "Jones") u.votes.count.must_equal 0 end end diff --git a/test/models/work_test.rb b/test/models/work_test.rb index 183910e650..185c9827db 100644 --- a/test/models/work_test.rb +++ b/test/models/work_test.rb @@ -1,9 +1,11 @@ -# require "test_helper" -# -# describe Work do -# let(:work) { Work.new } -# -# it "must be valid" do -# value(work).must_be :valid? -# end -# end +require "test_helper" + +describe "work" do + describe "validations"do + it "can be created with all fields" do + a = Work.new(title: "Test Title", category: "movie", publication_year: 2000, description: "whatever") + + a.must_be :valid? + end + end +end From 1cefe4d0c612477cc2a832b385ec1076aa1ef58c Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Thu, 12 Oct 2017 19:17:31 -0700 Subject: [PATCH 17/61] have some model tests. The one that uses my fixture data will not work and I cannot find the error. --- app/models/work.rb | 1 + test/models/work_test.rb | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/app/models/work.rb b/app/models/work.rb index de7c96a51a..50b2cee7f6 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -3,6 +3,7 @@ class Work < ApplicationRecord validates :title, presence: {message: "Media must have a title."} validates :category, presence: {message: "Media must have a category."} + validates :description, length: {maximum: 500} def self.sort_by_votes sort_by_votes = all.sort_by do |work| diff --git a/test/models/work_test.rb b/test/models/work_test.rb index 185c9827db..8af80fdcd9 100644 --- a/test/models/work_test.rb +++ b/test/models/work_test.rb @@ -2,10 +2,38 @@ describe "work" do describe "validations"do + it "can be created with all fields" do a = Work.new(title: "Test Title", category: "movie", publication_year: 2000, description: "whatever") a.must_be :valid? end + + it "requires a title" do + a = Work.new(category: "movie", publication_year: 2000) + is_valid = a.valid? + is_valid.must_equal false + a.errors.messages.must_include :title + end + + it "requires a category" do + a = Work.new(title: "Whoot?!", publication_year: 2000) + is_valid = a.valid? + is_valid.must_equal false + a.errors.messages.must_include :category + end + + it "won't allow a description longer than 500 characters" do + description = "*" * 501 + b = Work.new(title: "Test Title", category: "movie", description: description) + b.wont_be :valid? + b.errors.messages.must_include :description + end + + it "will allow a description less than 500 characters" do + work = works(:poodr) + work.must_be :valid? + end + end end From d10b2883d5498a3498ce2782ef68a8eb16e46583 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Thu, 12 Oct 2017 20:45:05 -0700 Subject: [PATCH 18/61] mostly tested works model --- app/controllers/works_controller.rb | 9 ++- app/models/work.rb | 12 ++-- test/fixtures/works.yml | 50 +++++++++++++++- test/models/work_test.rb | 92 +++++++++++++++++++++++++++-- 4 files changed, 150 insertions(+), 13 deletions(-) diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index 27143b6ae3..3646ec0598 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -13,7 +13,11 @@ def new def create @work = Work.new(work_params) - @work.creator = "Unknown" if @work.creator.nil? + # @work.creator = "Unknown" if @work.creator.nil? + + if @work.creator == nil + @work.creator = "Unknown" + end if @work.save redirect_to works_path @@ -56,6 +60,9 @@ def destroy def work_params params.require(:work).permit(:title, :category, :creator, :publication_year, :description) + # if params[:category] == nil + # params[:category] = "Unknown" + # end end def find_work_by_id diff --git a/app/models/work.rb b/app/models/work.rb index 50b2cee7f6..0aea6938d1 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -5,12 +5,12 @@ class Work < ApplicationRecord validates :category, presence: {message: "Media must have a category."} validates :description, length: {maximum: 500} - def self.sort_by_votes - sort_by_votes = all.sort_by do |work| - work.votes.count - end - return sort_by_votes - end + # def self.sort_by_votes + # sort_by_votes = all.sort_by do |work| + # work.votes.count + # end + # return sort_by_votes + # end def self.all_albums return Work.where(category: "album") diff --git a/test/fixtures/works.yml b/test/fixtures/works.yml index f1e3ffef67..474a1b4cb7 100644 --- a/test/fixtures/works.yml +++ b/test/fixtures/works.yml @@ -1,3 +1,4 @@ +#BOOKS poodr: title: POODR category: book @@ -5,16 +6,63 @@ poodr: creator: Sandi Metz description: org your code +winnie: + title: Winnie the Pooh + category: book + publication_year: 1891 + creator: Christopher Robbin + description: fantastic adventures and philosophy + +nineteen_eighty_four: + title: "1984" + category: book + publication_year: 1950 + creator: George Orwell + description: The future is here + +hitchhiker: + title: Hitchhiker's Guide + category: book + publication_year: 1980 + creator: Douglas Adams + description: Guide to life, the universe, and really everything. + +#END OF BOOKS + +#ALBUMS cat_stevens: title: Cats in the Cradle category: album publication_year: 1970 creator: Cat Stevens - description: + description: great album +all_good: + title: All Good + category: album + publication_year: 1979 + creator: Beatles + description: wonderful + +florence: + title: Florence and the Machine + category: album + publication_year: 2017 + creator: Florence + description: love it +#End of ALBUMS + +#Movies wonder_woman: title: Wonder Woman category: movie publication_year: 2017 creator: Jane Doe description: awesome + +sound_of_music: + title: The Sound of Music + category: movie + publication_year: 1960 + creator: Marry Poppins + description: lovely musical diff --git a/test/models/work_test.rb b/test/models/work_test.rb index 8af80fdcd9..17bba5ee63 100644 --- a/test/models/work_test.rb +++ b/test/models/work_test.rb @@ -10,14 +10,14 @@ end it "requires a title" do - a = Work.new(category: "movie", publication_year: 2000) + a = Work.new(category: "movie", publication_year: 2000, creator: "J J") is_valid = a.valid? is_valid.must_equal false a.errors.messages.must_include :title end it "requires a category" do - a = Work.new(title: "Whoot?!", publication_year: 2000) + a = Work.new(title: "Whoot?!", publication_year: 2000, creator: " J J") is_valid = a.valid? is_valid.must_equal false a.errors.messages.must_include :category @@ -25,15 +25,97 @@ it "won't allow a description longer than 500 characters" do description = "*" * 501 - b = Work.new(title: "Test Title", category: "movie", description: description) + b = Work.new(title: "Test Title", category: "movie", description: description, creator: "J J") b.wont_be :valid? b.errors.messages.must_include :description end it "will allow a description less than 500 characters" do - work = works(:poodr) - work.must_be :valid? + # work = works(:poodr) + # work.must_be :valid? + a = Work.new(title: "Test Title", category: "book", description: "T", creator: "B N") + a.must_be :valid? + end + + it "will allow no description" do + a = Work.new(title: "Test Title", category: "book", creator: "NO One") + a.must_be :valid? + end + + end + + # describe "creator" do # not working and this should probably be in the controller tests + # it "will assign the Creator as 'unknown' if no input is given" do + # a = Work.new(title: "Test Title", category: "book") + # a.must_be :valid? + # a.creator.must_equal "Unknown" + # end + # end + + describe "self.all_albums" do + it "will return a list of all works that are categorized as 'album'" do + Work.all_albums.count.must_equal 3 + end + + it "will not include any works that are not albums" do + Work.all_albums.find_by(category: "book").must_equal nil + + Work.all_albums.find_by(category: "movie").must_equal nil + end + end + + describe "self.all_books" do + it "will return a list of all works categorized as 'book'" do + Work.all_books.count.must_equal 4 + end + + it "will not include any works that are not books" do + Work.all_books.find_by(category: "album").must_equal nil + + Work.all_books.find_by(category: "movie").must_equal nil + end + end + + describe "self.all_movies" do + it "will return a list of all works categorized as 'movie'" do + Work.all_movies.count.must_equal 2 + end + + it "will not include any works that are not movies" do + Work.all_movies.find_by(category: "album").must_equal nil + + Work.all_movies.find_by(category: "book").must_equal nil + end + end + + describe "self.top_ten_albums" do + it "will return the number of albums if the count is 10 or less" do + Work.top_ten_albums.count.must_equal 3 + end + + #This test passses but it breaks other tests + # it "will not return more than 10 items" do + # title = "Test" + # category = "album" + # creator = "No one" + # 10.times do + # Work.create!(title: title, category: category, creator: creator) + # end + # Work.top_ten_albums.count.must_equal 10 + # end + end + + describe "self.top_ten" do + it "returns the correct number of elements" do + Work.top_ten("book").count.must_equal 4 end +#Not sure how to test this yet without fully implementing votes + # it "first element is the one with most number of votes" do + # user1 = User.new(name: "Bianca") + # work = Work.new(title: "Vote Test", category: "album", creator: "No name") + # vote1 = Vote.new(user_id: user1.id, work_id: work.id) + # Work.top_ten("album").first.must_equal work + # end end end From 443ecd6ce17a9e564c5545d750e1d13f8ef67526 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 12:45:22 -0700 Subject: [PATCH 19/61] got help from Dan to fix model tests that were not working for Work -- issue was in describe block, I wrote work rather than Work. Caused tests to behave badly. Now working on works controller tests. --- app/assets/stylesheets/application.css | 16 +----------- app/models/work.rb | 9 +++++++ app/views/layouts/application.html.erb | 12 ++++++--- config/routes.rb | 4 ++- test/controllers/works_controller_test.rb | 9 ++++--- test/models/user_test.rb | 4 +++ test/models/work_test.rb | 32 ++++++++++++++--------- 7 files changed, 50 insertions(+), 36 deletions(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index d05ea0f511..8b13789179 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -1,15 +1 @@ -/* - * This is a manifest file that'll be compiled into application.css, which will include all the files - * listed below. - * - * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's - * vendor/assets/stylesheets directory can be referenced here using a relative path. - * - * You're free to add application-wide styles to this file and they'll appear at the bottom of the - * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS - * files in this directory. Styles in this file should be added after the last require_* statement. - * It is generally better to create a new file per style scope. - * - *= require_tree . - *= require_self - */ + diff --git a/app/models/work.rb b/app/models/work.rb index 0aea6938d1..39355fce3b 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -12,6 +12,14 @@ class Work < ApplicationRecord # return sort_by_votes # end + def self.top + top = all.sort_by do |work| + work.votes.count + end + top = top.reverse + return top.first + end + def self.all_albums return Work.where(category: "album") end @@ -46,6 +54,7 @@ def self.top_ten(category) top_ten = top_ten.sort_by do |work| work.votes.count end + top_ten = top_ten.reverse return top_ten[0...10] end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index d67ab1645a..0366d4f564 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -11,10 +11,14 @@

Media Ranker

-
<%= yield %> diff --git a/config/routes.rb b/config/routes.rb index 50741d673c..4958c56b8a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,8 +1,10 @@ Rails.application.routes.draw do + + root 'main#index' resources :users, only: [:index] resources :works, only: [:index, :show, :new, :edit, :update, :create, :destroy] # resources :votes - root 'main#index' + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/test/controllers/works_controller_test.rb b/test/controllers/works_controller_test.rb index d95073c22e..532a3d3ebc 100644 --- a/test/controllers/works_controller_test.rb +++ b/test/controllers/works_controller_test.rb @@ -1,7 +1,10 @@ require "test_helper" describe WorksController do - # it "must be a real test" do - # flunk "Need real tests" - # end + describe "index" do + it "returns a success status" do + get works_path + must_respond_with :success + end + end end diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 931878ffcb..d11f26824d 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -19,4 +19,8 @@ u.votes.count.must_equal 0 end end + + it "can access fixtures" do + users(:tanja).wont_be_nil + end end diff --git a/test/models/work_test.rb b/test/models/work_test.rb index 17bba5ee63..5ed44f0bde 100644 --- a/test/models/work_test.rb +++ b/test/models/work_test.rb @@ -1,6 +1,6 @@ require "test_helper" -describe "work" do +describe Work do describe "validations"do it "can be created with all fields" do @@ -31,8 +31,8 @@ end it "will allow a description less than 500 characters" do - # work = works(:poodr) - # work.must_be :valid? + work = works(:poodr) + work.must_be :valid? a = Work.new(title: "Test Title", category: "book", description: "T", creator: "B N") a.must_be :valid? end @@ -93,16 +93,15 @@ Work.top_ten_albums.count.must_equal 3 end - #This test passses but it breaks other tests - # it "will not return more than 10 items" do - # title = "Test" - # category = "album" - # creator = "No one" - # 10.times do - # Work.create!(title: title, category: category, creator: creator) - # end - # Work.top_ten_albums.count.must_equal 10 - # end + it "will not return more than 10 items" do + title = "Test" + category = "album" + creator = "No one" + 10.times do + Work.create!(title: title, category: category, creator: creator) + end + Work.top_ten_albums.count.must_equal 10 + end end describe "self.top_ten" do @@ -110,6 +109,11 @@ Work.top_ten("book").count.must_equal 4 end + #write test to see if they are in correct order once have votes + + + + #Not sure how to test this yet without fully implementing votes # it "first element is the one with most number of votes" do # user1 = User.new(name: "Bianca") @@ -118,4 +122,6 @@ # Work.top_ten("album").first.must_equal work # end end + + ## WRITE TEST FOR self.top after making votes ## end From 94dc0d182eb4ebd429872b2a5f3799f9aef692ce Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 13:49:55 -0700 Subject: [PATCH 20/61] added test to models to check top media (includes votes). Added work controller tests. Fixed two tests that were not passing in works controller tests. --- app/controllers/works_controller.rb | 1 - test/controllers/works_controller_test.rb | 62 +++++++++++++++++++++++ test/models/work_test.rb | 15 +++--- 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index 3646ec0598..b6e9e7005e 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -70,7 +70,6 @@ def find_work_by_id unless @work head :not_found end - return @work end diff --git a/test/controllers/works_controller_test.rb b/test/controllers/works_controller_test.rb index 532a3d3ebc..15fbd50dbd 100644 --- a/test/controllers/works_controller_test.rb +++ b/test/controllers/works_controller_test.rb @@ -7,4 +7,66 @@ must_respond_with :success end end + + describe "show" do + it "returns a success status when an existing work is selected" do + get work_path(Work.first) + must_respond_with :success + end + + #WHY is this not passing? + it "returns an error message when given a bogus work id" do + get work_path(Work.last.id + 1) + must_respond_with :not_found + end + + it "returns a success status when there are no works" do + Work.destroy_all + get works_path + must_respond_with :success + end + end + +#failing to add the book to the database, why? Think I don't understand the test well rather than method not working. + describe "create" do + it "adds the Work to the database when data given is valid and redirects to Work#Index once done" do + start_count = Work.all.count + work_data = { + work: { + title: "this is a test", + category: "album", + creator: "Nobody" + } + } + Work.new(work_data[:work]).must_be :valid? + post works_path, params: work_data + must_respond_with :redirect + must_redirect_to works_path + Work.count.must_equal start_count + end + + it "if data given is invalid, it will render a new form and will not add the Work to the database" do + start_count = Work.all.count + invalid_work_data = { + work: { + #NO TITLE + category: "album" + } + } + Work.new(invalid_work_data[:work]).wont_be :valid? + post works_path, params: invalid_work_data + must_respond_with :bad_request + + start_count.must_equal Work.all.count + end + end + + describe "new" do + it "returns a success status" do + get new_work_path + must_respond_with :success + end + end + + end diff --git a/test/models/work_test.rb b/test/models/work_test.rb index 5ed44f0bde..7e97da2861 100644 --- a/test/models/work_test.rb +++ b/test/models/work_test.rb @@ -115,12 +115,15 @@ #Not sure how to test this yet without fully implementing votes - # it "first element is the one with most number of votes" do - # user1 = User.new(name: "Bianca") - # work = Work.new(title: "Vote Test", category: "album", creator: "No name") - # vote1 = Vote.new(user_id: user1.id, work_id: work.id) - # Work.top_ten("album").first.must_equal work - # end + it "first element is the one with most number of votes" do + work = Work.create!(title: "Vote Test", category: "album", creator: "No name") + 10.times do + name = rand(0..200).to_s + user = User.create!(name: name) + Vote.create!(user: user, work: work) + end + Work.top_ten("album").first.must_equal work + end end ## WRITE TEST FOR self.top after making votes ## From 5e86881740ae9268c265d7b750617f692e31a999 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 14:09:13 -0700 Subject: [PATCH 21/61] Got work model tests completed, including those dealing with votes. Added votes to vote yml. --- test/fixtures/users.yml | 7 +++++++ test/fixtures/votes.yml | 17 ++++++++++++++++- test/models/work_test.rb | 30 +++++++++++++++++++++++------- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 8740167fa8..526d3dd8f8 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -2,3 +2,10 @@ tanja: name: Tanja kim: name: Kim +bianca: + name: Bianca +dario: + name: Dario +kamron: + name: Kamron + diff --git a/test/fixtures/votes.yml b/test/fixtures/votes.yml index 009564457c..96ed9f55a5 100644 --- a/test/fixtures/votes.yml +++ b/test/fixtures/votes.yml @@ -1,7 +1,22 @@ +#albums vote1: user: tanja work: cat_stevens - vote2: user: kim work: cat_stevens +vote3: + user: dario + work: cat_stevens +vote4: + user: bianca + work: cat_stevens +vote5: + user: kim + work: florence +vote6: + user: dario + work: florence +vote7: + user: bianca + work: all_good diff --git a/test/models/work_test.rb b/test/models/work_test.rb index 7e97da2861..216a8989b0 100644 --- a/test/models/work_test.rb +++ b/test/models/work_test.rb @@ -109,12 +109,6 @@ Work.top_ten("book").count.must_equal 4 end - #write test to see if they are in correct order once have votes - - - - -#Not sure how to test this yet without fully implementing votes it "first element is the one with most number of votes" do work = Work.create!(title: "Vote Test", category: "album", creator: "No name") 10.times do @@ -124,7 +118,29 @@ end Work.top_ten("album").first.must_equal work end + + it "returns the elements in the correct order" do + work1 = works(:cat_stevens) + work2 = works(:florence) + work3 = works(:all_good) + + Work.top_ten("album").first.must_equal work1 + Work.top_ten("album")[1].must_equal work2 + Work.top_ten("album")[2].must_equal work3 + end + + it "returns an empty list if no elements are present" do + Work.destroy_all + Work.top_ten("album").must_equal [] + end + + end + + describe "self.top" do + it "returns the Work with the most votes" do + top_work = works(:cat_stevens) + Work.top.must_equal top_work + end end - ## WRITE TEST FOR self.top after making votes ## end From 404501f1de57bc5ea9a5585a4d2273cb41d4afe9 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 15:06:30 -0700 Subject: [PATCH 22/61] nearly finsihed with works#controller tests --- app/controllers/works_controller.rb | 3 +- test/controllers/works_controller_test.rb | 98 ++++++++++++++++++++++- 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index b6e9e7005e..e5ca569ca2 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -66,8 +66,9 @@ def work_params end def find_work_by_id - @work = Work.find(params[:id]) + @work = Work.find_by(id: params[:id]) unless @work + puts ">>>>>>>>> DPR: sending back not_found headers" head :not_found end return @work diff --git a/test/controllers/works_controller_test.rb b/test/controllers/works_controller_test.rb index 15fbd50dbd..b96c93a645 100644 --- a/test/controllers/works_controller_test.rb +++ b/test/controllers/works_controller_test.rb @@ -39,10 +39,12 @@ } } Work.new(work_data[:work]).must_be :valid? + + post works_path, params: work_data must_respond_with :redirect must_redirect_to works_path - Work.count.must_equal start_count + Work.count.must_equal (start_count + 1) end it "if data given is invalid, it will render a new form and will not add the Work to the database" do @@ -68,5 +70,99 @@ end end + describe "edit" do + it "returns a success status when given a valid Work id" do + work = works(:cat_stevens) + get work_path(work) + must_respond_with :success + end + + it "returns an error message when given a bogus work id" do + get work_path(Work.last.id + 1) + must_respond_with :not_found + end + end + + describe "update" do + it "returns success if Work exists, change is valid, and db updated" do + work = Work.first + + work_data = { + work: { + title: work.title, + category: work.category, + description: "changed description" + } + } + + work.update_attributes(work_data[:work]) + work.must_be :valid?, "Test is invalid because the provided data will produce an invalid work." + + patch work_path(work), params: work_data + must_respond_with :redirect + must_redirect_to work_path(work) + + #Check that the change went through + work.reload + work.title.must_equal work_data[:work][:title] + end + + it "returns not_found if the work ID is invalid" do + invalid_work_id = Work.last.id + 1 + work_data = { + work: { + title: "Title", + category: "book", + description: "changed description" + } + } + patch work_path(invalid_work_id), params: work_data + must_respond_with :not_found + end + + it "returns bad_request if the change is invalid" do + work = Work.first + invalid_work_data = { + work: { + title: "", + category: "album" + } + } + # Check that the update is actually invalid + work.update_attributes(invalid_work_data[:work]) + work.wont_be :valid? + + patch work_path(work), params: invalid_work_data + + must_respond_with :bad_request + + work.reload + work.title.wont_equal invalid_work_data[:work][:title] + end + + end + + describe "destroy" do + it "returns success and destroys the work when given a valid work ID" do + work_id = Work.first.id + + delete work_path(work_id) + + must_respond_with :redirect + must_redirect_to works_path + Work.find_by(id: work_id).must_be_nil + end + + it "returns not_found when given an invalid Work ID" do + invalid_work_id = Work.last.id + 1 + + start_work_count = Work.count + + delete work_path(invalid_work_id) + + must_respond_with :not_found + Work.count.must_equal start_work_count + end + end end From 3b7418dc464864da46cc9ae3626f876fa4486223 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 15:17:02 -0700 Subject: [PATCH 23/61] added view for works edit.html.erb. Finished controller tests for Works incl error issues. Need to verify the edit page actually looks right soon (used same for as for show). Also created def index in users controller and matching test. --- app/controllers/users_controller.rb | 3 +++ app/controllers/works_controller.rb | 2 +- app/views/users/index.html.erb | 0 app/views/works/edit.html.erb | 3 +++ test/controllers/users_controller_test.rb | 9 ++++++--- 5 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 app/views/users/index.html.erb create mode 100644 app/views/works/edit.html.erb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3e74dea87f..0b399889ef 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,2 +1,5 @@ class UsersController < ApplicationController + def index + @users = User.all + end end diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index e5ca569ca2..32d8ccd8ee 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -39,7 +39,7 @@ def update redirect_to work_path(@work) return else - render edit, status: :bad_request + render :edit, status: :bad_request return end end diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/views/works/edit.html.erb b/app/views/works/edit.html.erb new file mode 100644 index 0000000000..8778d34c2f --- /dev/null +++ b/app/views/works/edit.html.erb @@ -0,0 +1,3 @@ +Edit Media + +<%= render partial: 'form' %> diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index 89decb54e0..82e003cf61 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -1,7 +1,10 @@ require "test_helper" describe UsersController do - # it "must be a real test" do - # flunk "Need real tests" - # end + describe "index" do + it "returns a success status" do + get users_path + must_respond_with :success + end + end end From bd82af600ea9ed0662611a2d89ced5da05ab5fa7 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 15:52:26 -0700 Subject: [PATCH 24/61] added some methods to User controller. Added a User show page and a User index page. Currently do not have any users to view. --- app/controllers/users_controller.rb | 35 +++++++++++++++++++++++++++++ app/controllers/works_controller.rb | 1 - app/views/main/index.html.erb | 2 +- app/views/users/index.html.erb | 8 +++++++ app/views/users/show.html.erb | 0 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 app/views/users/show.html.erb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 0b399889ef..5f254fbb5a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -3,3 +3,38 @@ def index @users = User.all end end + +def show + find_user_by_id +end + +def new + @user = User.new +end + +def create + @User = User.new(user_params) + + if @user.save + redirect_to users_path + return + else + render :new, status: :bad_request + return + end + + private + + def user_params + params.require(:user).permit(:name) + end + + def find_work_by_id + @user = User.find_by(id: params[:id]) + unless @user + head :not_found + end + return @user + end + +end diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index 32d8ccd8ee..9dd3a16822 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -68,7 +68,6 @@ def work_params def find_work_by_id @work = Work.find_by(id: params[:id]) unless @work - puts ">>>>>>>>> DPR: sending back not_found headers" head :not_found end return @work diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index 5d54ed0a87..218a559f94 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -1,5 +1,5 @@ -<% work = Work.sort_by_votes.first %> +<% work = Work.top %>

<%= "Media Spotlight: #{work.title} by #{work.creator}" %>

<%= "Votes: #{work.votes.count}" %>

diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index e69de29bb2..65076d5c2f 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -0,0 +1,8 @@ + + +

List of Users

+
    + <% @users.each do |user| %> +
  1. <%= link_to "#{user.name}", user_path(@user) %>
  2. + <% end %> +
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb new file mode 100644 index 0000000000..e69de29bb2 From f28d51b774214c3e667aef1188ffc862d4a778c7 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 16:05:02 -0700 Subject: [PATCH 25/61] update --- app/controllers/users_controller.rb | 2 +- app/views/users/index.html.erb | 2 +- test/controllers/users_controller_test.rb | 18 ++++++++++++++++++ test/controllers/works_controller_test.rb | 1 - 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 5f254fbb5a..74bdebaf20 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -29,7 +29,7 @@ def user_params params.require(:user).permit(:name) end - def find_work_by_id + def find_user_by_id @user = User.find_by(id: params[:id]) unless @user head :not_found diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 65076d5c2f..bdea2093c0 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -3,6 +3,6 @@

List of Users

    <% @users.each do |user| %> -
  1. <%= link_to "#{user.name}", user_path(@user) %>
  2. +
  3. <%= link_to "#{user.name}", users_path(@user) %>
  4. <% end %>
diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index 82e003cf61..96b917abbf 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -7,4 +7,22 @@ must_respond_with :success end end + + describe "show" do + it "returns a success status when an existing user is selected" do + get users_path(User.first.id) + must_respond_with :success + end + + it "returns an error message when given a bogus User id" do + get users_path(User.last.id + 1) + must_respond_with :not_found + end + + it "returns a success status when there are no users" do + User.destroy_all + get users_path + must_respond_with :success + end + end end diff --git a/test/controllers/works_controller_test.rb b/test/controllers/works_controller_test.rb index b96c93a645..3766b049cc 100644 --- a/test/controllers/works_controller_test.rb +++ b/test/controllers/works_controller_test.rb @@ -14,7 +14,6 @@ must_respond_with :success end - #WHY is this not passing? it "returns an error message when given a bogus work id" do get work_path(Work.last.id + 1) must_respond_with :not_found From 0b65fa4403c43b123810327936b1bee80d4efb69 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 22:35:21 -0700 Subject: [PATCH 26/61] added some code in the view pages for Users but don't have users to view yet. Added code for vote controller incl method to get all votes by user. Added tests to check vote methods working correctly. --- app/controllers/users_controller.rb | 3 ++ app/models/vote.rb | 12 +++++ app/views/layouts/application.html.erb | 6 ++- app/views/users/index.html.erb | 28 +++++++++--- app/views/users/show.html.erb | 31 +++++++++++++ test/models/vote_test.rb | 61 +++++++++++++++++++++++++- 6 files changed, 134 insertions(+), 7 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 74bdebaf20..0dd1f63d4a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -30,8 +30,11 @@ def user_params end def find_user_by_id + puts "<<<<<<<<<<<<<<<<<< running the test" @user = User.find_by(id: params[:id]) + puts "<<<< Media Ranker
TBD <%= data.title %> <%= data.creator %> <%= data.publication_year %> <%= link_to "#{work.title}", work_path(work) %> <%= work.creator %> <%= work.publication_year %> upvote button
+ + + + + + + + + <% @users.each do |user| %> + + + + + + + + + <% end %> + +
UsernameVotesJoined
TBD <%= link_to "#{user.name}", users_path(user) %> Votes <%= user.created_at %>
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index e69de29bb2..d15722b58d 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -0,0 +1,31 @@ + +

User Summary <%= @user.name %> +

Joined site <%= @user.created_at %> +

+ +

Votes

+ Put this code in the vote model?? + + + + + + + + + + + + <% User.votes.each do |vote| %> + + + + + + + + + + <% end %> + +
Media TitleCreated ByPublishedCategoryVoted On
TBD <%= link_to "#{vote.work.title}", work_path(work) %> <%= vote.work.creator %> <%= vote.work.publication_year %> <%= vote.work.category %> <%= vote.created_at
diff --git a/test/models/vote_test.rb b/test/models/vote_test.rb index d361711147..16674d1362 100644 --- a/test/models/vote_test.rb +++ b/test/models/vote_test.rb @@ -1,4 +1,5 @@ -# require "test_helper" +require "test_helper" +require 'date' # # describe Vote do # let(:vote) { Vote.new } @@ -7,3 +8,61 @@ # value(vote).must_be :valid? # end # end + +describe Vote do + before do + @u = users(:tanja) + @w = works(:cat_stevens) + end + + describe "validations" do + + it "can be created with a name and work" do + v = Vote.new(user_id: @u.id, work_id: @w.id) + v.valid?.must_equal true + end + + it "must have a user_id" do + v = Vote.new(work_id: @w.id) + v.valid?.must_equal false + end + + it "must have a work_id" do + v = Vote.new(user_id: @u.id) + v.valid?.must_equal false + end + end + + describe "fixtures" do + it "can access fixtures" do + votes(:vote1).wont_be_nil + end + end + + describe "created at" do + it "records and reports the correct date vote made" do + new_user = User.create!(name: "patrick") + new_vote = Vote.create!(user_id: new_user.id, work_id: @w.id) + new_vote.valid? + new_vote.created_at.to_date.must_equal DateTime.now.utc.to_date + end +end + + describe "votes_by_user" do + it "gives a list of votes for only the user specified" do + Vote.votes_by_user(@u).count.must_equal 1 + end + it "works when user has no votes" do + new_user = User.create!(name: "jack") + new_user.valid? + Vote.votes_by_user(new_user).count.must_equal 0 + end + it "reports the correct work title" do + work_id = Vote.votes_by_user(@u)[0].work_id + work = Work.find_by(id: work_id) + work.title.must_equal "Cats in the Cradle" + end + + end + +end From 3a9eb0f4cd9300f36c0ac03de15cbf72c1bb62a4 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 22:42:42 -0700 Subject: [PATCH 27/61] small update before trying sessions stuff --- app/models/vote.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/models/vote.rb b/app/models/vote.rb index 6de0fac083..8b13cba725 100644 --- a/app/models/vote.rb +++ b/app/models/vote.rb @@ -5,8 +5,6 @@ class Vote < ApplicationRecord validates :user_id, presence: true validates :work_id, presence: true - # @user = user.id - def self.votes_by_user(user) return Vote.where(user_id: user.id) end From b6a475bfa0fbc1adb0732dc34b9f7e1214a8d248 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 22:44:47 -0700 Subject: [PATCH 28/61] added sessionscontroller --- app/assets/javascripts/sessions.js | 2 ++ app/assets/stylesheets/sessions.scss | 3 +++ app/controllers/sessions_controller.rb | 2 ++ app/helpers/sessions_helper.rb | 2 ++ test/controllers/sessions_controller_test.rb | 7 +++++++ 5 files changed, 16 insertions(+) create mode 100644 app/assets/javascripts/sessions.js create mode 100644 app/assets/stylesheets/sessions.scss create mode 100644 app/controllers/sessions_controller.rb create mode 100644 app/helpers/sessions_helper.rb create mode 100644 test/controllers/sessions_controller_test.rb diff --git a/app/assets/javascripts/sessions.js b/app/assets/javascripts/sessions.js new file mode 100644 index 0000000000..dee720facd --- /dev/null +++ b/app/assets/javascripts/sessions.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/stylesheets/sessions.scss b/app/assets/stylesheets/sessions.scss new file mode 100644 index 0000000000..ccb1ed25b2 --- /dev/null +++ b/app/assets/stylesheets/sessions.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Sessions controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 0000000000..16d11b5710 --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,2 @@ +class SessionsController < ApplicationController +end diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb new file mode 100644 index 0000000000..309f8b2eb3 --- /dev/null +++ b/app/helpers/sessions_helper.rb @@ -0,0 +1,2 @@ +module SessionsHelper +end diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb new file mode 100644 index 0000000000..c2632a720b --- /dev/null +++ b/test/controllers/sessions_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +describe SessionsController do + # it "must be a real test" do + # flunk "Need real tests" + # end +end From 8733bf2aaa0723de68b75fbc0e1185dfb61e6f02 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 22:49:21 -0700 Subject: [PATCH 29/61] added flash to root page. Added basic code in sessions controller --- app/controllers/sessions_controller.rb | 11 +++++++++++ app/views/layouts/application.html.erb | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 16d11b5710..c3f4d3fa2e 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,2 +1,13 @@ class SessionsController < ApplicationController + + def login + user = User.find_by(name: params[:name]) + + if user + session[:user_id] = user.id + flash[:success] = "Successfully logged in as #{ user.name }!" + redirect_to root_path + end + + end end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index e18ae8b537..980a1df95f 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -24,6 +24,13 @@

+ +
+ <% flash.each do |name, message| %> +
<%= message %>
+ <% end %> +
+ <%= yield %> From 27865461ecbd77f99a6e058368f207dc0c46ca57 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 23:10:17 -0700 Subject: [PATCH 30/61] added more to root page. Moved login def to user controller --- app/controllers/users_controller.rb | 12 ++++++++++++ app/views/layouts/application.html.erb | 11 +++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 0dd1f63d4a..a79bd21ed2 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -23,6 +23,18 @@ def create return end + def login + user_id = params[:user][:user_id] + + user = find_user_by_id + if user + session[:logged_in_user] = user_id + flash[:success] = "Successfully logged in as #{ user.name }!" + redirect_to root_path + end + + end + private def user_params diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 980a1df95f..3ef70f6345 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -19,10 +19,13 @@ <%= link_to "View all Users", users_path %>
- <%# if session[:logged_in_user] %> - <%= link_to "Log in" %> -

+ <% if session[:logged_in_user] %> +

<%= link_to "Logged in as #{User.find(session[logged_in_user]).name}"%>

+ <%else%> + <%= link_to "Log in" %> +
+
@@ -30,7 +33,7 @@
<%= message %>
<% end %>
- + <%= yield %> From fd45e447d7ed77c92ec342947a26b5a5342fb25f Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 23:42:18 -0700 Subject: [PATCH 31/61] working on sessions --- app/controllers/users_controller.rb | 6 +++--- app/views/layouts/application.html.erb | 2 +- app/views/users/login_form.html.erb | 5 +++++ 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 app/views/users/login_form.html.erb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index a79bd21ed2..1d3adc2a30 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -24,11 +24,11 @@ def create end def login - user_id = params[:user][:user_id] + name = params[:author][:name] + user = User.find_by(name: name) - user = find_user_by_id if user - session[:logged_in_user] = user_id + session[:logged_in_user] = user.id flash[:success] = "Successfully logged in as #{ user.name }!" redirect_to root_path end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 3ef70f6345..415bc47713 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -23,7 +23,7 @@

<%= link_to "Logged in as #{User.find(session[logged_in_user]).name}"%>

<%else%> <%= link_to "Log in" %> - + <%end%> diff --git a/app/views/users/login_form.html.erb b/app/views/users/login_form.html.erb new file mode 100644 index 0000000000..de5a009e3c --- /dev/null +++ b/app/views/users/login_form.html.erb @@ -0,0 +1,5 @@ +<%= form_tag do %> +<%= label_tag "username" %> +<%= text_field :user, :name %> +<% submit_tag "Log in" %> +<% end %> From 5593b034048fe398230396a2d7b09791dbd74802 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Fri, 13 Oct 2017 23:53:18 -0700 Subject: [PATCH 32/61] Code seems to be in place for logging in a user but it does not work on the site --- app/controllers/users_controller.rb | 5 ++++- app/views/layouts/application.html.erb | 2 +- config/routes.rb | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1d3adc2a30..928c90cfb2 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -24,13 +24,16 @@ def create end def login - name = params[:author][:name] + name = params[:user][:name] user = User.find_by(name: name) if user session[:logged_in_user] = user.id flash[:success] = "Successfully logged in as #{ user.name }!" redirect_to root_path + else + user = User.create(name: name) + session[:logged_in_user] = user.id end end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 415bc47713..3d490ce2dc 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -22,7 +22,7 @@ <% if session[:logged_in_user] %>

<%= link_to "Logged in as #{User.find(session[logged_in_user]).name}"%>

<%else%> - <%= link_to "Log in" %> + <%= link_to "Log in", login_path %> <%end%> diff --git a/config/routes.rb b/config/routes.rb index 4958c56b8a..7d8a1ca0ab 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,9 @@ Rails.application.routes.draw do - + root 'main#index' - resources :users, only: [:index] + resources :users, only: [:index, :show, :new] + get 'login', to: 'users#login_form', as:'login' + post 'login', to: 'users#login' resources :works, only: [:index, :show, :new, :edit, :update, :create, :destroy] # resources :votes From adfec7870acb0aa3125cf93d5901a612e4f11166 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 00:23:04 -0700 Subject: [PATCH 33/61] wrote create method for votes but there's an error I cannot find. --- app/controllers/users_controller.rb | 30 +++++++++++++------------- app/controllers/votes_controller.rb | 19 ++++++++++++++++ app/views/layouts/application.html.erb | 2 +- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 928c90cfb2..65b64b7549 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -2,25 +2,25 @@ class UsersController < ApplicationController def index @users = User.all end -end -def show - find_user_by_id -end + def show + find_user_by_id + end -def new - @user = User.new -end + def new + @user = User.new + end -def create - @User = User.new(user_params) + def create + @user = User.new(user_params) - if @user.save - redirect_to users_path - return - else - render :new, status: :bad_request - return + if @user.save + redirect_to users_path + return + else + render :new, status: :bad_request + return + end end def login diff --git a/app/controllers/votes_controller.rb b/app/controllers/votes_controller.rb index ffdb2760e0..319fbce6d5 100644 --- a/app/controllers/votes_controller.rb +++ b/app/controllers/votes_controller.rb @@ -1,2 +1,21 @@ class VotesController < ApplicationController + + def new + @vote = Vote.new + end + + def create + user_id = User.find_by(id: params[:user][:id]).id + work_id = Work.find_by(id: params[:work][:id].id + @vote = Vote.new(user_id: user_id, work_id: work_id) + if @vote.save + redirect_to work_path + return + else + redirect_to work_path, status: :bad_request + return + end + + + end end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 3d490ce2dc..902b97a9e9 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -20,7 +20,7 @@
<% if session[:logged_in_user] %> -

<%= link_to "Logged in as #{User.find(session[logged_in_user]).name}"%>

+

<%= link_to "Logged in as #{User.find(session[logged_in_user]).name}", user_path%>

<%else%> <%= link_to "Log in", login_path %> <%end%> From ec0efea70cef73d9739a18783a8fe8bca34541ad Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 00:54:17 -0700 Subject: [PATCH 34/61] wrote more code in controller for votes, need to test. --- app/controllers/sessions_controller.rb | 13 ------- app/controllers/votes_controller.rb | 48 ++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 20 deletions(-) delete mode 100644 app/controllers/sessions_controller.rb diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb deleted file mode 100644 index c3f4d3fa2e..0000000000 --- a/app/controllers/sessions_controller.rb +++ /dev/null @@ -1,13 +0,0 @@ -class SessionsController < ApplicationController - - def login - user = User.find_by(name: params[:name]) - - if user - session[:user_id] = user.id - flash[:success] = "Successfully logged in as #{ user.name }!" - redirect_to root_path - end - - end -end diff --git a/app/controllers/votes_controller.rb b/app/controllers/votes_controller.rb index 319fbce6d5..afc551b6d6 100644 --- a/app/controllers/votes_controller.rb +++ b/app/controllers/votes_controller.rb @@ -5,17 +5,51 @@ def new end def create - user_id = User.find_by(id: params[:user][:id]).id - work_id = Work.find_by(id: params[:work][:id].id - @vote = Vote.new(user_id: user_id, work_id: work_id) - if @vote.save - redirect_to work_path - return - else + user = User.find_by(id: params[:user][:id]) + + if user == nil + flash[:status] = :failure + flash[:message] = "Sorry, you must be logged in to vote." + redirect_to work_path, status: :bad_request + return + end + + work = Work.find_by(id: params[:work][:id]) + + if work == nil + flash[:status] = :failure + flash[:message] = "Sorry, that media no longer exists in the database." + redirect_to works_path, status: :bad_request + return + end + + @vote = Vote.new(user_id: user.id, work_id: work.id) + + Vote.votes_by_user(user).each do |vote| + if vote.work_id == work.id + flash[:status] = :failure + flash[:message] = "You have already voted on this work - you can only vote once." redirect_to work_path, status: :bad_request return end + end + if @vote.save + flash[:status] = :success + flash[:message] = "Thank you for your vote!" + redirect_to work_path + return + else + flash[:status] = :failure + flash[:message] = "Sorry, your vote could not be processed." + redirect_to work_path, status: :bad_request + return + end end + + # private + # def vote_params + # params.require(:user, :work) + # end end From 40554bb95a58c42ed20df70049712519a1bb82cb Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 01:03:09 -0700 Subject: [PATCH 35/61] thought i did somethig wrong so read up online and started making sessions controller again. Then after reviewing notes again, decided probably not necessary for this project. Reviewed code in application view again and finally figured out the problem(s). Log in now seems to work properly. --- app/controllers/sessions_controller.rb | 4 ++++ app/views/layouts/application.html.erb | 2 +- app/views/sessions/new.html.erb | 2 ++ config/routes.rb | 2 ++ test/controllers/sessions_controller_test.rb | 8 +++++--- 5 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 app/controllers/sessions_controller.rb create mode 100644 app/views/sessions/new.html.erb diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 0000000000..f990b351ff --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,4 @@ +class SessionsController < ApplicationController + def new + end +end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 902b97a9e9..4daa563a6c 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -20,7 +20,7 @@
<% if session[:logged_in_user] %> -

<%= link_to "Logged in as #{User.find(session[logged_in_user]).name}", user_path%>

+

<%= link_to "Logged in as #{User.find(session[:logged_in_user]).name}", users_path(@user)%>

<%else%> <%= link_to "Log in", login_path %> <%end%> diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb new file mode 100644 index 0000000000..b39a3bc951 --- /dev/null +++ b/app/views/sessions/new.html.erb @@ -0,0 +1,2 @@ +

Sessions#new

+

Find me in app/views/sessions/new.html.erb

diff --git a/config/routes.rb b/config/routes.rb index 7d8a1ca0ab..f447b89d89 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,7 @@ Rails.application.routes.draw do + get 'sessions/new' + root 'main#index' resources :users, only: [:index, :show, :new] get 'login', to: 'users#login_form', as:'login' diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb index c2632a720b..875059f69b 100644 --- a/test/controllers/sessions_controller_test.rb +++ b/test/controllers/sessions_controller_test.rb @@ -1,7 +1,9 @@ require "test_helper" describe SessionsController do - # it "must be a real test" do - # flunk "Need real tests" - # end + it "should get new" do + get sessions_new_url + value(response).must_be :success? + end + end From bd92af9630a4a6d314b62836ed3cbf3ef29080d7 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 01:03:52 -0700 Subject: [PATCH 36/61] deleted sessions controller and related views --- app/controllers/sessions_controller.rb | 4 ---- app/views/sessions/new.html.erb | 2 -- 2 files changed, 6 deletions(-) delete mode 100644 app/controllers/sessions_controller.rb delete mode 100644 app/views/sessions/new.html.erb diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb deleted file mode 100644 index f990b351ff..0000000000 --- a/app/controllers/sessions_controller.rb +++ /dev/null @@ -1,4 +0,0 @@ -class SessionsController < ApplicationController - def new - end -end diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb deleted file mode 100644 index b39a3bc951..0000000000 --- a/app/views/sessions/new.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

Sessions#new

-

Find me in app/views/sessions/new.html.erb

From a82fd62b5a8bbc71cd5d893bd43bfe2412578664 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 01:47:49 -0700 Subject: [PATCH 37/61] got log out workinggit add . adjusted code for login and log out. Found a good way to redirect back to page already on, and that way it also reflects session status. started editing code on User Index page now that have users --- app/controllers/application_controller.rb | 5 +++++ app/controllers/users_controller.rb | 11 ++++++++++- app/controllers/votes_controller.rb | 4 +++- app/views/layouts/application.html.erb | 1 + app/views/users/index.html.erb | 3 +-- config/routes.rb | 2 ++ 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c07694e9d..1e91b11437 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,3 +1,8 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception + + def reset_session + @_request.reset_session + redirect_to root_path + end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 65b64b7549..2bc57fc367 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -30,13 +30,22 @@ def login if user session[:logged_in_user] = user.id flash[:success] = "Successfully logged in as #{ user.name }!" - redirect_to root_path + redirect_to request.referrer + return else user = User.create(name: name) session[:logged_in_user] = user.id + redirect_to request.referrer + return end end + # + # def logout + # session.delete(:user_id) + # redirect_to root_path + # end + private diff --git a/app/controllers/votes_controller.rb b/app/controllers/votes_controller.rb index afc551b6d6..c02a641eb4 100644 --- a/app/controllers/votes_controller.rb +++ b/app/controllers/votes_controller.rb @@ -6,7 +6,9 @@ def new def create user = User.find_by(id: params[:user][:id]) - + # current_user = nil + # if session[:logged_in_user] + # current_user = User.find_by[id:session[:logged_in_user]] if user == nil flash[:status] = :failure flash[:message] = "Sorry, you must be logged in to vote." diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 4daa563a6c..e65a1ac031 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -21,6 +21,7 @@
<% if session[:logged_in_user] %>

<%= link_to "Logged in as #{User.find(session[:logged_in_user]).name}", users_path(@user)%>

+

<%= link_to "Log out", reset_session_path, method: :patch %> <%else%> <%= link_to "Log in", login_path %> <%end%> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index edfa9ef6a1..c1b5e7b062 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -15,9 +15,8 @@ <% @users.each do |user| %> - TBD <%= link_to "#{user.name}", users_path(user) %> - Votes + <%= user.votes.count %> <%= user.created_at %> diff --git a/config/routes.rb b/config/routes.rb index f447b89d89..657d07dffc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,8 +6,10 @@ resources :users, only: [:index, :show, :new] get 'login', to: 'users#login_form', as:'login' post 'login', to: 'users#login' + # patch 'logout', to: 'users#logout', as: 'logout' resources :works, only: [:index, :show, :new, :edit, :update, :create, :destroy] # resources :votes + patch 'reset_session', to: 'application#reset_session', as: 'reset_session' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 2bb7b8cd5b2b9df77a63b725128db90e10841456 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 02:07:54 -0700 Subject: [PATCH 38/61] upvoting not working. need to make tests and troubleshoot later --- app/controllers/votes_controller.rb | 4 ++-- app/views/works/show.html.erb | 1 + config/routes.rb | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/votes_controller.rb b/app/controllers/votes_controller.rb index c02a641eb4..4a0efe7a35 100644 --- a/app/controllers/votes_controller.rb +++ b/app/controllers/votes_controller.rb @@ -5,7 +5,7 @@ def new end def create - user = User.find_by(id: params[:user][:id]) + user = User.find_by(id: session[:logged_in_user]) # current_user = nil # if session[:logged_in_user] # current_user = User.find_by[id:session[:logged_in_user]] @@ -16,7 +16,7 @@ def create return end - work = Work.find_by(id: params[:work][:id]) + work = Work.find_by(params[:id]) if work == nil flash[:status] = :failure diff --git a/app/views/works/show.html.erb b/app/views/works/show.html.erb index 352000904a..bf67bfcc6b 100644 --- a/app/views/works/show.html.erb +++ b/app/views/works/show.html.erb @@ -13,5 +13,6 @@

<%=link_to "Edit", edit_work_path %> +<%=link_to "UpVote", votes_path, method: :post %> <%=link_to "Delete", work_path, method: :delete, data: { confirm: "Are you sure you want to delete this #{@work.category}?" } %>
diff --git a/config/routes.rb b/config/routes.rb index 657d07dffc..23bea7e878 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,7 +8,7 @@ post 'login', to: 'users#login' # patch 'logout', to: 'users#logout', as: 'logout' resources :works, only: [:index, :show, :new, :edit, :update, :create, :destroy] - # resources :votes + resources :votes, only: [:new, :create] patch 'reset_session', to: 'application#reset_session', as: 'reset_session' From 0cd6001f83c4097731370de7a5e2c61989a6b595 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 02:29:31 -0700 Subject: [PATCH 39/61] suddenly the user show is not working and I dont know why --- app/controllers/users_controller.rb | 5 ++++- app/views/users/show.html.erb | 5 ++--- test/controllers/sessions_controller_test.rb | 9 --------- 3 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 test/controllers/sessions_controller_test.rb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2bc57fc367..daea279171 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -46,6 +46,9 @@ def login # redirect_to root_path # end + # def reset_session + # @_request.reset_session + # end private @@ -55,7 +58,7 @@ def user_params def find_user_by_id puts "<<<<<<<<<<<<<<<<<< running the test" - @user = User.find_by(id: params[:id]) + @user = User.find_by(id: params[:user][:id]) puts "<<<< - <% User.votes.each do |vote| %> + <% Vote.votes_by_user(@user).each do |vote| %> TBD <%= link_to "#{vote.work.title}", work_path(work) %> <%= vote.work.creator %> <%= vote.work.publication_year %> <%= vote.work.category %> - <%= vote.created_at + <%= vote.created_at %> - <% end %> diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb deleted file mode 100644 index 875059f69b..0000000000 --- a/test/controllers/sessions_controller_test.rb +++ /dev/null @@ -1,9 +0,0 @@ -require "test_helper" - -describe SessionsController do - it "should get new" do - get sessions_new_url - value(response).must_be :success? - end - -end From 9a4ee00678778e1e841bfe67e10050ba7521af62 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 02:39:01 -0700 Subject: [PATCH 40/61] fixed issue with user show page. --- app/controllers/users_controller.rb | 2 +- app/views/users/index.html.erb | 2 +- app/views/users/show.html.erb | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index daea279171..8c76b86048 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -58,7 +58,7 @@ def user_params def find_user_by_id puts "<<<<<<<<<<<<<<<<<< running the test" - @user = User.find_by(id: params[:user][:id]) + @user = User.find_by(id: params[:id]) puts "<<<< - <%= link_to "#{user.name}", users_path(user) %> + <%= link_to "#{user.name}", user_path(user) %> <%= user.votes.count %> <%= user.created_at %> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 73eab9d0a0..21dd5d8a6f 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -18,11 +18,10 @@ <% Vote.votes_by_user(@user).each do |vote| %> - TBD - <%= link_to "#{vote.work.title}", work_path(work) %> - <%= vote.work.creator %> - <%= vote.work.publication_year %> - <%= vote.work.category %> + <%= link_to "Title", "work_path(work_id)" %> + <%= "creator" %> + <%= "pub" %> + <%= "cat" %> <%= vote.created_at %> <% end %> From d5c74e069ad8cfaac2437aa9f1fba9f09fb6a153 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 12:40:44 -0700 Subject: [PATCH 41/61] small adjustment to the log in form to show the submit button --- app/controllers/users_controller.rb | 4 ++-- app/views/main/index.html.erb | 3 ++- app/views/users/login_form.html.erb | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 8c76b86048..d22d2c044b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -30,12 +30,12 @@ def login if user session[:logged_in_user] = user.id flash[:success] = "Successfully logged in as #{ user.name }!" - redirect_to request.referrer + redirect_to root_path return else user = User.create(name: name) session[:logged_in_user] = user.id - redirect_to request.referrer + redirect_to root_path #request.referrer return end diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index 218a559f94..a1f4f7f3dd 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -9,7 +9,8 @@

Top Albums

    <% Work.top_ten_albums.each do |work| %> -
  1. <%= "#{work.title} by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  2. +
  3. <%= link_to "#{work.title}", works_path(work)%> + <%= "by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  4. <% end %>
diff --git a/app/views/users/login_form.html.erb b/app/views/users/login_form.html.erb index de5a009e3c..8f5428f755 100644 --- a/app/views/users/login_form.html.erb +++ b/app/views/users/login_form.html.erb @@ -1,5 +1,5 @@ <%= form_tag do %> <%= label_tag "username" %> <%= text_field :user, :name %> -<% submit_tag "Log in" %> +<%= submit_tag "Log in" %> <% end %> From 85b945a3fe0f5461e344bb436bee89d182cf905e Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 13:26:47 -0700 Subject: [PATCH 42/61] small updates for upvote links and work.votes.count in views --- app/views/works/_list.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/works/_list.html.erb b/app/views/works/_list.html.erb index 5ddb90f51f..217982cb90 100644 --- a/app/views/works/_list.html.erb +++ b/app/views/works/_list.html.erb @@ -12,11 +12,11 @@ <% works.each do |work| %> - TBD + work.votes.count <%= link_to "#{work.title}", work_path(work) %> <%= work.creator %> <%= work.publication_year %> - upvote button + <%=link_to "UpVote", votes_path, method: :post %> <% end %> From a4aae4f395f071ad75af53f160128d103beb58e2 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 15:11:30 -0700 Subject: [PATCH 43/61] most basic functionality is working now! have not tried allowing user to sort yet --- app/controllers/votes_controller.rb | 18 ++++++++---------- app/views/main/index.html.erb | 10 ++++++---- app/views/users/show.html.erb | 11 ++++++----- app/views/works/_form_upvote.html.erb | 5 +++++ app/views/works/_list.html.erb | 7 +++++-- app/views/works/show.html.erb | 3 ++- 6 files changed, 32 insertions(+), 22 deletions(-) create mode 100644 app/views/works/_form_upvote.html.erb diff --git a/app/controllers/votes_controller.rb b/app/controllers/votes_controller.rb index 4a0efe7a35..48d7182705 100644 --- a/app/controllers/votes_controller.rb +++ b/app/controllers/votes_controller.rb @@ -6,17 +6,15 @@ def new def create user = User.find_by(id: session[:logged_in_user]) - # current_user = nil - # if session[:logged_in_user] - # current_user = User.find_by[id:session[:logged_in_user]] + if user == nil flash[:status] = :failure flash[:message] = "Sorry, you must be logged in to vote." - redirect_to work_path, status: :bad_request + redirect_to request.referrer, status: :bad_request return end - work = Work.find_by(params[:id]) + work = Work.find_by(id: params[:vote][:work_id]) if work == nil flash[:status] = :failure @@ -25,13 +23,13 @@ def create return end - @vote = Vote.new(user_id: user.id, work_id: work.id) + @vote = Vote.new(work_id: params[:vote][:work_id], user_id: session[:logged_in_user]) Vote.votes_by_user(user).each do |vote| if vote.work_id == work.id flash[:status] = :failure - flash[:message] = "You have already voted on this work - you can only vote once." - redirect_to work_path, status: :bad_request + flash[:message] = "You have already voted on #{work.title} - you can only vote once per media." + redirect_to request.referrer, status: :bad_request return end end @@ -39,12 +37,12 @@ def create if @vote.save flash[:status] = :success flash[:message] = "Thank you for your vote!" - redirect_to work_path + redirect_to request.referrer return else flash[:status] = :failure flash[:message] = "Sorry, your vote could not be processed." - redirect_to work_path, status: :bad_request + redirect_to request.referrer, status: :bad_request return end diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index a1f4f7f3dd..651056340a 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -2,14 +2,14 @@ <% work = Work.top %>

<%= "Media Spotlight: #{work.title} by #{work.creator}" %> -

<%= "Votes: #{work.votes.count}" %>

+

<%= "#{work.votes.count} votes" %>

Top Albums

    <% Work.top_ten_albums.each do |work| %> -
  1. <%= link_to "#{work.title}", works_path(work)%> +
  2. <%= link_to "#{work.title}", works_path(work.id)%> <%= "by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  3. <% end %>
@@ -17,13 +17,15 @@

Top Books

    <% Work.top_ten_books.each do |work| %> -
  1. <%= "#{work.title} by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  2. +
  3. <%= link_to "#{work.title}", works_path(work.id)%> + <%= "by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  4. <% end %>

Top Movies

    <% Work.top_ten_movies.each do |work| %> -
  1. <%= "#{work.title} by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  2. +
  3. <%= link_to "#{work.title}", works_path(work.id)%> + <%= "by #{work.creator} category: #{work.category} Votes: #{work.votes.count}" %>
  4. <% end %>
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 21dd5d8a6f..3d1c16a9e7 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -4,7 +4,7 @@

Votes

- Put this code in the vote model?? + @@ -17,11 +17,12 @@ <% Vote.votes_by_user(@user).each do |vote| %> + <% @work = Work.find_by(id: vote.work_id) %> - - - - + + + + <% end %> diff --git a/app/views/works/_form_upvote.html.erb b/app/views/works/_form_upvote.html.erb new file mode 100644 index 0000000000..bb03b198b6 --- /dev/null +++ b/app/views/works/_form_upvote.html.erb @@ -0,0 +1,5 @@ + +<%= form_for Vote.new(work_id: @work.id) do |f| %> + <%= f.hidden_field :work_id %> + <%= f.submit "Upvote" %> + <% end %> diff --git a/app/views/works/_list.html.erb b/app/views/works/_list.html.erb index 217982cb90..7903bbda46 100644 --- a/app/views/works/_list.html.erb +++ b/app/views/works/_list.html.erb @@ -12,11 +12,14 @@ <% works.each do |work| %> - + - + <% end %> diff --git a/app/views/works/show.html.erb b/app/views/works/show.html.erb index bf67bfcc6b..b2559244df 100644 --- a/app/views/works/show.html.erb +++ b/app/views/works/show.html.erb @@ -13,6 +13,7 @@
<%=link_to "Edit", edit_work_path %> -<%=link_to "UpVote", votes_path, method: :post %> +<%#link_to "UpVote", new_votes_path, method: :get %> +<%= render partial: 'form_upvote'%> <%=link_to "Delete", work_path, method: :delete, data: { confirm: "Are you sure you want to delete this #{@work.category}?" } %>
From 90d351dc8d0d0de2c2a0b05eded5b925f6a2b003 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 15:33:38 -0700 Subject: [PATCH 44/61] dryed up code in works with the form upvote, it now works for works index and works show --- app/views/works/_form_upvote.html.erb | 2 +- app/views/works/_list.html.erb | 5 +---- app/views/works/show.html.erb | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/views/works/_form_upvote.html.erb b/app/views/works/_form_upvote.html.erb index bb03b198b6..dc0e177cd5 100644 --- a/app/views/works/_form_upvote.html.erb +++ b/app/views/works/_form_upvote.html.erb @@ -1,5 +1,5 @@ -<%= form_for Vote.new(work_id: @work.id) do |f| %> +<%= form_for Vote.new(work_id: work.id) do |f| %> <%= f.hidden_field :work_id %> <%= f.submit "Upvote" %> <% end %> diff --git a/app/views/works/_list.html.erb b/app/views/works/_list.html.erb index 7903bbda46..49875b97f0 100644 --- a/app/views/works/_list.html.erb +++ b/app/views/works/_list.html.erb @@ -16,10 +16,7 @@ - + <% end %> diff --git a/app/views/works/show.html.erb b/app/views/works/show.html.erb index b2559244df..7e8bf4f4fd 100644 --- a/app/views/works/show.html.erb +++ b/app/views/works/show.html.erb @@ -14,6 +14,6 @@
<%=link_to "Edit", edit_work_path %> <%#link_to "UpVote", new_votes_path, method: :get %> -<%= render partial: 'form_upvote'%> +<%= render partial: 'form_upvote', locals: {work: @work}%> <%=link_to "Delete", work_path, method: :delete, data: { confirm: "Are you sure you want to delete this #{@work.category}?" } %>
From 93f6407002c90998c8aec47255ae215230c3153e Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 15:38:49 -0700 Subject: [PATCH 45/61] updated the foundation file but no change visible on my site --- app/assets/stylesheets/foundation.css | 4766 ++++++++----------------- 1 file changed, 1481 insertions(+), 3285 deletions(-) diff --git a/app/assets/stylesheets/foundation.css b/app/assets/stylesheets/foundation.css index ac6648c4d6..72a4ba0353 100644 --- a/app/assets/stylesheets/foundation.css +++ b/app/assets/stylesheets/foundation.css @@ -1,16 +1,10 @@ @charset "UTF-8"; /** * Foundation for Sites by ZURB - * Version 6.4.2 + * Version 6.3.1 * foundation.zurb.com * Licensed under MIT Open Source */ -@media print, screen and (min-width: 40em) { - .reveal, .reveal.tiny, .reveal.small, .reveal.large { - right: auto; - left: auto; - margin: 0 auto; } } - /*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ /* Document ========================================================================== */ @@ -77,7 +71,8 @@ figure { * 2. Show the overflow in Edge and IE. */ hr { - box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; /* 1 */ height: 0; /* 1 */ @@ -305,7 +300,8 @@ input { */ [type="checkbox"], [type="radio"] { - box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } @@ -357,7 +353,8 @@ fieldset { * `fieldset` elements in all browsers. */ legend { - box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ display: table; /* 1 */ @@ -432,13 +429,15 @@ template { font-family: "small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"; } html { - box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; font-size: 100%; } *, *::before, *::after { - box-sizing: inherit; } + -webkit-box-sizing: inherit; + box-sizing: inherit; } body { margin: 0; @@ -464,7 +463,8 @@ textarea { border-radius: 0; } select { - box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; width: 100%; border-radius: 0; } @@ -484,1698 +484,788 @@ button { border: 0; border-radius: 0; background: transparent; - line-height: 1; - cursor: auto; } + line-height: 1; } [data-whatinput='mouse'] button { outline: 0; } pre { overflow: auto; } -button, -input, -optgroup, -select, -textarea { - font-family: inherit; } - .is-visible { display: block !important; } .is-hidden { display: none !important; } -.grid-container { - padding-right: 0.625rem; - padding-left: 0.625rem; +.row { max-width: 75rem; - margin: 0 auto; } + margin-right: auto; + margin-left: auto; } + .row::before, .row::after { + display: table; + content: ' '; } + .row::after { + clear: both; } + .row.collapse > .column, .row.collapse > .columns { + padding-right: 0; + padding-left: 0; } + .row .row { + margin-right: -0.625rem; + margin-left: -0.625rem; } + @media print, screen and (min-width: 40em) { + .row .row { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + @media print, screen and (min-width: 64em) { + .row .row { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + .row .row.collapse { + margin-right: 0; + margin-left: 0; } + .row.expanded { + max-width: none; } + .row.expanded .row { + margin-right: auto; + margin-left: auto; } + .row:not(.expanded) .row { + max-width: none; } + .row.gutter-small > .column, .row.gutter-small > .columns { + padding-right: 0.625rem; + padding-left: 0.625rem; } + .row.gutter-medium > .column, .row.gutter-medium > .columns { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } + +.column, .columns { + width: 100%; + float: left; + padding-right: 0.625rem; + padding-left: 0.625rem; } @media print, screen and (min-width: 40em) { - .grid-container { + .column, .columns { padding-right: 0.9375rem; padding-left: 0.9375rem; } } - .grid-container.fluid { - padding-right: 0.625rem; - padding-left: 0.625rem; - max-width: 100%; - margin: 0 auto; } - @media print, screen and (min-width: 40em) { - .grid-container.fluid { - padding-right: 0.9375rem; - padding-left: 0.9375rem; } } - .grid-container.full { - padding-right: 0; - padding-left: 0; - max-width: 100%; - margin: 0 auto; } - -.grid-x { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; } - -.cell { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - min-height: 0px; - min-width: 0px; - width: 100%; } - .cell.auto { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } - .cell.shrink { - -ms-flex: 0 0 auto; - flex: 0 0 auto; } - -.grid-x > .auto { - width: auto; } + .column:last-child:not(:first-child), .columns:last-child:not(:first-child) { + float: right; } + .column.end:last-child:last-child, .end.columns:last-child:last-child { + float: left; } -.grid-x > .shrink { - width: auto; } +.column.row.row, .row.row.columns { + float: none; } -.grid-x > .small-shrink, .grid-x > .small-full, .grid-x > .small-1, .grid-x > .small-2, .grid-x > .small-3, .grid-x > .small-4, .grid-x > .small-5, .grid-x > .small-6, .grid-x > .small-7, .grid-x > .small-8, .grid-x > .small-9, .grid-x > .small-10, .grid-x > .small-11, .grid-x > .small-12 { - -ms-flex-preferred-size: auto; - flex-basis: auto; } +.row .column.row.row, .row .row.row.columns { + margin-right: 0; + margin-left: 0; + padding-right: 0; + padding-left: 0; } -@media print, screen and (min-width: 40em) { - .grid-x > .medium-shrink, .grid-x > .medium-full, .grid-x > .medium-1, .grid-x > .medium-2, .grid-x > .medium-3, .grid-x > .medium-4, .grid-x > .medium-5, .grid-x > .medium-6, .grid-x > .medium-7, .grid-x > .medium-8, .grid-x > .medium-9, .grid-x > .medium-10, .grid-x > .medium-11, .grid-x > .medium-12 { - -ms-flex-preferred-size: auto; - flex-basis: auto; } } +.small-1 { + width: 8.33333%; } -@media print, screen and (min-width: 64em) { - .grid-x > .large-shrink, .grid-x > .large-full, .grid-x > .large-1, .grid-x > .large-2, .grid-x > .large-3, .grid-x > .large-4, .grid-x > .large-5, .grid-x > .large-6, .grid-x > .large-7, .grid-x > .large-8, .grid-x > .large-9, .grid-x > .large-10, .grid-x > .large-11, .grid-x > .large-12 { - -ms-flex-preferred-size: auto; - flex-basis: auto; } } +.small-push-1 { + position: relative; + left: 8.33333%; } -.grid-x > .small-1 { - width: 8.33333%; } +.small-pull-1 { + position: relative; + left: -8.33333%; } + +.small-offset-0 { + margin-left: 0%; } -.grid-x > .small-2 { +.small-2 { width: 16.66667%; } -.grid-x > .small-3 { +.small-push-2 { + position: relative; + left: 16.66667%; } + +.small-pull-2 { + position: relative; + left: -16.66667%; } + +.small-offset-1 { + margin-left: 8.33333%; } + +.small-3 { width: 25%; } -.grid-x > .small-4 { +.small-push-3 { + position: relative; + left: 25%; } + +.small-pull-3 { + position: relative; + left: -25%; } + +.small-offset-2 { + margin-left: 16.66667%; } + +.small-4 { width: 33.33333%; } -.grid-x > .small-5 { +.small-push-4 { + position: relative; + left: 33.33333%; } + +.small-pull-4 { + position: relative; + left: -33.33333%; } + +.small-offset-3 { + margin-left: 25%; } + +.small-5 { width: 41.66667%; } -.grid-x > .small-6 { +.small-push-5 { + position: relative; + left: 41.66667%; } + +.small-pull-5 { + position: relative; + left: -41.66667%; } + +.small-offset-4 { + margin-left: 33.33333%; } + +.small-6 { width: 50%; } -.grid-x > .small-7 { +.small-push-6 { + position: relative; + left: 50%; } + +.small-pull-6 { + position: relative; + left: -50%; } + +.small-offset-5 { + margin-left: 41.66667%; } + +.small-7 { width: 58.33333%; } -.grid-x > .small-8 { +.small-push-7 { + position: relative; + left: 58.33333%; } + +.small-pull-7 { + position: relative; + left: -58.33333%; } + +.small-offset-6 { + margin-left: 50%; } + +.small-8 { width: 66.66667%; } -.grid-x > .small-9 { +.small-push-8 { + position: relative; + left: 66.66667%; } + +.small-pull-8 { + position: relative; + left: -66.66667%; } + +.small-offset-7 { + margin-left: 58.33333%; } + +.small-9 { width: 75%; } -.grid-x > .small-10 { +.small-push-9 { + position: relative; + left: 75%; } + +.small-pull-9 { + position: relative; + left: -75%; } + +.small-offset-8 { + margin-left: 66.66667%; } + +.small-10 { width: 83.33333%; } -.grid-x > .small-11 { - width: 91.66667%; } +.small-push-10 { + position: relative; + left: 83.33333%; } -.grid-x > .small-12 { - width: 100%; } +.small-pull-10 { + position: relative; + left: -83.33333%; } -@media print, screen and (min-width: 40em) { - .grid-x > .medium-auto { - -ms-flex: 1 1 0px; - flex: 1 1 0px; - width: auto; } - .grid-x > .medium-shrink { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; } - .grid-x > .medium-1 { - width: 8.33333%; } - .grid-x > .medium-2 { - width: 16.66667%; } - .grid-x > .medium-3 { - width: 25%; } - .grid-x > .medium-4 { - width: 33.33333%; } - .grid-x > .medium-5 { - width: 41.66667%; } - .grid-x > .medium-6 { - width: 50%; } - .grid-x > .medium-7 { - width: 58.33333%; } - .grid-x > .medium-8 { - width: 66.66667%; } - .grid-x > .medium-9 { - width: 75%; } - .grid-x > .medium-10 { - width: 83.33333%; } - .grid-x > .medium-11 { - width: 91.66667%; } - .grid-x > .medium-12 { - width: 100%; } } +.small-offset-9 { + margin-left: 75%; } -@media print, screen and (min-width: 64em) { - .grid-x > .large-auto { - -ms-flex: 1 1 0px; - flex: 1 1 0px; - width: auto; } - .grid-x > .large-shrink { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; } - .grid-x > .large-1 { - width: 8.33333%; } - .grid-x > .large-2 { - width: 16.66667%; } - .grid-x > .large-3 { - width: 25%; } - .grid-x > .large-4 { - width: 33.33333%; } - .grid-x > .large-5 { - width: 41.66667%; } - .grid-x > .large-6 { - width: 50%; } - .grid-x > .large-7 { - width: 58.33333%; } - .grid-x > .large-8 { - width: 66.66667%; } - .grid-x > .large-9 { - width: 75%; } - .grid-x > .large-10 { - width: 83.33333%; } - .grid-x > .large-11 { - width: 91.66667%; } - .grid-x > .large-12 { - width: 100%; } } +.small-11 { + width: 91.66667%; } -.grid-margin-x:not(.grid-x) > .cell { - width: auto; } +.small-push-11 { + position: relative; + left: 91.66667%; } -.grid-margin-y:not(.grid-y) > .cell { - height: auto; } +.small-pull-11 { + position: relative; + left: -91.66667%; } -.grid-margin-x { - margin-left: -0.625rem; - margin-right: -0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-margin-x { - margin-left: -0.9375rem; - margin-right: -0.9375rem; } } - .grid-margin-x > .cell { - width: calc(100% - 1.25rem); - margin-left: 0.625rem; - margin-right: 0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-margin-x > .cell { - width: calc(100% - 1.875rem); - margin-left: 0.9375rem; - margin-right: 0.9375rem; } } - .grid-margin-x > .auto { - width: auto; } - .grid-margin-x > .shrink { - width: auto; } - .grid-margin-x > .small-1 { - width: calc(8.33333% - 1.25rem); } - .grid-margin-x > .small-2 { - width: calc(16.66667% - 1.25rem); } - .grid-margin-x > .small-3 { - width: calc(25% - 1.25rem); } - .grid-margin-x > .small-4 { - width: calc(33.33333% - 1.25rem); } - .grid-margin-x > .small-5 { - width: calc(41.66667% - 1.25rem); } - .grid-margin-x > .small-6 { - width: calc(50% - 1.25rem); } - .grid-margin-x > .small-7 { - width: calc(58.33333% - 1.25rem); } - .grid-margin-x > .small-8 { - width: calc(66.66667% - 1.25rem); } - .grid-margin-x > .small-9 { - width: calc(75% - 1.25rem); } - .grid-margin-x > .small-10 { - width: calc(83.33333% - 1.25rem); } - .grid-margin-x > .small-11 { - width: calc(91.66667% - 1.25rem); } - .grid-margin-x > .small-12 { - width: calc(100% - 1.25rem); } - @media print, screen and (min-width: 40em) { - .grid-margin-x > .auto { - width: auto; } - .grid-margin-x > .shrink { - width: auto; } - .grid-margin-x > .small-1 { - width: calc(8.33333% - 1.875rem); } - .grid-margin-x > .small-2 { - width: calc(16.66667% - 1.875rem); } - .grid-margin-x > .small-3 { - width: calc(25% - 1.875rem); } - .grid-margin-x > .small-4 { - width: calc(33.33333% - 1.875rem); } - .grid-margin-x > .small-5 { - width: calc(41.66667% - 1.875rem); } - .grid-margin-x > .small-6 { - width: calc(50% - 1.875rem); } - .grid-margin-x > .small-7 { - width: calc(58.33333% - 1.875rem); } - .grid-margin-x > .small-8 { - width: calc(66.66667% - 1.875rem); } - .grid-margin-x > .small-9 { - width: calc(75% - 1.875rem); } - .grid-margin-x > .small-10 { - width: calc(83.33333% - 1.875rem); } - .grid-margin-x > .small-11 { - width: calc(91.66667% - 1.875rem); } - .grid-margin-x > .small-12 { - width: calc(100% - 1.875rem); } - .grid-margin-x > .medium-auto { - width: auto; } - .grid-margin-x > .medium-shrink { - width: auto; } - .grid-margin-x > .medium-1 { - width: calc(8.33333% - 1.875rem); } - .grid-margin-x > .medium-2 { - width: calc(16.66667% - 1.875rem); } - .grid-margin-x > .medium-3 { - width: calc(25% - 1.875rem); } - .grid-margin-x > .medium-4 { - width: calc(33.33333% - 1.875rem); } - .grid-margin-x > .medium-5 { - width: calc(41.66667% - 1.875rem); } - .grid-margin-x > .medium-6 { - width: calc(50% - 1.875rem); } - .grid-margin-x > .medium-7 { - width: calc(58.33333% - 1.875rem); } - .grid-margin-x > .medium-8 { - width: calc(66.66667% - 1.875rem); } - .grid-margin-x > .medium-9 { - width: calc(75% - 1.875rem); } - .grid-margin-x > .medium-10 { - width: calc(83.33333% - 1.875rem); } - .grid-margin-x > .medium-11 { - width: calc(91.66667% - 1.875rem); } - .grid-margin-x > .medium-12 { - width: calc(100% - 1.875rem); } } - @media print, screen and (min-width: 64em) { - .grid-margin-x > .large-auto { - width: auto; } - .grid-margin-x > .large-shrink { - width: auto; } - .grid-margin-x > .large-1 { - width: calc(8.33333% - 1.875rem); } - .grid-margin-x > .large-2 { - width: calc(16.66667% - 1.875rem); } - .grid-margin-x > .large-3 { - width: calc(25% - 1.875rem); } - .grid-margin-x > .large-4 { - width: calc(33.33333% - 1.875rem); } - .grid-margin-x > .large-5 { - width: calc(41.66667% - 1.875rem); } - .grid-margin-x > .large-6 { - width: calc(50% - 1.875rem); } - .grid-margin-x > .large-7 { - width: calc(58.33333% - 1.875rem); } - .grid-margin-x > .large-8 { - width: calc(66.66667% - 1.875rem); } - .grid-margin-x > .large-9 { - width: calc(75% - 1.875rem); } - .grid-margin-x > .large-10 { - width: calc(83.33333% - 1.875rem); } - .grid-margin-x > .large-11 { - width: calc(91.66667% - 1.875rem); } - .grid-margin-x > .large-12 { - width: calc(100% - 1.875rem); } } - -.grid-padding-x .grid-padding-x { - margin-right: -0.625rem; - margin-left: -0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-padding-x .grid-padding-x { - margin-right: -0.9375rem; - margin-left: -0.9375rem; } } +.small-offset-10 { + margin-left: 83.33333%; } -.grid-container:not(.full) > .grid-padding-x { - margin-right: -0.625rem; - margin-left: -0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-container:not(.full) > .grid-padding-x { - margin-right: -0.9375rem; - margin-left: -0.9375rem; } } +.small-12 { + width: 100%; } -.grid-padding-x > .cell { - padding-right: 0.625rem; - padding-left: 0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-padding-x > .cell { - padding-right: 0.9375rem; - padding-left: 0.9375rem; } } +.small-offset-11 { + margin-left: 91.66667%; } -.small-up-1 > .cell { +.small-up-1 > .column, .small-up-1 > .columns { + float: left; width: 100%; } + .small-up-1 > .column:nth-of-type(1n), .small-up-1 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-1 > .column:nth-of-type(1n+1), .small-up-1 > .columns:nth-of-type(1n+1) { + clear: both; } + .small-up-1 > .column:last-child, .small-up-1 > .columns:last-child { + float: left; } -.small-up-2 > .cell { +.small-up-2 > .column, .small-up-2 > .columns { + float: left; width: 50%; } + .small-up-2 > .column:nth-of-type(1n), .small-up-2 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-2 > .column:nth-of-type(2n+1), .small-up-2 > .columns:nth-of-type(2n+1) { + clear: both; } + .small-up-2 > .column:last-child, .small-up-2 > .columns:last-child { + float: left; } -.small-up-3 > .cell { +.small-up-3 > .column, .small-up-3 > .columns { + float: left; width: 33.33333%; } + .small-up-3 > .column:nth-of-type(1n), .small-up-3 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-3 > .column:nth-of-type(3n+1), .small-up-3 > .columns:nth-of-type(3n+1) { + clear: both; } + .small-up-3 > .column:last-child, .small-up-3 > .columns:last-child { + float: left; } -.small-up-4 > .cell { +.small-up-4 > .column, .small-up-4 > .columns { + float: left; width: 25%; } + .small-up-4 > .column:nth-of-type(1n), .small-up-4 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-4 > .column:nth-of-type(4n+1), .small-up-4 > .columns:nth-of-type(4n+1) { + clear: both; } + .small-up-4 > .column:last-child, .small-up-4 > .columns:last-child { + float: left; } -.small-up-5 > .cell { +.small-up-5 > .column, .small-up-5 > .columns { + float: left; width: 20%; } + .small-up-5 > .column:nth-of-type(1n), .small-up-5 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-5 > .column:nth-of-type(5n+1), .small-up-5 > .columns:nth-of-type(5n+1) { + clear: both; } + .small-up-5 > .column:last-child, .small-up-5 > .columns:last-child { + float: left; } -.small-up-6 > .cell { +.small-up-6 > .column, .small-up-6 > .columns { + float: left; width: 16.66667%; } + .small-up-6 > .column:nth-of-type(1n), .small-up-6 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-6 > .column:nth-of-type(6n+1), .small-up-6 > .columns:nth-of-type(6n+1) { + clear: both; } + .small-up-6 > .column:last-child, .small-up-6 > .columns:last-child { + float: left; } -.small-up-7 > .cell { +.small-up-7 > .column, .small-up-7 > .columns { + float: left; width: 14.28571%; } + .small-up-7 > .column:nth-of-type(1n), .small-up-7 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-7 > .column:nth-of-type(7n+1), .small-up-7 > .columns:nth-of-type(7n+1) { + clear: both; } + .small-up-7 > .column:last-child, .small-up-7 > .columns:last-child { + float: left; } -.small-up-8 > .cell { +.small-up-8 > .column, .small-up-8 > .columns { + float: left; width: 12.5%; } + .small-up-8 > .column:nth-of-type(1n), .small-up-8 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-8 > .column:nth-of-type(8n+1), .small-up-8 > .columns:nth-of-type(8n+1) { + clear: both; } + .small-up-8 > .column:last-child, .small-up-8 > .columns:last-child { + float: left; } -@media print, screen and (min-width: 40em) { - .medium-up-1 > .cell { - width: 100%; } - .medium-up-2 > .cell { - width: 50%; } - .medium-up-3 > .cell { - width: 33.33333%; } - .medium-up-4 > .cell { - width: 25%; } - .medium-up-5 > .cell { - width: 20%; } - .medium-up-6 > .cell { - width: 16.66667%; } - .medium-up-7 > .cell { - width: 14.28571%; } - .medium-up-8 > .cell { - width: 12.5%; } } - -@media print, screen and (min-width: 64em) { - .large-up-1 > .cell { - width: 100%; } - .large-up-2 > .cell { - width: 50%; } - .large-up-3 > .cell { - width: 33.33333%; } - .large-up-4 > .cell { - width: 25%; } - .large-up-5 > .cell { - width: 20%; } - .large-up-6 > .cell { - width: 16.66667%; } - .large-up-7 > .cell { - width: 14.28571%; } - .large-up-8 > .cell { - width: 12.5%; } } - -.grid-margin-x.small-up-1 > .cell { - width: calc(100% - 1.25rem); } - -.grid-margin-x.small-up-2 > .cell { - width: calc(50% - 1.25rem); } - -.grid-margin-x.small-up-3 > .cell { - width: calc(33.33333% - 1.25rem); } - -.grid-margin-x.small-up-4 > .cell { - width: calc(25% - 1.25rem); } - -.grid-margin-x.small-up-5 > .cell { - width: calc(20% - 1.25rem); } +.small-collapse > .column, .small-collapse > .columns { + padding-right: 0; + padding-left: 0; } -.grid-margin-x.small-up-6 > .cell { - width: calc(16.66667% - 1.25rem); } +.small-collapse .row { + margin-right: 0; + margin-left: 0; } -.grid-margin-x.small-up-7 > .cell { - width: calc(14.28571% - 1.25rem); } +.expanded.row .small-collapse.row { + margin-right: 0; + margin-left: 0; } -.grid-margin-x.small-up-8 > .cell { - width: calc(12.5% - 1.25rem); } +.small-uncollapse > .column, .small-uncollapse > .columns { + padding-right: 0.625rem; + padding-left: 0.625rem; } -@media print, screen and (min-width: 40em) { - .grid-margin-x.small-up-1 > .cell { - width: calc(100% - 1.25rem); } - .grid-margin-x.small-up-2 > .cell { - width: calc(50% - 1.25rem); } - .grid-margin-x.small-up-3 > .cell { - width: calc(33.33333% - 1.25rem); } - .grid-margin-x.small-up-4 > .cell { - width: calc(25% - 1.25rem); } - .grid-margin-x.small-up-5 > .cell { - width: calc(20% - 1.25rem); } - .grid-margin-x.small-up-6 > .cell { - width: calc(16.66667% - 1.25rem); } - .grid-margin-x.small-up-7 > .cell { - width: calc(14.28571% - 1.25rem); } - .grid-margin-x.small-up-8 > .cell { - width: calc(12.5% - 1.25rem); } - .grid-margin-x.medium-up-1 > .cell { - width: calc(100% - 1.875rem); } - .grid-margin-x.medium-up-2 > .cell { - width: calc(50% - 1.875rem); } - .grid-margin-x.medium-up-3 > .cell { - width: calc(33.33333% - 1.875rem); } - .grid-margin-x.medium-up-4 > .cell { - width: calc(25% - 1.875rem); } - .grid-margin-x.medium-up-5 > .cell { - width: calc(20% - 1.875rem); } - .grid-margin-x.medium-up-6 > .cell { - width: calc(16.66667% - 1.875rem); } - .grid-margin-x.medium-up-7 > .cell { - width: calc(14.28571% - 1.875rem); } - .grid-margin-x.medium-up-8 > .cell { - width: calc(12.5% - 1.875rem); } } +.small-centered { + margin-right: auto; + margin-left: auto; } + .small-centered, .small-centered:last-child:not(:first-child) { + float: none; + clear: both; } -@media print, screen and (min-width: 64em) { - .grid-margin-x.large-up-1 > .cell { - width: calc(100% - 1.875rem); } - .grid-margin-x.large-up-2 > .cell { - width: calc(50% - 1.875rem); } - .grid-margin-x.large-up-3 > .cell { - width: calc(33.33333% - 1.875rem); } - .grid-margin-x.large-up-4 > .cell { - width: calc(25% - 1.875rem); } - .grid-margin-x.large-up-5 > .cell { - width: calc(20% - 1.875rem); } - .grid-margin-x.large-up-6 > .cell { - width: calc(16.66667% - 1.875rem); } - .grid-margin-x.large-up-7 > .cell { - width: calc(14.28571% - 1.875rem); } - .grid-margin-x.large-up-8 > .cell { - width: calc(12.5% - 1.875rem); } } - -.small-margin-collapse { +.small-uncentered, +.small-push-0, +.small-pull-0 { + position: static; + float: left; margin-right: 0; margin-left: 0; } - .small-margin-collapse > .cell { - margin-right: 0; - margin-left: 0; } - .small-margin-collapse > .small-1 { + +@media print, screen and (min-width: 40em) { + .medium-1 { width: 8.33333%; } - .small-margin-collapse > .small-2 { + .medium-push-1 { + position: relative; + left: 8.33333%; } + .medium-pull-1 { + position: relative; + left: -8.33333%; } + .medium-offset-0 { + margin-left: 0%; } + .medium-2 { width: 16.66667%; } - .small-margin-collapse > .small-3 { + .medium-push-2 { + position: relative; + left: 16.66667%; } + .medium-pull-2 { + position: relative; + left: -16.66667%; } + .medium-offset-1 { + margin-left: 8.33333%; } + .medium-3 { width: 25%; } - .small-margin-collapse > .small-4 { + .medium-push-3 { + position: relative; + left: 25%; } + .medium-pull-3 { + position: relative; + left: -25%; } + .medium-offset-2 { + margin-left: 16.66667%; } + .medium-4 { width: 33.33333%; } - .small-margin-collapse > .small-5 { + .medium-push-4 { + position: relative; + left: 33.33333%; } + .medium-pull-4 { + position: relative; + left: -33.33333%; } + .medium-offset-3 { + margin-left: 25%; } + .medium-5 { width: 41.66667%; } - .small-margin-collapse > .small-6 { + .medium-push-5 { + position: relative; + left: 41.66667%; } + .medium-pull-5 { + position: relative; + left: -41.66667%; } + .medium-offset-4 { + margin-left: 33.33333%; } + .medium-6 { width: 50%; } - .small-margin-collapse > .small-7 { + .medium-push-6 { + position: relative; + left: 50%; } + .medium-pull-6 { + position: relative; + left: -50%; } + .medium-offset-5 { + margin-left: 41.66667%; } + .medium-7 { width: 58.33333%; } - .small-margin-collapse > .small-8 { + .medium-push-7 { + position: relative; + left: 58.33333%; } + .medium-pull-7 { + position: relative; + left: -58.33333%; } + .medium-offset-6 { + margin-left: 50%; } + .medium-8 { width: 66.66667%; } - .small-margin-collapse > .small-9 { + .medium-push-8 { + position: relative; + left: 66.66667%; } + .medium-pull-8 { + position: relative; + left: -66.66667%; } + .medium-offset-7 { + margin-left: 58.33333%; } + .medium-9 { width: 75%; } - .small-margin-collapse > .small-10 { + .medium-push-9 { + position: relative; + left: 75%; } + .medium-pull-9 { + position: relative; + left: -75%; } + .medium-offset-8 { + margin-left: 66.66667%; } + .medium-10 { width: 83.33333%; } - .small-margin-collapse > .small-11 { + .medium-push-10 { + position: relative; + left: 83.33333%; } + .medium-pull-10 { + position: relative; + left: -83.33333%; } + .medium-offset-9 { + margin-left: 75%; } + .medium-11 { width: 91.66667%; } - .small-margin-collapse > .small-12 { + .medium-push-11 { + position: relative; + left: 91.66667%; } + .medium-pull-11 { + position: relative; + left: -91.66667%; } + .medium-offset-10 { + margin-left: 83.33333%; } + .medium-12 { width: 100%; } - @media print, screen and (min-width: 40em) { - .small-margin-collapse > .medium-1 { - width: 8.33333%; } - .small-margin-collapse > .medium-2 { - width: 16.66667%; } - .small-margin-collapse > .medium-3 { - width: 25%; } - .small-margin-collapse > .medium-4 { - width: 33.33333%; } - .small-margin-collapse > .medium-5 { - width: 41.66667%; } - .small-margin-collapse > .medium-6 { - width: 50%; } - .small-margin-collapse > .medium-7 { - width: 58.33333%; } - .small-margin-collapse > .medium-8 { - width: 66.66667%; } - .small-margin-collapse > .medium-9 { - width: 75%; } - .small-margin-collapse > .medium-10 { - width: 83.33333%; } - .small-margin-collapse > .medium-11 { - width: 91.66667%; } - .small-margin-collapse > .medium-12 { - width: 100%; } } - @media print, screen and (min-width: 64em) { - .small-margin-collapse > .large-1 { - width: 8.33333%; } - .small-margin-collapse > .large-2 { - width: 16.66667%; } - .small-margin-collapse > .large-3 { - width: 25%; } - .small-margin-collapse > .large-4 { - width: 33.33333%; } - .small-margin-collapse > .large-5 { - width: 41.66667%; } - .small-margin-collapse > .large-6 { - width: 50%; } - .small-margin-collapse > .large-7 { - width: 58.33333%; } - .small-margin-collapse > .large-8 { - width: 66.66667%; } - .small-margin-collapse > .large-9 { - width: 75%; } - .small-margin-collapse > .large-10 { - width: 83.33333%; } - .small-margin-collapse > .large-11 { - width: 91.66667%; } - .small-margin-collapse > .large-12 { - width: 100%; } } - -.small-padding-collapse { - margin-right: 0; - margin-left: 0; } - .small-padding-collapse > .cell { - padding-right: 0; - padding-left: 0; } - -@media print, screen and (min-width: 40em) { - .medium-margin-collapse { - margin-right: 0; - margin-left: 0; } - .medium-margin-collapse > .cell { - margin-right: 0; - margin-left: 0; } } - -@media print, screen and (min-width: 40em) { - .medium-margin-collapse > .small-1 { - width: 8.33333%; } - .medium-margin-collapse > .small-2 { - width: 16.66667%; } - .medium-margin-collapse > .small-3 { - width: 25%; } - .medium-margin-collapse > .small-4 { - width: 33.33333%; } - .medium-margin-collapse > .small-5 { - width: 41.66667%; } - .medium-margin-collapse > .small-6 { + .medium-offset-11 { + margin-left: 91.66667%; } + .medium-up-1 > .column, .medium-up-1 > .columns { + float: left; + width: 100%; } + .medium-up-1 > .column:nth-of-type(1n), .medium-up-1 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-1 > .column:nth-of-type(1n+1), .medium-up-1 > .columns:nth-of-type(1n+1) { + clear: both; } + .medium-up-1 > .column:last-child, .medium-up-1 > .columns:last-child { + float: left; } + .medium-up-2 > .column, .medium-up-2 > .columns { + float: left; width: 50%; } - .medium-margin-collapse > .small-7 { - width: 58.33333%; } - .medium-margin-collapse > .small-8 { - width: 66.66667%; } - .medium-margin-collapse > .small-9 { - width: 75%; } - .medium-margin-collapse > .small-10 { - width: 83.33333%; } - .medium-margin-collapse > .small-11 { - width: 91.66667%; } - .medium-margin-collapse > .small-12 { - width: 100%; } } - -@media print, screen and (min-width: 40em) { - .medium-margin-collapse > .medium-1 { - width: 8.33333%; } - .medium-margin-collapse > .medium-2 { - width: 16.66667%; } - .medium-margin-collapse > .medium-3 { - width: 25%; } - .medium-margin-collapse > .medium-4 { + .medium-up-2 > .column:nth-of-type(1n), .medium-up-2 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-2 > .column:nth-of-type(2n+1), .medium-up-2 > .columns:nth-of-type(2n+1) { + clear: both; } + .medium-up-2 > .column:last-child, .medium-up-2 > .columns:last-child { + float: left; } + .medium-up-3 > .column, .medium-up-3 > .columns { + float: left; width: 33.33333%; } - .medium-margin-collapse > .medium-5 { - width: 41.66667%; } - .medium-margin-collapse > .medium-6 { - width: 50%; } - .medium-margin-collapse > .medium-7 { - width: 58.33333%; } - .medium-margin-collapse > .medium-8 { - width: 66.66667%; } - .medium-margin-collapse > .medium-9 { - width: 75%; } - .medium-margin-collapse > .medium-10 { - width: 83.33333%; } - .medium-margin-collapse > .medium-11 { - width: 91.66667%; } - .medium-margin-collapse > .medium-12 { - width: 100%; } } - -@media print, screen and (min-width: 64em) { - .medium-margin-collapse > .large-1 { - width: 8.33333%; } - .medium-margin-collapse > .large-2 { - width: 16.66667%; } - .medium-margin-collapse > .large-3 { + .medium-up-3 > .column:nth-of-type(1n), .medium-up-3 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-3 > .column:nth-of-type(3n+1), .medium-up-3 > .columns:nth-of-type(3n+1) { + clear: both; } + .medium-up-3 > .column:last-child, .medium-up-3 > .columns:last-child { + float: left; } + .medium-up-4 > .column, .medium-up-4 > .columns { + float: left; width: 25%; } - .medium-margin-collapse > .large-4 { - width: 33.33333%; } - .medium-margin-collapse > .large-5 { - width: 41.66667%; } - .medium-margin-collapse > .large-6 { - width: 50%; } - .medium-margin-collapse > .large-7 { - width: 58.33333%; } - .medium-margin-collapse > .large-8 { - width: 66.66667%; } - .medium-margin-collapse > .large-9 { - width: 75%; } - .medium-margin-collapse > .large-10 { - width: 83.33333%; } - .medium-margin-collapse > .large-11 { - width: 91.66667%; } - .medium-margin-collapse > .large-12 { - width: 100%; } } - -@media print, screen and (min-width: 40em) { - .medium-padding-collapse { + .medium-up-4 > .column:nth-of-type(1n), .medium-up-4 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-4 > .column:nth-of-type(4n+1), .medium-up-4 > .columns:nth-of-type(4n+1) { + clear: both; } + .medium-up-4 > .column:last-child, .medium-up-4 > .columns:last-child { + float: left; } + .medium-up-5 > .column, .medium-up-5 > .columns { + float: left; + width: 20%; } + .medium-up-5 > .column:nth-of-type(1n), .medium-up-5 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-5 > .column:nth-of-type(5n+1), .medium-up-5 > .columns:nth-of-type(5n+1) { + clear: both; } + .medium-up-5 > .column:last-child, .medium-up-5 > .columns:last-child { + float: left; } + .medium-up-6 > .column, .medium-up-6 > .columns { + float: left; + width: 16.66667%; } + .medium-up-6 > .column:nth-of-type(1n), .medium-up-6 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-6 > .column:nth-of-type(6n+1), .medium-up-6 > .columns:nth-of-type(6n+1) { + clear: both; } + .medium-up-6 > .column:last-child, .medium-up-6 > .columns:last-child { + float: left; } + .medium-up-7 > .column, .medium-up-7 > .columns { + float: left; + width: 14.28571%; } + .medium-up-7 > .column:nth-of-type(1n), .medium-up-7 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-7 > .column:nth-of-type(7n+1), .medium-up-7 > .columns:nth-of-type(7n+1) { + clear: both; } + .medium-up-7 > .column:last-child, .medium-up-7 > .columns:last-child { + float: left; } + .medium-up-8 > .column, .medium-up-8 > .columns { + float: left; + width: 12.5%; } + .medium-up-8 > .column:nth-of-type(1n), .medium-up-8 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-8 > .column:nth-of-type(8n+1), .medium-up-8 > .columns:nth-of-type(8n+1) { + clear: both; } + .medium-up-8 > .column:last-child, .medium-up-8 > .columns:last-child { + float: left; } + .medium-collapse > .column, .medium-collapse > .columns { + padding-right: 0; + padding-left: 0; } + .medium-collapse .row { margin-right: 0; margin-left: 0; } - .medium-padding-collapse > .cell { - padding-right: 0; - padding-left: 0; } } - -@media print, screen and (min-width: 64em) { - .large-margin-collapse { + .expanded.row .medium-collapse.row { margin-right: 0; margin-left: 0; } - .large-margin-collapse > .cell { - margin-right: 0; - margin-left: 0; } } - -@media print, screen and (min-width: 64em) { - .large-margin-collapse > .small-1 { - width: 8.33333%; } - .large-margin-collapse > .small-2 { - width: 16.66667%; } - .large-margin-collapse > .small-3 { - width: 25%; } - .large-margin-collapse > .small-4 { - width: 33.33333%; } - .large-margin-collapse > .small-5 { - width: 41.66667%; } - .large-margin-collapse > .small-6 { - width: 50%; } - .large-margin-collapse > .small-7 { - width: 58.33333%; } - .large-margin-collapse > .small-8 { - width: 66.66667%; } - .large-margin-collapse > .small-9 { - width: 75%; } - .large-margin-collapse > .small-10 { - width: 83.33333%; } - .large-margin-collapse > .small-11 { - width: 91.66667%; } - .large-margin-collapse > .small-12 { - width: 100%; } } - -@media print, screen and (min-width: 64em) { - .large-margin-collapse > .medium-1 { - width: 8.33333%; } - .large-margin-collapse > .medium-2 { - width: 16.66667%; } - .large-margin-collapse > .medium-3 { - width: 25%; } - .large-margin-collapse > .medium-4 { - width: 33.33333%; } - .large-margin-collapse > .medium-5 { - width: 41.66667%; } - .large-margin-collapse > .medium-6 { - width: 50%; } - .large-margin-collapse > .medium-7 { - width: 58.33333%; } - .large-margin-collapse > .medium-8 { - width: 66.66667%; } - .large-margin-collapse > .medium-9 { - width: 75%; } - .large-margin-collapse > .medium-10 { - width: 83.33333%; } - .large-margin-collapse > .medium-11 { - width: 91.66667%; } - .large-margin-collapse > .medium-12 { - width: 100%; } } - -@media print, screen and (min-width: 64em) { - .large-margin-collapse > .large-1 { - width: 8.33333%; } - .large-margin-collapse > .large-2 { - width: 16.66667%; } - .large-margin-collapse > .large-3 { - width: 25%; } - .large-margin-collapse > .large-4 { - width: 33.33333%; } - .large-margin-collapse > .large-5 { - width: 41.66667%; } - .large-margin-collapse > .large-6 { - width: 50%; } - .large-margin-collapse > .large-7 { - width: 58.33333%; } - .large-margin-collapse > .large-8 { - width: 66.66667%; } - .large-margin-collapse > .large-9 { - width: 75%; } - .large-margin-collapse > .large-10 { - width: 83.33333%; } - .large-margin-collapse > .large-11 { - width: 91.66667%; } - .large-margin-collapse > .large-12 { - width: 100%; } } - -@media print, screen and (min-width: 64em) { - .large-padding-collapse { + .medium-uncollapse > .column, .medium-uncollapse > .columns { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } + .medium-centered { + margin-right: auto; + margin-left: auto; } + .medium-centered, .medium-centered:last-child:not(:first-child) { + float: none; + clear: both; } + .medium-uncentered, + .medium-push-0, + .medium-pull-0 { + position: static; + float: left; margin-right: 0; - margin-left: 0; } - .large-padding-collapse > .cell { - padding-right: 0; - padding-left: 0; } } - -.small-offset-0 { - margin-left: 0%; } - -.grid-margin-x > .small-offset-0 { - margin-left: calc(0% + 0.625rem); } - -.small-offset-1 { - margin-left: 8.33333%; } - -.grid-margin-x > .small-offset-1 { - margin-left: calc(8.33333% + 0.625rem); } - -.small-offset-2 { - margin-left: 16.66667%; } - -.grid-margin-x > .small-offset-2 { - margin-left: calc(16.66667% + 0.625rem); } - -.small-offset-3 { - margin-left: 25%; } - -.grid-margin-x > .small-offset-3 { - margin-left: calc(25% + 0.625rem); } - -.small-offset-4 { - margin-left: 33.33333%; } - -.grid-margin-x > .small-offset-4 { - margin-left: calc(33.33333% + 0.625rem); } - -.small-offset-5 { - margin-left: 41.66667%; } - -.grid-margin-x > .small-offset-5 { - margin-left: calc(41.66667% + 0.625rem); } - -.small-offset-6 { - margin-left: 50%; } - -.grid-margin-x > .small-offset-6 { - margin-left: calc(50% + 0.625rem); } - -.small-offset-7 { - margin-left: 58.33333%; } - -.grid-margin-x > .small-offset-7 { - margin-left: calc(58.33333% + 0.625rem); } - -.small-offset-8 { - margin-left: 66.66667%; } - -.grid-margin-x > .small-offset-8 { - margin-left: calc(66.66667% + 0.625rem); } - -.small-offset-9 { - margin-left: 75%; } - -.grid-margin-x > .small-offset-9 { - margin-left: calc(75% + 0.625rem); } - -.small-offset-10 { - margin-left: 83.33333%; } - -.grid-margin-x > .small-offset-10 { - margin-left: calc(83.33333% + 0.625rem); } - -.small-offset-11 { - margin-left: 91.66667%; } - -.grid-margin-x > .small-offset-11 { - margin-left: calc(91.66667% + 0.625rem); } - -@media print, screen and (min-width: 40em) { - .medium-offset-0 { - margin-left: 0%; } - .grid-margin-x > .medium-offset-0 { - margin-left: calc(0% + 0.9375rem); } - .medium-offset-1 { - margin-left: 8.33333%; } - .grid-margin-x > .medium-offset-1 { - margin-left: calc(8.33333% + 0.9375rem); } - .medium-offset-2 { - margin-left: 16.66667%; } - .grid-margin-x > .medium-offset-2 { - margin-left: calc(16.66667% + 0.9375rem); } - .medium-offset-3 { - margin-left: 25%; } - .grid-margin-x > .medium-offset-3 { - margin-left: calc(25% + 0.9375rem); } - .medium-offset-4 { - margin-left: 33.33333%; } - .grid-margin-x > .medium-offset-4 { - margin-left: calc(33.33333% + 0.9375rem); } - .medium-offset-5 { - margin-left: 41.66667%; } - .grid-margin-x > .medium-offset-5 { - margin-left: calc(41.66667% + 0.9375rem); } - .medium-offset-6 { - margin-left: 50%; } - .grid-margin-x > .medium-offset-6 { - margin-left: calc(50% + 0.9375rem); } - .medium-offset-7 { - margin-left: 58.33333%; } - .grid-margin-x > .medium-offset-7 { - margin-left: calc(58.33333% + 0.9375rem); } - .medium-offset-8 { - margin-left: 66.66667%; } - .grid-margin-x > .medium-offset-8 { - margin-left: calc(66.66667% + 0.9375rem); } - .medium-offset-9 { - margin-left: 75%; } - .grid-margin-x > .medium-offset-9 { - margin-left: calc(75% + 0.9375rem); } - .medium-offset-10 { - margin-left: 83.33333%; } - .grid-margin-x > .medium-offset-10 { - margin-left: calc(83.33333% + 0.9375rem); } - .medium-offset-11 { - margin-left: 91.66667%; } - .grid-margin-x > .medium-offset-11 { - margin-left: calc(91.66667% + 0.9375rem); } } + margin-left: 0; } } @media print, screen and (min-width: 64em) { + .large-1 { + width: 8.33333%; } + .large-push-1 { + position: relative; + left: 8.33333%; } + .large-pull-1 { + position: relative; + left: -8.33333%; } .large-offset-0 { margin-left: 0%; } - .grid-margin-x > .large-offset-0 { - margin-left: calc(0% + 0.9375rem); } + .large-2 { + width: 16.66667%; } + .large-push-2 { + position: relative; + left: 16.66667%; } + .large-pull-2 { + position: relative; + left: -16.66667%; } .large-offset-1 { margin-left: 8.33333%; } - .grid-margin-x > .large-offset-1 { - margin-left: calc(8.33333% + 0.9375rem); } + .large-3 { + width: 25%; } + .large-push-3 { + position: relative; + left: 25%; } + .large-pull-3 { + position: relative; + left: -25%; } .large-offset-2 { margin-left: 16.66667%; } - .grid-margin-x > .large-offset-2 { - margin-left: calc(16.66667% + 0.9375rem); } + .large-4 { + width: 33.33333%; } + .large-push-4 { + position: relative; + left: 33.33333%; } + .large-pull-4 { + position: relative; + left: -33.33333%; } .large-offset-3 { margin-left: 25%; } - .grid-margin-x > .large-offset-3 { - margin-left: calc(25% + 0.9375rem); } + .large-5 { + width: 41.66667%; } + .large-push-5 { + position: relative; + left: 41.66667%; } + .large-pull-5 { + position: relative; + left: -41.66667%; } .large-offset-4 { margin-left: 33.33333%; } - .grid-margin-x > .large-offset-4 { - margin-left: calc(33.33333% + 0.9375rem); } + .large-6 { + width: 50%; } + .large-push-6 { + position: relative; + left: 50%; } + .large-pull-6 { + position: relative; + left: -50%; } .large-offset-5 { margin-left: 41.66667%; } - .grid-margin-x > .large-offset-5 { - margin-left: calc(41.66667% + 0.9375rem); } + .large-7 { + width: 58.33333%; } + .large-push-7 { + position: relative; + left: 58.33333%; } + .large-pull-7 { + position: relative; + left: -58.33333%; } .large-offset-6 { margin-left: 50%; } - .grid-margin-x > .large-offset-6 { - margin-left: calc(50% + 0.9375rem); } + .large-8 { + width: 66.66667%; } + .large-push-8 { + position: relative; + left: 66.66667%; } + .large-pull-8 { + position: relative; + left: -66.66667%; } .large-offset-7 { margin-left: 58.33333%; } - .grid-margin-x > .large-offset-7 { - margin-left: calc(58.33333% + 0.9375rem); } + .large-9 { + width: 75%; } + .large-push-9 { + position: relative; + left: 75%; } + .large-pull-9 { + position: relative; + left: -75%; } .large-offset-8 { margin-left: 66.66667%; } - .grid-margin-x > .large-offset-8 { - margin-left: calc(66.66667% + 0.9375rem); } + .large-10 { + width: 83.33333%; } + .large-push-10 { + position: relative; + left: 83.33333%; } + .large-pull-10 { + position: relative; + left: -83.33333%; } .large-offset-9 { margin-left: 75%; } - .grid-margin-x > .large-offset-9 { - margin-left: calc(75% + 0.9375rem); } + .large-11 { + width: 91.66667%; } + .large-push-11 { + position: relative; + left: 91.66667%; } + .large-pull-11 { + position: relative; + left: -91.66667%; } .large-offset-10 { margin-left: 83.33333%; } - .grid-margin-x > .large-offset-10 { - margin-left: calc(83.33333% + 0.9375rem); } + .large-12 { + width: 100%; } .large-offset-11 { margin-left: 91.66667%; } - .grid-margin-x > .large-offset-11 { - margin-left: calc(91.66667% + 0.9375rem); } } - -.grid-y { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: column nowrap; - flex-flow: column nowrap; } - .grid-y > .cell { - width: auto; } - .grid-y > .auto { - height: auto; } - .grid-y > .shrink { - height: auto; } - .grid-y > .small-shrink, .grid-y > .small-full, .grid-y > .small-1, .grid-y > .small-2, .grid-y > .small-3, .grid-y > .small-4, .grid-y > .small-5, .grid-y > .small-6, .grid-y > .small-7, .grid-y > .small-8, .grid-y > .small-9, .grid-y > .small-10, .grid-y > .small-11, .grid-y > .small-12 { - -ms-flex-preferred-size: auto; - flex-basis: auto; } - @media print, screen and (min-width: 40em) { - .grid-y > .medium-shrink, .grid-y > .medium-full, .grid-y > .medium-1, .grid-y > .medium-2, .grid-y > .medium-3, .grid-y > .medium-4, .grid-y > .medium-5, .grid-y > .medium-6, .grid-y > .medium-7, .grid-y > .medium-8, .grid-y > .medium-9, .grid-y > .medium-10, .grid-y > .medium-11, .grid-y > .medium-12 { - -ms-flex-preferred-size: auto; - flex-basis: auto; } } - @media print, screen and (min-width: 64em) { - .grid-y > .large-shrink, .grid-y > .large-full, .grid-y > .large-1, .grid-y > .large-2, .grid-y > .large-3, .grid-y > .large-4, .grid-y > .large-5, .grid-y > .large-6, .grid-y > .large-7, .grid-y > .large-8, .grid-y > .large-9, .grid-y > .large-10, .grid-y > .large-11, .grid-y > .large-12 { - -ms-flex-preferred-size: auto; - flex-basis: auto; } } - .grid-y > .small-1 { - height: 8.33333%; } - .grid-y > .small-2 { - height: 16.66667%; } - .grid-y > .small-3 { - height: 25%; } - .grid-y > .small-4 { - height: 33.33333%; } - .grid-y > .small-5 { - height: 41.66667%; } - .grid-y > .small-6 { - height: 50%; } - .grid-y > .small-7 { - height: 58.33333%; } - .grid-y > .small-8 { - height: 66.66667%; } - .grid-y > .small-9 { - height: 75%; } - .grid-y > .small-10 { - height: 83.33333%; } - .grid-y > .small-11 { - height: 91.66667%; } - .grid-y > .small-12 { - height: 100%; } - @media print, screen and (min-width: 40em) { - .grid-y > .medium-auto { - -ms-flex: 1 1 0px; - flex: 1 1 0px; - height: auto; } - .grid-y > .medium-shrink { - height: auto; } - .grid-y > .medium-1 { - height: 8.33333%; } - .grid-y > .medium-2 { - height: 16.66667%; } - .grid-y > .medium-3 { - height: 25%; } - .grid-y > .medium-4 { - height: 33.33333%; } - .grid-y > .medium-5 { - height: 41.66667%; } - .grid-y > .medium-6 { - height: 50%; } - .grid-y > .medium-7 { - height: 58.33333%; } - .grid-y > .medium-8 { - height: 66.66667%; } - .grid-y > .medium-9 { - height: 75%; } - .grid-y > .medium-10 { - height: 83.33333%; } - .grid-y > .medium-11 { - height: 91.66667%; } - .grid-y > .medium-12 { - height: 100%; } } - @media print, screen and (min-width: 64em) { - .grid-y > .large-auto { - -ms-flex: 1 1 0px; - flex: 1 1 0px; - height: auto; } - .grid-y > .large-shrink { - height: auto; } - .grid-y > .large-1 { - height: 8.33333%; } - .grid-y > .large-2 { - height: 16.66667%; } - .grid-y > .large-3 { - height: 25%; } - .grid-y > .large-4 { - height: 33.33333%; } - .grid-y > .large-5 { - height: 41.66667%; } - .grid-y > .large-6 { - height: 50%; } - .grid-y > .large-7 { - height: 58.33333%; } - .grid-y > .large-8 { - height: 66.66667%; } - .grid-y > .large-9 { - height: 75%; } - .grid-y > .large-10 { - height: 83.33333%; } - .grid-y > .large-11 { - height: 91.66667%; } - .grid-y > .large-12 { - height: 100%; } } - -.grid-padding-y .grid-padding-y { - margin-top: -0.625rem; - margin-bottom: -0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-padding-y .grid-padding-y { - margin-top: -0.9375rem; - margin-bottom: -0.9375rem; } } - -.grid-padding-y > .cell { - padding-top: 0.625rem; - padding-bottom: 0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-padding-y > .cell { - padding-top: 0.9375rem; - padding-bottom: 0.9375rem; } } - -.grid-margin-y { - margin-top: -0.625rem; - margin-bottom: -0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-margin-y { - margin-top: -0.9375rem; - margin-bottom: -0.9375rem; } } - .grid-margin-y > .cell { - height: calc(100% - 1.25rem); - margin-top: 0.625rem; - margin-bottom: 0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-margin-y > .cell { - height: calc(100% - 1.875rem); - margin-top: 0.9375rem; - margin-bottom: 0.9375rem; } } - .grid-margin-y > .auto { - height: auto; } - .grid-margin-y > .shrink { - height: auto; } - .grid-margin-y > .small-1 { - height: calc(8.33333% - 1.25rem); } - .grid-margin-y > .small-2 { - height: calc(16.66667% - 1.25rem); } - .grid-margin-y > .small-3 { - height: calc(25% - 1.25rem); } - .grid-margin-y > .small-4 { - height: calc(33.33333% - 1.25rem); } - .grid-margin-y > .small-5 { - height: calc(41.66667% - 1.25rem); } - .grid-margin-y > .small-6 { - height: calc(50% - 1.25rem); } - .grid-margin-y > .small-7 { - height: calc(58.33333% - 1.25rem); } - .grid-margin-y > .small-8 { - height: calc(66.66667% - 1.25rem); } - .grid-margin-y > .small-9 { - height: calc(75% - 1.25rem); } - .grid-margin-y > .small-10 { - height: calc(83.33333% - 1.25rem); } - .grid-margin-y > .small-11 { - height: calc(91.66667% - 1.25rem); } - .grid-margin-y > .small-12 { - height: calc(100% - 1.25rem); } - @media print, screen and (min-width: 40em) { - .grid-margin-y > .auto { - height: auto; } - .grid-margin-y > .shrink { - height: auto; } - .grid-margin-y > .small-1 { - height: calc(8.33333% - 1.875rem); } - .grid-margin-y > .small-2 { - height: calc(16.66667% - 1.875rem); } - .grid-margin-y > .small-3 { - height: calc(25% - 1.875rem); } - .grid-margin-y > .small-4 { - height: calc(33.33333% - 1.875rem); } - .grid-margin-y > .small-5 { - height: calc(41.66667% - 1.875rem); } - .grid-margin-y > .small-6 { - height: calc(50% - 1.875rem); } - .grid-margin-y > .small-7 { - height: calc(58.33333% - 1.875rem); } - .grid-margin-y > .small-8 { - height: calc(66.66667% - 1.875rem); } - .grid-margin-y > .small-9 { - height: calc(75% - 1.875rem); } - .grid-margin-y > .small-10 { - height: calc(83.33333% - 1.875rem); } - .grid-margin-y > .small-11 { - height: calc(91.66667% - 1.875rem); } - .grid-margin-y > .small-12 { - height: calc(100% - 1.875rem); } - .grid-margin-y > .medium-auto { - height: auto; } - .grid-margin-y > .medium-shrink { - height: auto; } - .grid-margin-y > .medium-1 { - height: calc(8.33333% - 1.875rem); } - .grid-margin-y > .medium-2 { - height: calc(16.66667% - 1.875rem); } - .grid-margin-y > .medium-3 { - height: calc(25% - 1.875rem); } - .grid-margin-y > .medium-4 { - height: calc(33.33333% - 1.875rem); } - .grid-margin-y > .medium-5 { - height: calc(41.66667% - 1.875rem); } - .grid-margin-y > .medium-6 { - height: calc(50% - 1.875rem); } - .grid-margin-y > .medium-7 { - height: calc(58.33333% - 1.875rem); } - .grid-margin-y > .medium-8 { - height: calc(66.66667% - 1.875rem); } - .grid-margin-y > .medium-9 { - height: calc(75% - 1.875rem); } - .grid-margin-y > .medium-10 { - height: calc(83.33333% - 1.875rem); } - .grid-margin-y > .medium-11 { - height: calc(91.66667% - 1.875rem); } - .grid-margin-y > .medium-12 { - height: calc(100% - 1.875rem); } } - @media print, screen and (min-width: 64em) { - .grid-margin-y > .large-auto { - height: auto; } - .grid-margin-y > .large-shrink { - height: auto; } - .grid-margin-y > .large-1 { - height: calc(8.33333% - 1.875rem); } - .grid-margin-y > .large-2 { - height: calc(16.66667% - 1.875rem); } - .grid-margin-y > .large-3 { - height: calc(25% - 1.875rem); } - .grid-margin-y > .large-4 { - height: calc(33.33333% - 1.875rem); } - .grid-margin-y > .large-5 { - height: calc(41.66667% - 1.875rem); } - .grid-margin-y > .large-6 { - height: calc(50% - 1.875rem); } - .grid-margin-y > .large-7 { - height: calc(58.33333% - 1.875rem); } - .grid-margin-y > .large-8 { - height: calc(66.66667% - 1.875rem); } - .grid-margin-y > .large-9 { - height: calc(75% - 1.875rem); } - .grid-margin-y > .large-10 { - height: calc(83.33333% - 1.875rem); } - .grid-margin-y > .large-11 { - height: calc(91.66667% - 1.875rem); } - .grid-margin-y > .large-12 { - height: calc(100% - 1.875rem); } } - -.grid-frame { - overflow: hidden; - position: relative; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-align: stretch; - align-items: stretch; - width: 100vw; } - -.cell .grid-frame { - width: 100%; } - -.cell-block { - overflow-x: auto; - max-width: 100%; - -webkit-overflow-scrolling: touch; - -ms-overflow-stype: -ms-autohiding-scrollbar; } - -.cell-block-y { - overflow-y: auto; - max-height: 100%; - -webkit-overflow-scrolling: touch; - -ms-overflow-stype: -ms-autohiding-scrollbar; } - -.cell-block-container { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - max-height: 100%; } - .cell-block-container > .grid-x { - max-height: 100%; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; } - -@media print, screen and (min-width: 40em) { - .medium-grid-frame { - overflow: hidden; - position: relative; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-align: stretch; - align-items: stretch; - width: 100vw; } - .cell .medium-grid-frame { - width: 100%; } - .medium-cell-block { - overflow-x: auto; - max-width: 100%; - -webkit-overflow-scrolling: touch; - -ms-overflow-stype: -ms-autohiding-scrollbar; } - .medium-cell-block-container { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - max-height: 100%; } - .medium-cell-block-container > .grid-x { - max-height: 100%; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; } - .medium-cell-block-y { - overflow-y: auto; - max-height: 100%; - -webkit-overflow-scrolling: touch; - -ms-overflow-stype: -ms-autohiding-scrollbar; } } - -@media print, screen and (min-width: 64em) { - .large-grid-frame { - overflow: hidden; - position: relative; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-align: stretch; - align-items: stretch; - width: 100vw; } - .cell .large-grid-frame { + .large-up-1 > .column, .large-up-1 > .columns { + float: left; width: 100%; } - .large-cell-block { - overflow-x: auto; - max-width: 100%; - -webkit-overflow-scrolling: touch; - -ms-overflow-stype: -ms-autohiding-scrollbar; } - .large-cell-block-container { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - max-height: 100%; } - .large-cell-block-container > .grid-x { - max-height: 100%; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; } - .large-cell-block-y { - overflow-y: auto; - max-height: 100%; - -webkit-overflow-scrolling: touch; - -ms-overflow-stype: -ms-autohiding-scrollbar; } } - -.grid-y.grid-frame { - width: auto; - overflow: hidden; - position: relative; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-align: stretch; - align-items: stretch; - height: 100vh; } - -@media print, screen and (min-width: 40em) { - .grid-y.medium-grid-frame { - width: auto; - overflow: hidden; - position: relative; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-align: stretch; - align-items: stretch; - height: 100vh; } } - -@media print, screen and (min-width: 64em) { - .grid-y.large-grid-frame { - width: auto; - overflow: hidden; - position: relative; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-align: stretch; - align-items: stretch; - height: 100vh; } } - -.cell .grid-y.grid-frame { - height: 100%; } - -@media print, screen and (min-width: 40em) { - .cell .grid-y.medium-grid-frame { - height: 100%; } } - -@media print, screen and (min-width: 64em) { - .cell .grid-y.large-grid-frame { - height: 100%; } } + .large-up-1 > .column:nth-of-type(1n), .large-up-1 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-1 > .column:nth-of-type(1n+1), .large-up-1 > .columns:nth-of-type(1n+1) { + clear: both; } + .large-up-1 > .column:last-child, .large-up-1 > .columns:last-child { + float: left; } + .large-up-2 > .column, .large-up-2 > .columns { + float: left; + width: 50%; } + .large-up-2 > .column:nth-of-type(1n), .large-up-2 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-2 > .column:nth-of-type(2n+1), .large-up-2 > .columns:nth-of-type(2n+1) { + clear: both; } + .large-up-2 > .column:last-child, .large-up-2 > .columns:last-child { + float: left; } + .large-up-3 > .column, .large-up-3 > .columns { + float: left; + width: 33.33333%; } + .large-up-3 > .column:nth-of-type(1n), .large-up-3 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-3 > .column:nth-of-type(3n+1), .large-up-3 > .columns:nth-of-type(3n+1) { + clear: both; } + .large-up-3 > .column:last-child, .large-up-3 > .columns:last-child { + float: left; } + .large-up-4 > .column, .large-up-4 > .columns { + float: left; + width: 25%; } + .large-up-4 > .column:nth-of-type(1n), .large-up-4 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-4 > .column:nth-of-type(4n+1), .large-up-4 > .columns:nth-of-type(4n+1) { + clear: both; } + .large-up-4 > .column:last-child, .large-up-4 > .columns:last-child { + float: left; } + .large-up-5 > .column, .large-up-5 > .columns { + float: left; + width: 20%; } + .large-up-5 > .column:nth-of-type(1n), .large-up-5 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-5 > .column:nth-of-type(5n+1), .large-up-5 > .columns:nth-of-type(5n+1) { + clear: both; } + .large-up-5 > .column:last-child, .large-up-5 > .columns:last-child { + float: left; } + .large-up-6 > .column, .large-up-6 > .columns { + float: left; + width: 16.66667%; } + .large-up-6 > .column:nth-of-type(1n), .large-up-6 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-6 > .column:nth-of-type(6n+1), .large-up-6 > .columns:nth-of-type(6n+1) { + clear: both; } + .large-up-6 > .column:last-child, .large-up-6 > .columns:last-child { + float: left; } + .large-up-7 > .column, .large-up-7 > .columns { + float: left; + width: 14.28571%; } + .large-up-7 > .column:nth-of-type(1n), .large-up-7 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-7 > .column:nth-of-type(7n+1), .large-up-7 > .columns:nth-of-type(7n+1) { + clear: both; } + .large-up-7 > .column:last-child, .large-up-7 > .columns:last-child { + float: left; } + .large-up-8 > .column, .large-up-8 > .columns { + float: left; + width: 12.5%; } + .large-up-8 > .column:nth-of-type(1n), .large-up-8 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-8 > .column:nth-of-type(8n+1), .large-up-8 > .columns:nth-of-type(8n+1) { + clear: both; } + .large-up-8 > .column:last-child, .large-up-8 > .columns:last-child { + float: left; } + .large-collapse > .column, .large-collapse > .columns { + padding-right: 0; + padding-left: 0; } + .large-collapse .row { + margin-right: 0; + margin-left: 0; } + .expanded.row .large-collapse.row { + margin-right: 0; + margin-left: 0; } + .large-uncollapse > .column, .large-uncollapse > .columns { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } + .large-centered { + margin-right: auto; + margin-left: auto; } + .large-centered, .large-centered:last-child:not(:first-child) { + float: none; + clear: both; } + .large-uncentered, + .large-push-0, + .large-pull-0 { + position: static; + float: left; + margin-right: 0; + margin-left: 0; } } -.grid-margin-y { - margin-top: -0.625rem; - margin-bottom: -0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-margin-y { - margin-top: -0.9375rem; - margin-bottom: -0.9375rem; } } - .grid-margin-y > .cell { - height: calc(100% - 1.25rem); - margin-top: 0.625rem; - margin-bottom: 0.625rem; } - @media print, screen and (min-width: 40em) { - .grid-margin-y > .cell { - height: calc(100% - 1.875rem); - margin-top: 0.9375rem; - margin-bottom: 0.9375rem; } } - .grid-margin-y > .auto { - height: auto; } - .grid-margin-y > .shrink { - height: auto; } - .grid-margin-y > .small-1 { - height: calc(8.33333% - 1.25rem); } - .grid-margin-y > .small-2 { - height: calc(16.66667% - 1.25rem); } - .grid-margin-y > .small-3 { - height: calc(25% - 1.25rem); } - .grid-margin-y > .small-4 { - height: calc(33.33333% - 1.25rem); } - .grid-margin-y > .small-5 { - height: calc(41.66667% - 1.25rem); } - .grid-margin-y > .small-6 { - height: calc(50% - 1.25rem); } - .grid-margin-y > .small-7 { - height: calc(58.33333% - 1.25rem); } - .grid-margin-y > .small-8 { - height: calc(66.66667% - 1.25rem); } - .grid-margin-y > .small-9 { - height: calc(75% - 1.25rem); } - .grid-margin-y > .small-10 { - height: calc(83.33333% - 1.25rem); } - .grid-margin-y > .small-11 { - height: calc(91.66667% - 1.25rem); } - .grid-margin-y > .small-12 { - height: calc(100% - 1.25rem); } - @media print, screen and (min-width: 40em) { - .grid-margin-y > .auto { - height: auto; } - .grid-margin-y > .shrink { - height: auto; } - .grid-margin-y > .small-1 { - height: calc(8.33333% - 1.875rem); } - .grid-margin-y > .small-2 { - height: calc(16.66667% - 1.875rem); } - .grid-margin-y > .small-3 { - height: calc(25% - 1.875rem); } - .grid-margin-y > .small-4 { - height: calc(33.33333% - 1.875rem); } - .grid-margin-y > .small-5 { - height: calc(41.66667% - 1.875rem); } - .grid-margin-y > .small-6 { - height: calc(50% - 1.875rem); } - .grid-margin-y > .small-7 { - height: calc(58.33333% - 1.875rem); } - .grid-margin-y > .small-8 { - height: calc(66.66667% - 1.875rem); } - .grid-margin-y > .small-9 { - height: calc(75% - 1.875rem); } - .grid-margin-y > .small-10 { - height: calc(83.33333% - 1.875rem); } - .grid-margin-y > .small-11 { - height: calc(91.66667% - 1.875rem); } - .grid-margin-y > .small-12 { - height: calc(100% - 1.875rem); } - .grid-margin-y > .medium-auto { - height: auto; } - .grid-margin-y > .medium-shrink { - height: auto; } - .grid-margin-y > .medium-1 { - height: calc(8.33333% - 1.875rem); } - .grid-margin-y > .medium-2 { - height: calc(16.66667% - 1.875rem); } - .grid-margin-y > .medium-3 { - height: calc(25% - 1.875rem); } - .grid-margin-y > .medium-4 { - height: calc(33.33333% - 1.875rem); } - .grid-margin-y > .medium-5 { - height: calc(41.66667% - 1.875rem); } - .grid-margin-y > .medium-6 { - height: calc(50% - 1.875rem); } - .grid-margin-y > .medium-7 { - height: calc(58.33333% - 1.875rem); } - .grid-margin-y > .medium-8 { - height: calc(66.66667% - 1.875rem); } - .grid-margin-y > .medium-9 { - height: calc(75% - 1.875rem); } - .grid-margin-y > .medium-10 { - height: calc(83.33333% - 1.875rem); } - .grid-margin-y > .medium-11 { - height: calc(91.66667% - 1.875rem); } - .grid-margin-y > .medium-12 { - height: calc(100% - 1.875rem); } } - @media print, screen and (min-width: 64em) { - .grid-margin-y > .large-auto { - height: auto; } - .grid-margin-y > .large-shrink { - height: auto; } - .grid-margin-y > .large-1 { - height: calc(8.33333% - 1.875rem); } - .grid-margin-y > .large-2 { - height: calc(16.66667% - 1.875rem); } - .grid-margin-y > .large-3 { - height: calc(25% - 1.875rem); } - .grid-margin-y > .large-4 { - height: calc(33.33333% - 1.875rem); } - .grid-margin-y > .large-5 { - height: calc(41.66667% - 1.875rem); } - .grid-margin-y > .large-6 { - height: calc(50% - 1.875rem); } - .grid-margin-y > .large-7 { - height: calc(58.33333% - 1.875rem); } - .grid-margin-y > .large-8 { - height: calc(66.66667% - 1.875rem); } - .grid-margin-y > .large-9 { - height: calc(75% - 1.875rem); } - .grid-margin-y > .large-10 { - height: calc(83.33333% - 1.875rem); } - .grid-margin-y > .large-11 { - height: calc(91.66667% - 1.875rem); } - .grid-margin-y > .large-12 { - height: calc(100% - 1.875rem); } } - -.grid-frame.grid-margin-y { - height: calc(100vh + 1.25rem); } +.column-block { + margin-bottom: 1.25rem; } + .column-block > :last-child { + margin-bottom: 0; } @media print, screen and (min-width: 40em) { - .grid-frame.grid-margin-y { - height: calc(100vh + 1.875rem); } } - @media print, screen and (min-width: 64em) { - .grid-frame.grid-margin-y { - height: calc(100vh + 1.875rem); } } - -@media print, screen and (min-width: 40em) { - .grid-margin-y.medium-grid-frame { - height: calc(100vh + 1.875rem); } } - -@media print, screen and (min-width: 64em) { - .grid-margin-y.large-grid-frame { - height: calc(100vh + 1.875rem); } } - -.align-right { - -ms-flex-pack: end; - justify-content: flex-end; } - -.align-center { - -ms-flex-pack: center; - justify-content: center; } - -.align-justify { - -ms-flex-pack: justify; - justify-content: space-between; } - -.align-spaced { - -ms-flex-pack: distribute; - justify-content: space-around; } - -.align-right.vertical.menu > li > a { - -ms-flex-pack: end; - justify-content: flex-end; } - -.align-center.vertical.menu > li > a { - -ms-flex-pack: center; - justify-content: center; } - -.align-top { - -ms-flex-align: start; - align-items: flex-start; } - -.align-self-top { - -ms-flex-item-align: start; - align-self: flex-start; } - -.align-bottom { - -ms-flex-align: end; - align-items: flex-end; } - -.align-self-bottom { - -ms-flex-item-align: end; - align-self: flex-end; } - -.align-middle { - -ms-flex-align: center; - align-items: center; } - -.align-self-middle { - -ms-flex-item-align: center; - -ms-grid-row-align: center; - align-self: center; } - -.align-stretch { - -ms-flex-align: stretch; - align-items: stretch; } - -.align-self-stretch { - -ms-flex-item-align: stretch; - -ms-grid-row-align: stretch; - align-self: stretch; } - -.align-center-middle { - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - -ms-flex-line-pack: center; - align-content: center; } - -.small-order-1 { - -ms-flex-order: 1; - order: 1; } - -.small-order-2 { - -ms-flex-order: 2; - order: 2; } - -.small-order-3 { - -ms-flex-order: 3; - order: 3; } - -.small-order-4 { - -ms-flex-order: 4; - order: 4; } - -.small-order-5 { - -ms-flex-order: 5; - order: 5; } - -.small-order-6 { - -ms-flex-order: 6; - order: 6; } - -@media print, screen and (min-width: 40em) { - .medium-order-1 { - -ms-flex-order: 1; - order: 1; } - .medium-order-2 { - -ms-flex-order: 2; - order: 2; } - .medium-order-3 { - -ms-flex-order: 3; - order: 3; } - .medium-order-4 { - -ms-flex-order: 4; - order: 4; } - .medium-order-5 { - -ms-flex-order: 5; - order: 5; } - .medium-order-6 { - -ms-flex-order: 6; - order: 6; } } - -@media print, screen and (min-width: 64em) { - .large-order-1 { - -ms-flex-order: 1; - order: 1; } - .large-order-2 { - -ms-flex-order: 2; - order: 2; } - .large-order-3 { - -ms-flex-order: 3; - order: 3; } - .large-order-4 { - -ms-flex-order: 4; - order: 4; } - .large-order-5 { - -ms-flex-order: 5; - order: 5; } - .large-order-6 { - -ms-flex-order: 6; - order: 6; } } - -.flex-container { - display: -ms-flexbox; - display: flex; } - -.flex-child-auto { - -ms-flex: 1 1 auto; - flex: 1 1 auto; } - -.flex-child-grow { - -ms-flex: 1 0 auto; - flex: 1 0 auto; } - -.flex-child-shrink { - -ms-flex: 0 1 auto; - flex: 0 1 auto; } - -.flex-dir-row { - -ms-flex-direction: row; - flex-direction: row; } - -.flex-dir-row-reverse { - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; } - -.flex-dir-column { - -ms-flex-direction: column; - flex-direction: column; } - -.flex-dir-column-reverse { - -ms-flex-direction: column-reverse; - flex-direction: column-reverse; } - -@media print, screen and (min-width: 40em) { - .medium-flex-container { - display: -ms-flexbox; - display: flex; } - .medium-flex-child-auto { - -ms-flex: 1 1 auto; - flex: 1 1 auto; } - .medium-flex-child-grow { - -ms-flex: 1 0 auto; - flex: 1 0 auto; } - .medium-flex-child-shrink { - -ms-flex: 0 1 auto; - flex: 0 1 auto; } - .medium-flex-dir-row { - -ms-flex-direction: row; - flex-direction: row; } - .medium-flex-dir-row-reverse { - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; } - .medium-flex-dir-column { - -ms-flex-direction: column; - flex-direction: column; } - .medium-flex-dir-column-reverse { - -ms-flex-direction: column-reverse; - flex-direction: column-reverse; } } - -@media print, screen and (min-width: 64em) { - .large-flex-container { - display: -ms-flexbox; - display: flex; } - .large-flex-child-auto { - -ms-flex: 1 1 auto; - flex: 1 1 auto; } - .large-flex-child-grow { - -ms-flex: 1 0 auto; - flex: 1 0 auto; } - .large-flex-child-shrink { - -ms-flex: 0 1 auto; - flex: 0 1 auto; } - .large-flex-dir-row { - -ms-flex-direction: row; - flex-direction: row; } - .large-flex-dir-row-reverse { - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; } - .large-flex-dir-column { - -ms-flex-direction: column; - flex-direction: column; } - .large-flex-dir-column-reverse { - -ms-flex-direction: column-reverse; - flex-direction: column-reverse; } } + .column-block { + margin-bottom: 1.875rem; } + .column-block > :last-child { + margin-bottom: 0; } } div, dl, @@ -2219,74 +1309,74 @@ small { font-size: 80%; line-height: inherit; } -h1, .h1, -h2, .h2, -h3, .h3, -h4, .h4, -h5, .h5, -h6, .h6 { +h1, +h2, +h3, +h4, +h5, +h6 { font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-style: normal; font-weight: normal; color: inherit; text-rendering: optimizeLegibility; } - h1 small, .h1 small, - h2 small, .h2 small, - h3 small, .h3 small, - h4 small, .h4 small, - h5 small, .h5 small, - h6 small, .h6 small { + h1 small, + h2 small, + h3 small, + h4 small, + h5 small, + h6 small { line-height: 0; color: #cacaca; } -h1, .h1 { +h1 { font-size: 1.5rem; line-height: 1.4; margin-top: 0; margin-bottom: 0.5rem; } -h2, .h2 { +h2 { font-size: 1.25rem; line-height: 1.4; margin-top: 0; margin-bottom: 0.5rem; } -h3, .h3 { +h3 { font-size: 1.1875rem; line-height: 1.4; margin-top: 0; margin-bottom: 0.5rem; } -h4, .h4 { +h4 { font-size: 1.125rem; line-height: 1.4; margin-top: 0; margin-bottom: 0.5rem; } -h5, .h5 { +h5 { font-size: 1.0625rem; line-height: 1.4; margin-top: 0; margin-bottom: 0.5rem; } -h6, .h6 { +h6 { font-size: 1rem; line-height: 1.4; margin-top: 0; margin-bottom: 0.5rem; } @media print, screen and (min-width: 40em) { - h1, .h1 { + h1 { font-size: 3rem; } - h2, .h2 { + h2 { font-size: 2.5rem; } - h3, .h3 { + h3 { font-size: 1.9375rem; } - h4, .h4 { + h4 { font-size: 1.5625rem; } - h5, .h5 { + h5 { font-size: 1.25rem; } - h6, .h6 { + h6 { font-size: 1rem; } } a { @@ -2351,10 +1441,10 @@ cite { cite:before { content: "— "; } -abbr, abbr[title] { +abbr { border-bottom: 1px dotted #0a0a0a; - cursor: help; - text-decoration: none; } + color: #0a0a0a; + cursor: help; } figure { margin: 0; } @@ -2391,7 +1481,7 @@ kbd { p + .stat { margin-top: -1rem; } -ul.no-bullet, ol.no-bullet { +.no-bullet { margin-left: 0; list-style: none; } @@ -2433,7 +1523,8 @@ ul.no-bullet, ol.no-bullet { @media print { * { background: transparent !important; - box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; color: black !important; text-shadow: none !important; } .show-for-print { @@ -2483,274 +1574,13 @@ ul.no-bullet, ol.no-bullet { widows: 3; } h2, h3 { - page-break-after: avoid; } - .print-break-inside { - page-break-inside: auto; } } - -.button { - display: inline-block; - vertical-align: middle; - margin: 0 0 1rem 0; - font-family: inherit; - padding: 0.85em 1em; - -webkit-appearance: none; - border: 1px solid transparent; - border-radius: 0; - transition: background-color 0.25s ease-out, color 0.25s ease-out; - font-size: 0.9rem; - line-height: 1; - text-align: center; - cursor: pointer; - background-color: #1779ba; - color: #fefefe; } - [data-whatinput='mouse'] .button { - outline: 0; } - .button:hover, .button:focus { - background-color: #14679e; - color: #fefefe; } - .button.tiny { - font-size: 0.6rem; } - .button.small { - font-size: 0.75rem; } - .button.large { - font-size: 1.25rem; } - .button.expanded { - display: block; - width: 100%; - margin-right: 0; - margin-left: 0; } - .button.primary { - background-color: #1779ba; - color: #fefefe; } - .button.primary:hover, .button.primary:focus { - background-color: #126195; - color: #fefefe; } - .button.secondary { - background-color: #767676; - color: #fefefe; } - .button.secondary:hover, .button.secondary:focus { - background-color: #5e5e5e; - color: #fefefe; } - .button.success { - background-color: #3adb76; - color: #0a0a0a; } - .button.success:hover, .button.success:focus { - background-color: #22bb5b; - color: #0a0a0a; } - .button.warning { - background-color: #ffae00; - color: #0a0a0a; } - .button.warning:hover, .button.warning:focus { - background-color: #cc8b00; - color: #0a0a0a; } - .button.alert { - background-color: #cc4b37; - color: #fefefe; } - .button.alert:hover, .button.alert:focus { - background-color: #a53b2a; - color: #fefefe; } - .button.disabled, .button[disabled] { - opacity: 0.25; - cursor: not-allowed; } - .button.disabled, .button.disabled:hover, .button.disabled:focus, .button[disabled], .button[disabled]:hover, .button[disabled]:focus { - background-color: #1779ba; - color: #fefefe; } - .button.disabled.primary, .button[disabled].primary { - opacity: 0.25; - cursor: not-allowed; } - .button.disabled.primary, .button.disabled.primary:hover, .button.disabled.primary:focus, .button[disabled].primary, .button[disabled].primary:hover, .button[disabled].primary:focus { - background-color: #1779ba; - color: #fefefe; } - .button.disabled.secondary, .button[disabled].secondary { - opacity: 0.25; - cursor: not-allowed; } - .button.disabled.secondary, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary, .button[disabled].secondary:hover, .button[disabled].secondary:focus { - background-color: #767676; - color: #fefefe; } - .button.disabled.success, .button[disabled].success { - opacity: 0.25; - cursor: not-allowed; } - .button.disabled.success, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success, .button[disabled].success:hover, .button[disabled].success:focus { - background-color: #3adb76; - color: #0a0a0a; } - .button.disabled.warning, .button[disabled].warning { - opacity: 0.25; - cursor: not-allowed; } - .button.disabled.warning, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning, .button[disabled].warning:hover, .button[disabled].warning:focus { - background-color: #ffae00; - color: #0a0a0a; } - .button.disabled.alert, .button[disabled].alert { - opacity: 0.25; - cursor: not-allowed; } - .button.disabled.alert, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert, .button[disabled].alert:hover, .button[disabled].alert:focus { - background-color: #cc4b37; - color: #fefefe; } - .button.hollow { - border: 1px solid #1779ba; - color: #1779ba; } - .button.hollow, .button.hollow:hover, .button.hollow:focus { - background-color: transparent; } - .button.hollow.disabled, .button.hollow.disabled:hover, .button.hollow.disabled:focus, .button.hollow[disabled], .button.hollow[disabled]:hover, .button.hollow[disabled]:focus { - background-color: transparent; } - .button.hollow:hover, .button.hollow:focus { - border-color: #0c3d5d; - color: #0c3d5d; } - .button.hollow:hover.disabled, .button.hollow:hover[disabled], .button.hollow:focus.disabled, .button.hollow:focus[disabled] { - border: 1px solid #1779ba; - color: #1779ba; } - .button.hollow.primary { - border: 1px solid #1779ba; - color: #1779ba; } - .button.hollow.primary:hover, .button.hollow.primary:focus { - border-color: #0c3d5d; - color: #0c3d5d; } - .button.hollow.primary:hover.disabled, .button.hollow.primary:hover[disabled], .button.hollow.primary:focus.disabled, .button.hollow.primary:focus[disabled] { - border: 1px solid #1779ba; - color: #1779ba; } - .button.hollow.secondary { - border: 1px solid #767676; - color: #767676; } - .button.hollow.secondary:hover, .button.hollow.secondary:focus { - border-color: #3b3b3b; - color: #3b3b3b; } - .button.hollow.secondary:hover.disabled, .button.hollow.secondary:hover[disabled], .button.hollow.secondary:focus.disabled, .button.hollow.secondary:focus[disabled] { - border: 1px solid #767676; - color: #767676; } - .button.hollow.success { - border: 1px solid #3adb76; - color: #3adb76; } - .button.hollow.success:hover, .button.hollow.success:focus { - border-color: #157539; - color: #157539; } - .button.hollow.success:hover.disabled, .button.hollow.success:hover[disabled], .button.hollow.success:focus.disabled, .button.hollow.success:focus[disabled] { - border: 1px solid #3adb76; - color: #3adb76; } - .button.hollow.warning { - border: 1px solid #ffae00; - color: #ffae00; } - .button.hollow.warning:hover, .button.hollow.warning:focus { - border-color: #805700; - color: #805700; } - .button.hollow.warning:hover.disabled, .button.hollow.warning:hover[disabled], .button.hollow.warning:focus.disabled, .button.hollow.warning:focus[disabled] { - border: 1px solid #ffae00; - color: #ffae00; } - .button.hollow.alert { - border: 1px solid #cc4b37; - color: #cc4b37; } - .button.hollow.alert:hover, .button.hollow.alert:focus { - border-color: #67251a; - color: #67251a; } - .button.hollow.alert:hover.disabled, .button.hollow.alert:hover[disabled], .button.hollow.alert:focus.disabled, .button.hollow.alert:focus[disabled] { - border: 1px solid #cc4b37; - color: #cc4b37; } - .button.clear { - border: 1px solid #1779ba; - color: #1779ba; } - .button.clear, .button.clear:hover, .button.clear:focus { - background-color: transparent; } - .button.clear.disabled, .button.clear.disabled:hover, .button.clear.disabled:focus, .button.clear[disabled], .button.clear[disabled]:hover, .button.clear[disabled]:focus { - background-color: transparent; } - .button.clear:hover, .button.clear:focus { - border-color: #0c3d5d; - color: #0c3d5d; } - .button.clear:hover.disabled, .button.clear:hover[disabled], .button.clear:focus.disabled, .button.clear:focus[disabled] { - border: 1px solid #1779ba; - color: #1779ba; } - .button.clear, .button.clear.disabled, .button.clear[disabled], .button.clear:hover, .button.clear:hover.disabled, .button.clear:hover[disabled], .button.clear:focus, .button.clear:focus.disabled, .button.clear:focus[disabled] { - border-color: transparent; } - .button.clear.primary { - border: 1px solid #1779ba; - color: #1779ba; } - .button.clear.primary:hover, .button.clear.primary:focus { - border-color: #0c3d5d; - color: #0c3d5d; } - .button.clear.primary:hover.disabled, .button.clear.primary:hover[disabled], .button.clear.primary:focus.disabled, .button.clear.primary:focus[disabled] { - border: 1px solid #1779ba; - color: #1779ba; } - .button.clear.primary, .button.clear.primary.disabled, .button.clear.primary[disabled], .button.clear.primary:hover, .button.clear.primary:hover.disabled, .button.clear.primary:hover[disabled], .button.clear.primary:focus, .button.clear.primary:focus.disabled, .button.clear.primary:focus[disabled] { - border-color: transparent; } - .button.clear.secondary { - border: 1px solid #767676; - color: #767676; } - .button.clear.secondary:hover, .button.clear.secondary:focus { - border-color: #3b3b3b; - color: #3b3b3b; } - .button.clear.secondary:hover.disabled, .button.clear.secondary:hover[disabled], .button.clear.secondary:focus.disabled, .button.clear.secondary:focus[disabled] { - border: 1px solid #767676; - color: #767676; } - .button.clear.secondary, .button.clear.secondary.disabled, .button.clear.secondary[disabled], .button.clear.secondary:hover, .button.clear.secondary:hover.disabled, .button.clear.secondary:hover[disabled], .button.clear.secondary:focus, .button.clear.secondary:focus.disabled, .button.clear.secondary:focus[disabled] { - border-color: transparent; } - .button.clear.success { - border: 1px solid #3adb76; - color: #3adb76; } - .button.clear.success:hover, .button.clear.success:focus { - border-color: #157539; - color: #157539; } - .button.clear.success:hover.disabled, .button.clear.success:hover[disabled], .button.clear.success:focus.disabled, .button.clear.success:focus[disabled] { - border: 1px solid #3adb76; - color: #3adb76; } - .button.clear.success, .button.clear.success.disabled, .button.clear.success[disabled], .button.clear.success:hover, .button.clear.success:hover.disabled, .button.clear.success:hover[disabled], .button.clear.success:focus, .button.clear.success:focus.disabled, .button.clear.success:focus[disabled] { - border-color: transparent; } - .button.clear.warning { - border: 1px solid #ffae00; - color: #ffae00; } - .button.clear.warning:hover, .button.clear.warning:focus { - border-color: #805700; - color: #805700; } - .button.clear.warning:hover.disabled, .button.clear.warning:hover[disabled], .button.clear.warning:focus.disabled, .button.clear.warning:focus[disabled] { - border: 1px solid #ffae00; - color: #ffae00; } - .button.clear.warning, .button.clear.warning.disabled, .button.clear.warning[disabled], .button.clear.warning:hover, .button.clear.warning:hover.disabled, .button.clear.warning:hover[disabled], .button.clear.warning:focus, .button.clear.warning:focus.disabled, .button.clear.warning:focus[disabled] { - border-color: transparent; } - .button.clear.alert { - border: 1px solid #cc4b37; - color: #cc4b37; } - .button.clear.alert:hover, .button.clear.alert:focus { - border-color: #67251a; - color: #67251a; } - .button.clear.alert:hover.disabled, .button.clear.alert:hover[disabled], .button.clear.alert:focus.disabled, .button.clear.alert:focus[disabled] { - border: 1px solid #cc4b37; - color: #cc4b37; } - .button.clear.alert, .button.clear.alert.disabled, .button.clear.alert[disabled], .button.clear.alert:hover, .button.clear.alert:hover.disabled, .button.clear.alert:hover[disabled], .button.clear.alert:focus, .button.clear.alert:focus.disabled, .button.clear.alert:focus[disabled] { - border-color: transparent; } - .button.dropdown::after { - display: block; - width: 0; - height: 0; - border: inset 0.4em; - content: ''; - border-bottom-width: 0; - border-top-style: solid; - border-color: #fefefe transparent transparent; - position: relative; - top: 0.4em; - display: inline-block; - float: right; - margin-left: 1em; } - .button.dropdown.hollow::after { - border-top-color: #1779ba; } - .button.dropdown.hollow.primary::after { - border-top-color: #1779ba; } - .button.dropdown.hollow.secondary::after { - border-top-color: #767676; } - .button.dropdown.hollow.success::after { - border-top-color: #3adb76; } - .button.dropdown.hollow.warning::after { - border-top-color: #ffae00; } - .button.dropdown.hollow.alert::after { - border-top-color: #cc4b37; } - .button.arrow-only::after { - top: -0.1em; - float: none; - margin-left: 0; } - -a.button:hover, a.button:focus { - text-decoration: none; } + page-break-after: avoid; } } [type='text'], [type='password'], [type='date'], [type='datetime'], [type='datetime-local'], [type='month'], [type='week'], [type='email'], [type='number'], [type='search'], [type='tel'], [type='time'], [type='url'], [type='color'], textarea { display: block; - box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; width: 100%; height: 2.4375rem; margin: 0 0 1rem; @@ -2758,13 +1588,16 @@ textarea { border: 1px solid #cacaca; border-radius: 0; background-color: #fefefe; - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + -webkit-box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); font-family: inherit; font-size: 1rem; font-weight: normal; - line-height: 1.5; color: #0a0a0a; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; -webkit-appearance: none; -moz-appearance: none; appearance: none; } @@ -2773,8 +1606,12 @@ textarea { outline: none; border: 1px solid #8a8a8a; background-color: #fefefe; - box-shadow: 0 0 5px #cacaca; - transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + -webkit-box-shadow: 0 0 5px #cacaca; + box-shadow: 0 0 5px #cacaca; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } textarea { max-width: 100%; } @@ -2811,7 +1648,8 @@ textarea[readonly] { border-radius: 0; } input[type='search'] { - box-sizing: border-box; } + -webkit-box-sizing: border-box; + box-sizing: border-box; } [type='file'], [type='checkbox'], @@ -2854,12 +1692,9 @@ label { color: #0a0a0a; } .input-group { - display: -ms-flexbox; - display: flex; + display: table; width: 100%; - margin-bottom: 1rem; - -ms-flex-align: stretch; - align-items: stretch; } + margin-bottom: 1rem; } .input-group > :first-child { border-radius: 0 0 0 0; } .input-group > :last-child > * { @@ -2870,7 +1705,9 @@ label { .input-group-button button, .input-group-button label { margin: 0; - white-space: nowrap; } + white-space: nowrap; + display: table-cell; + vertical-align: middle; } .input-group-label { padding: 0 1rem; @@ -2879,12 +1716,8 @@ label { color: #0a0a0a; text-align: center; white-space: nowrap; - display: -ms-flexbox; - display: flex; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -ms-flex-align: center; - align-items: center; } + width: 1%; + height: 100%; } .input-group-label:first-child { border-right: 0; } .input-group-label:last-child { @@ -2892,31 +1725,26 @@ label { .input-group-field { border-radius: 0; - -ms-flex: 1 1 0px; - flex: 1 1 0px; - height: auto; - min-width: 0; } + height: 2.5rem; } .input-group-button { padding-top: 0; padding-bottom: 0; text-align: center; - display: -ms-flexbox; - display: flex; - -ms-flex: 0 0 auto; - flex: 0 0 auto; } + width: 1%; + height: 100%; } .input-group-button a, .input-group-button input, .input-group-button button, .input-group-button label { - height: auto; - -ms-flex-item-align: stretch; - -ms-grid-row-align: stretch; - align-self: stretch; + height: 2.5rem; padding-top: 0; padding-bottom: 0; font-size: 1rem; } +.input-group .input-group-button { + display: table-cell; } + fieldset { margin: 0; padding: 0; @@ -2933,7 +1761,8 @@ legend { .fieldset legend { margin: 0; margin-left: -0.1875rem; - padding: 0 0.1875rem; } + padding: 0 0.1875rem; + background: #fefefe; } select { height: 2.4375rem; @@ -2947,16 +1776,20 @@ select { background-color: #fefefe; font-family: inherit; font-size: 1rem; - font-weight: normal; - line-height: 1.5; + line-height: normal; color: #0a0a0a; background-image: url("data:image/svg+xml;utf8,"); - background-origin: content-box; + -webkit-background-origin: content-box; + background-origin: content-box; background-position: right -1rem center; background-repeat: no-repeat; - background-size: 9px 6px; + -webkit-background-size: 9px 6px; + background-size: 9px 6px; padding-right: 1.5rem; - transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } @media screen and (min-width: 0\0) { select { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg=="); } } @@ -2964,8 +1797,12 @@ select { outline: none; border: 1px solid #8a8a8a; background-color: #fefefe; - box-shadow: 0 0 5px #cacaca; - transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + -webkit-box-shadow: 0 0 5px #cacaca; + box-shadow: 0 0 5px #cacaca; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } select:disabled { background-color: #e6e6e6; cursor: not-allowed; } @@ -3000,12 +1837,165 @@ select { .form-error.is-visible { display: block; } +.button { + display: inline-block; + vertical-align: middle; + margin: 0 0 1rem 0; + padding: 0.85em 1em; + -webkit-appearance: none; + border: 1px solid transparent; + border-radius: 0; + -webkit-transition: background-color 0.25s ease-out, color 0.25s ease-out; + transition: background-color 0.25s ease-out, color 0.25s ease-out; + font-size: 0.9rem; + line-height: 1; + text-align: center; + cursor: pointer; + background-color: #1779ba; + color: #fefefe; } + [data-whatinput='mouse'] .button { + outline: 0; } + .button:hover, .button:focus { + background-color: #14679e; + color: #fefefe; } + .button.tiny { + font-size: 0.6rem; } + .button.small { + font-size: 0.75rem; } + .button.large { + font-size: 1.25rem; } + .button.expanded { + display: block; + width: 100%; + margin-right: 0; + margin-left: 0; } + .button.primary { + background-color: #1779ba; + color: #fefefe; } + .button.primary:hover, .button.primary:focus { + background-color: #126195; + color: #fefefe; } + .button.secondary { + background-color: #767676; + color: #fefefe; } + .button.secondary:hover, .button.secondary:focus { + background-color: #5e5e5e; + color: #fefefe; } + .button.success { + background-color: #3adb76; + color: #0a0a0a; } + .button.success:hover, .button.success:focus { + background-color: #22bb5b; + color: #0a0a0a; } + .button.warning { + background-color: #ffae00; + color: #0a0a0a; } + .button.warning:hover, .button.warning:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button.alert { + background-color: #cc4b37; + color: #fefefe; } + .button.alert:hover, .button.alert:focus { + background-color: #a53b2a; + color: #fefefe; } + .button.hollow { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow, .button.hollow:hover, .button.hollow:focus { + background-color: transparent; } + .button.hollow:hover, .button.hollow:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow.primary { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow.primary:hover, .button.hollow.primary:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow.secondary { + border: 1px solid #767676; + color: #767676; } + .button.hollow.secondary:hover, .button.hollow.secondary:focus { + border-color: #3b3b3b; + color: #3b3b3b; } + .button.hollow.success { + border: 1px solid #3adb76; + color: #3adb76; } + .button.hollow.success:hover, .button.hollow.success:focus { + border-color: #157539; + color: #157539; } + .button.hollow.warning { + border: 1px solid #ffae00; + color: #ffae00; } + .button.hollow.warning:hover, .button.hollow.warning:focus { + border-color: #805700; + color: #805700; } + .button.hollow.alert { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button.hollow.alert:hover, .button.hollow.alert:focus { + border-color: #67251a; + color: #67251a; } + .button.disabled, .button[disabled] { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled, .button.disabled:hover, .button.disabled:focus, .button[disabled], .button[disabled]:hover, .button[disabled]:focus { + background-color: #1779ba; + color: #fefefe; } + .button.disabled.primary, .button[disabled].primary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.primary, .button.disabled.primary:hover, .button.disabled.primary:focus, .button[disabled].primary, .button[disabled].primary:hover, .button[disabled].primary:focus { + background-color: #1779ba; + color: #fefefe; } + .button.disabled.secondary, .button[disabled].secondary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.secondary, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #767676; + color: #fefefe; } + .button.disabled.success, .button[disabled].success { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.success, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #3adb76; + color: #0a0a0a; } + .button.disabled.warning, .button[disabled].warning { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.warning, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #ffae00; + color: #0a0a0a; } + .button.disabled.alert, .button[disabled].alert { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.alert, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #cc4b37; + color: #fefefe; } + .button.dropdown::after { + display: block; + width: 0; + height: 0; + border: inset 0.4em; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #fefefe transparent transparent; + position: relative; + top: 0.4em; + display: inline-block; + float: right; + margin-left: 1em; } + .button.arrow-only::after { + top: -0.1em; + float: none; + margin-left: 0; } + .accordion { margin-left: 0; background: #fefefe; list-style-type: none; } - .accordion[disabled] .accordion-title { - cursor: not-allowed; } .accordion-item:first-child > :first-child { border-radius: 0 0 0 0; } @@ -3046,26 +2036,9 @@ select { :last-child > .accordion-content:last-child { border-bottom: 1px solid #e6e6e6; } -.accordion-menu li { - width: 100%; } - -.accordion-menu a { - padding: 0.7rem 1rem; } - -.accordion-menu .is-accordion-submenu a { - padding: 0.7rem 1rem; } - -.accordion-menu .nested.is-accordion-submenu { - margin-right: 0; - margin-left: 1rem; } - -.accordion-menu.align-right .nested.is-accordion-submenu { - margin-right: 1rem; - margin-left: 0; } - -.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a { +.is-accordion-submenu-parent > a { position: relative; } - .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a::after { + .is-accordion-submenu-parent > a::after { display: block; width: 0; height: 0; @@ -3079,63 +2052,13 @@ select { margin-top: -3px; right: 1rem; } -.accordion-menu.align-left .is-accordion-submenu-parent > a::after { - left: auto; - right: 1rem; } - -.accordion-menu.align-right .is-accordion-submenu-parent > a::after { - right: auto; - left: 1rem; } - -.accordion-menu .is-accordion-submenu-parent[aria-expanded='true'] > a::after { - -ms-transform: rotate(180deg); - transform: rotate(180deg); - -ms-transform-origin: 50% 50%; - transform-origin: 50% 50%; } - -.is-accordion-submenu-parent { - position: relative; } - -.has-submenu-toggle > a { - margin-right: 40px; } - -.submenu-toggle { - position: absolute; - top: 0; - right: 0; - cursor: pointer; - width: 40px; - height: 40px; } - .submenu-toggle::after { - display: block; - width: 0; - height: 0; - border: inset 6px; - content: ''; - border-bottom-width: 0; - border-top-style: solid; - border-color: #1779ba transparent transparent; - top: 0; - bottom: 0; - margin: auto; } - -.submenu-toggle[aria-expanded='true']::after { - -ms-transform: scaleY(-1); - transform: scaleY(-1); - -ms-transform-origin: 50% 50%; - transform-origin: 50% 50%; } - -.submenu-toggle-text { - position: absolute !important; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - -webkit-clip-path: inset(50%); - clip-path: inset(50%); - border: 0; } +.is-accordion-submenu-parent[aria-expanded='true'] > a::after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; } .badge { display: inline-block; @@ -3167,11 +2090,7 @@ select { list-style: none; } .breadcrumbs::before, .breadcrumbs::after { display: table; - content: ' '; - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-order: 1; - order: 1; } + content: ' '; } .breadcrumbs::after { clear: both; } .breadcrumbs li { @@ -3182,6 +2101,7 @@ select { text-transform: uppercase; } .breadcrumbs li:not(:last-child)::after { position: relative; + top: 1px; margin: 0 0.75rem; opacity: 1; content: "/"; @@ -3196,28 +2116,17 @@ select { .button-group { margin-bottom: 1rem; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-align: stretch; - align-items: stretch; } + font-size: 0; } .button-group::before, .button-group::after { display: table; - content: ' '; - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-order: 1; - order: 1; } + content: ' '; } .button-group::after { clear: both; } .button-group .button { margin: 0; margin-right: 1px; margin-bottom: 1px; - font-size: 0.9rem; - -ms-flex: 0 0 auto; - flex: 0 0 auto; } + font-size: 0.9rem; } .button-group .button:last-child { margin-right: 0; } .button-group.tiny .button { @@ -3226,9 +2135,42 @@ select { font-size: 0.75rem; } .button-group.large .button { font-size: 1.25rem; } - .button-group.expanded .button { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } + .button-group.expanded { + margin-right: -1px; } + .button-group.expanded::before, .button-group.expanded::after { + display: none; } + .button-group.expanded .button:first-child:last-child { + width: 100%; } + .button-group.expanded .button:first-child:nth-last-child(2), .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button { + display: inline-block; + width: calc(50% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(2):last-child, .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(3), .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button { + display: inline-block; + width: calc(33.33333% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(3):last-child, .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(4), .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button { + display: inline-block; + width: calc(25% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(4):last-child, .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(5), .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button { + display: inline-block; + width: calc(20% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(5):last-child, .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(6), .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button { + display: inline-block; + width: calc(16.66667% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(6):last-child, .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child { + margin-right: -6px; } .button-group.primary .button { background-color: #1779ba; color: #fefefe; } @@ -3259,23 +2201,17 @@ select { .button-group.alert .button:hover, .button-group.alert .button:focus { background-color: #a53b2a; color: #fefefe; } - .button-group.stacked, .button-group.stacked-for-small, .button-group.stacked-for-medium { - -ms-flex-wrap: wrap; - flex-wrap: wrap; } - .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button { - -ms-flex: 0 0 100%; - flex: 0 0 100%; } - .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child { - margin-bottom: 0; } + .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button { + width: 100%; } + .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child { + margin-bottom: 0; } @media print, screen and (min-width: 40em) { .button-group.stacked-for-small .button { - -ms-flex: 1 1 0px; - flex: 1 1 0px; + width: auto; margin-bottom: 0; } } @media print, screen and (min-width: 64em) { .button-group.stacked-for-medium .button { - -ms-flex: 1 1 0px; - flex: 1 1 0px; + width: auto; margin-bottom: 0; } } @media screen and (max-width: 39.9375em) { .button-group.stacked-for-small.expanded { @@ -3284,43 +2220,6 @@ select { display: block; margin-right: 0; } } -.card { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-positive: 1; - flex-grow: 1; - margin-bottom: 1rem; - border: 1px solid #e6e6e6; - border-radius: 0; - background: #fefefe; - box-shadow: none; - overflow: hidden; - color: #0a0a0a; } - .card > :last-child { - margin-bottom: 0; } - -.card-divider { - -ms-flex: 0 1 auto; - flex: 0 1 auto; - display: -ms-flexbox; - display: flex; - padding: 1rem; - background: #e6e6e6; } - .card-divider > :last-child { - margin-bottom: 0; } - -.card-section { - -ms-flex: 1 0 auto; - flex: 1 0 auto; - padding: 1rem; } - .card-section > :last-child { - margin-bottom: 0; } - -.card-image { - min-height: 1px; } - .callout { position: relative; margin: 0 0 1rem 0; @@ -3359,6 +2258,29 @@ select { padding-bottom: 3rem; padding-left: 3rem; } +.card { + margin-bottom: 1rem; + border: 1px solid #e6e6e6; + border-radius: 0; + background: #fefefe; + -webkit-box-shadow: none; + box-shadow: none; + overflow: hidden; + color: #0a0a0a; } + .card > :last-child { + margin-bottom: 0; } + +.card-divider { + padding: 1rem; + background: #e6e6e6; } + .card-divider > :last-child { + margin-bottom: 0; } + +.card-section { + padding: 1rem; } + .card-section > :last-child { + margin-bottom: 0; } + .close-button { position: absolute; color: #8a8a8a; @@ -3379,178 +2301,120 @@ select { line-height: 1; } .menu { - padding: 0; margin: 0; - list-style: none; - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } - [data-whatinput='mouse'] .menu li { - outline: 0; } - .menu a, - .menu .button { - line-height: 1; - text-decoration: none; + list-style-type: none; } + .menu > li { + display: table-cell; + vertical-align: middle; } + [data-whatinput='mouse'] .menu > li { + outline: 0; } + .menu > li > a { display: block; - padding: 0.7rem 1rem; } + padding: 0.7rem 1rem; + line-height: 1; } .menu input, .menu select, .menu a, .menu button { margin-bottom: 0; } - .menu input { + .menu > li > a img, + .menu > li > a i, + .menu > li > a svg { + vertical-align: middle; } + .menu > li > a img + span, + .menu > li > a i + span, + .menu > li > a svg + span { + vertical-align: middle; } + .menu > li > a img, + .menu > li > a i, + .menu > li > a svg { + margin-right: 0.25rem; display: inline-block; } - .menu, .menu.horizontal { - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-direction: row; - flex-direction: row; } - .menu.vertical { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-direction: column; - flex-direction: column; } - .menu.expanded li { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } - .menu.simple { - -ms-flex-align: center; - align-items: center; } - .menu.simple li + li { - margin-left: 1rem; } - .menu.simple a { - padding: 0; } + .menu > li, .menu.horizontal > li { + display: table-cell; } + .menu.expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.expanded > li:first-child:last-child { + width: 100%; } + .menu.vertical > li { + display: block; } @media print, screen and (min-width: 40em) { - .menu.medium-horizontal { - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-direction: row; - flex-direction: row; } - .menu.medium-vertical { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-direction: column; - flex-direction: column; } - .menu.medium-expanded li { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } - .menu.medium-simple li { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } } + .menu.medium-horizontal > li { + display: table-cell; } + .menu.medium-expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.medium-expanded > li:first-child:last-child { + width: 100%; } + .menu.medium-vertical > li { + display: block; } } @media print, screen and (min-width: 64em) { - .menu.large-horizontal { - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-direction: row; - flex-direction: row; } - .menu.large-vertical { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-direction: column; - flex-direction: column; } - .menu.large-expanded li { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } - .menu.large-simple li { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } } - .menu.nested { + .menu.large-horizontal > li { + display: table-cell; } + .menu.large-expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.large-expanded > li:first-child:last-child { + width: 100%; } + .menu.large-vertical > li { + display: block; } } + .menu.simple li { + display: inline-block; + vertical-align: top; + line-height: 1; } + .menu.simple a { + padding: 0; } + .menu.simple li { + margin-left: 0; + margin-right: 1rem; } + .menu.simple.align-right li { margin-right: 0; margin-left: 1rem; } - .menu.icons a { - display: -ms-flexbox; - display: flex; } - .menu.icon-top a, .menu.icon-right a, .menu.icon-bottom a, .menu.icon-left a { - display: -ms-flexbox; - display: flex; } - .menu.icon-left li a { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; } - .menu.icon-left li a img, - .menu.icon-left li a i, - .menu.icon-left li a svg { - margin-right: 0.25rem; } - .menu.icon-right li a { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; } - .menu.icon-right li a img, - .menu.icon-right li a i, - .menu.icon-right li a svg { - margin-left: 0.25rem; } - .menu.icon-top li a { - -ms-flex-flow: column nowrap; - flex-flow: column nowrap; } - .menu.icon-top li a img, - .menu.icon-top li a i, - .menu.icon-top li a svg { - -ms-flex-item-align: stretch; - -ms-grid-row-align: stretch; - align-self: stretch; - margin-bottom: 0.25rem; - text-align: center; } - .menu.icon-bottom li a { - -ms-flex-flow: column nowrap; - flex-flow: column nowrap; } - .menu.icon-bottom li a img, - .menu.icon-bottom li a i, - .menu.icon-bottom li a svg { - -ms-flex-item-align: stretch; - -ms-grid-row-align: stretch; - align-self: stretch; - margin-bottom: 0.25rem; - text-align: center; } - .menu .is-active > a { - background: #1779ba; - color: #fefefe; } + .menu.align-right::before, .menu.align-right::after { + display: table; + content: ' '; } + .menu.align-right::after { + clear: both; } + .menu.align-right > li { + float: right; } + .menu.icon-top > li > a { + text-align: center; } + .menu.icon-top > li > a img, + .menu.icon-top > li > a i, + .menu.icon-top > li > a svg { + display: block; + margin: 0 auto 0.25rem; } + .menu.icon-top.vertical a > span { + margin: auto; } + .menu.nested { + margin-left: 1rem; } .menu .active > a { background: #1779ba; color: #fefefe; } - .menu.align-left { - -ms-flex-pack: start; - justify-content: flex-start; } - .menu.align-right li { - display: -ms-flexbox; - display: flex; - -ms-flex-pack: end; - justify-content: flex-end; } - .menu.align-right li .submenu li { - -ms-flex-pack: start; - justify-content: flex-start; } - .menu.align-right.vertical li { - display: block; - text-align: right; } - .menu.align-right.vertical li .submenu li { - text-align: right; } - .menu.align-right .nested { - margin-right: 1rem; - margin-left: 0; } - .menu.align-center li { - display: -ms-flexbox; - display: flex; - -ms-flex-pack: center; - justify-content: center; } - .menu.align-center li .submenu li { - -ms-flex-pack: start; - justify-content: flex-start; } - .menu .menu-text { - padding: 0.7rem 1rem; - font-weight: bold; - line-height: 1; - color: inherit; } - -.menu-centered > .menu { - -ms-flex-pack: center; - justify-content: center; } - .menu-centered > .menu li { - display: -ms-flexbox; - display: flex; - -ms-flex-pack: center; - justify-content: center; } - .menu-centered > .menu li .submenu li { - -ms-flex-pack: start; - justify-content: flex-start; } + .menu.menu-bordered li { + border: 1px solid #e6e6e6; } + .menu.menu-bordered li:not(:first-child) { + border-top: 0; } + .menu.menu-hover li:hover { + background-color: #e6e6e6; } + +.menu-text { + padding-top: 0; + padding-bottom: 0; + padding: 0.7rem 1rem; + font-weight: bold; + line-height: 1; + color: inherit; } + +.menu-centered { + text-align: center; } + .menu-centered > .menu { + display: inline-block; + vertical-align: top; } .no-js [data-responsive-menu] ul { display: none; } @@ -3570,11 +2434,13 @@ select { width: 100%; height: 2px; background: #fefefe; - box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + -webkit-box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; content: ''; } .menu-icon:hover::after { background: #cacaca; - box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; } + -webkit-box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; + box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; } .menu-icon.dark { position: relative; @@ -3591,11 +2457,13 @@ select { width: 100%; height: 2px; background: #0a0a0a; - box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + -webkit-box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; content: ''; } .menu-icon.dark:hover::after { background: #8a8a8a; - box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } + -webkit-box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; + box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } .is-drilldown { position: relative; @@ -3603,45 +2471,37 @@ select { .is-drilldown li { display: block; } .is-drilldown.animate-height { + -webkit-transition: height 0.5s; transition: height 0.5s; } -.drilldown a { - padding: 0.7rem 1rem; - background: #fefefe; } - -.drilldown .is-drilldown-submenu { +.is-drilldown-submenu { position: absolute; top: 0; left: 100%; z-index: -1; width: 100%; background: #fefefe; - transition: transform 0.15s linear; } - .drilldown .is-drilldown-submenu.is-active { + -webkit-transition: -webkit-transform 0.15s linear; + transition: -webkit-transform 0.15s linear; + transition: transform 0.15s linear; + transition: transform 0.15s linear, -webkit-transform 0.15s linear; } + .is-drilldown-submenu.is-active { z-index: 1; display: block; - -ms-transform: translateX(-100%); - transform: translateX(-100%); } - .drilldown .is-drilldown-submenu.is-closing { - -ms-transform: translateX(100%); - transform: translateX(100%); } - .drilldown .is-drilldown-submenu a { - padding: 0.7rem 1rem; } - -.drilldown .nested.is-drilldown-submenu { - margin-right: 0; - margin-left: 0; } - -.drilldown .drilldown-submenu-cover-previous { + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + transform: translateX(-100%); } + .is-drilldown-submenu.is-closing { + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); } + +.drilldown-submenu-cover-previous { min-height: 100%; } -.drilldown .is-drilldown-submenu-parent > a { +.is-drilldown-submenu-parent > a { position: relative; } - .drilldown .is-drilldown-submenu-parent > a::after { - position: absolute; - top: 50%; - margin-top: -6px; - right: 1rem; + .is-drilldown-submenu-parent > a::after { display: block; width: 0; height: 0; @@ -3649,33 +2509,13 @@ select { content: ''; border-right-width: 0; border-left-style: solid; - border-color: transparent transparent transparent #1779ba; } - -.drilldown.align-left .is-drilldown-submenu-parent > a::after { - left: auto; - right: 1rem; - display: block; - width: 0; - height: 0; - border: inset 6px; - content: ''; - border-right-width: 0; - border-left-style: solid; - border-color: transparent transparent transparent #1779ba; } - -.drilldown.align-right .is-drilldown-submenu-parent > a::after { - right: auto; - left: 1rem; - display: block; - width: 0; - height: 0; - border: inset 6px; - content: ''; - border-left-width: 0; - border-right-style: solid; - border-color: transparent #1779ba transparent transparent; } + border-color: transparent transparent transparent #1779ba; + position: absolute; + top: 50%; + margin-top: -6px; + right: 1rem; } -.drilldown .js-drilldown-back > a::before { +.js-drilldown-back > a::before { display: block; width: 0; height: 0; @@ -3693,19 +2533,16 @@ select { .dropdown-pane { position: absolute; z-index: 10; + display: block; width: 300px; padding: 1rem; visibility: hidden; - display: none; border: 1px solid #cacaca; border-radius: 0; background-color: #fefefe; font-size: 1rem; } - .dropdown-pane.is-opening { - display: block; } .dropdown-pane.is-open { - visibility: visible; - display: block; } + visibility: visible; } .dropdown-pane.tiny { width: 100px; } @@ -3740,32 +2577,20 @@ select { border-top-style: solid; border-color: #1779ba transparent transparent; right: 5px; - left: auto; margin-top: -3px; } -.dropdown.menu a { - padding: 0.7rem 1rem; } - [data-whatinput='mouse'] .dropdown.menu a { - outline: 0; } - -.dropdown.menu .is-active > a { - background: transparent; - color: #1779ba; } +[data-whatinput='mouse'] .dropdown.menu a { + outline: 0; } .no-js .dropdown.menu ul { display: none; } -.dropdown.menu .nested.is-dropdown-submenu { - margin-right: 0; - margin-left: 0; } - .dropdown.menu.vertical > li .is-dropdown-submenu { top: 0; } .dropdown.menu.vertical > li.opens-left > .is-dropdown-submenu { right: 100%; - left: auto; - top: 0; } + left: auto; } .dropdown.menu.vertical > li.opens-right > .is-dropdown-submenu { right: auto; @@ -3775,8 +2600,6 @@ select { right: 14px; } .dropdown.menu.vertical > li.opens-left > a::after { - right: auto; - left: 5px; display: block; width: 0; height: 0; @@ -3818,22 +2641,18 @@ select { border-top-style: solid; border-color: #1779ba transparent transparent; right: 5px; - left: auto; margin-top: -3px; } .dropdown.menu.medium-vertical > li .is-dropdown-submenu { top: 0; } .dropdown.menu.medium-vertical > li.opens-left > .is-dropdown-submenu { right: 100%; - left: auto; - top: 0; } + left: auto; } .dropdown.menu.medium-vertical > li.opens-right > .is-dropdown-submenu { right: auto; left: 100%; } .dropdown.menu.medium-vertical > li > a::after { right: 14px; } .dropdown.menu.medium-vertical > li.opens-left > a::after { - right: auto; - left: 5px; display: block; width: 0; height: 0; @@ -3874,22 +2693,18 @@ select { border-top-style: solid; border-color: #1779ba transparent transparent; right: 5px; - left: auto; margin-top: -3px; } .dropdown.menu.large-vertical > li .is-dropdown-submenu { top: 0; } .dropdown.menu.large-vertical > li.opens-left > .is-dropdown-submenu { right: 100%; - left: auto; - top: 0; } + left: auto; } .dropdown.menu.large-vertical > li.opens-right > .is-dropdown-submenu { right: auto; left: 100%; } .dropdown.menu.large-vertical > li > a::after { right: 14px; } .dropdown.menu.large-vertical > li.opens-left > a::after { - right: auto; - left: 5px; display: block; width: 0; height: 0; @@ -3924,7 +2739,6 @@ select { position: absolute; top: 50%; right: 5px; - left: auto; margin-top: -6px; } .is-dropdown-submenu-parent.opens-inner > .is-dropdown-submenu { top: 100%; @@ -3945,13 +2759,9 @@ select { min-width: 200px; border: 1px solid #cacaca; background: #fefefe; } - .dropdown .is-dropdown-submenu a { - padding: 0.7rem 1rem; } .is-dropdown-submenu .is-dropdown-submenu-parent > a::after { right: 14px; } .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after { - right: auto; - left: 5px; display: block; width: 0; height: 0; @@ -4027,39 +2837,31 @@ select { color: #fefefe; } .media-object { - display: -ms-flexbox; - display: flex; - margin-bottom: 1rem; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; } + display: block; + margin-bottom: 1rem; } .media-object img { max-width: none; } - @media screen and (max-width: 39.9375em) { - .media-object.stack-for-small { - -ms-flex-wrap: wrap; - flex-wrap: wrap; } } @media screen and (max-width: 39.9375em) { .media-object.stack-for-small .media-object-section { padding: 0; padding-bottom: 1rem; - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - max-width: 100%; } + display: block; } .media-object.stack-for-small .media-object-section img { width: 100%; } } .media-object-section { - -ms-flex: 0 1 auto; - flex: 0 1 auto; } + display: table-cell; + vertical-align: top; } .media-object-section:first-child { padding-right: 1rem; } .media-object-section:last-child:not(:nth-child(2)) { padding-left: 1rem; } .media-object-section > :last-child { margin-bottom: 0; } - .media-object-section.main-section { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } + .media-object-section.middle { + vertical-align: middle; } + .media-object-section.bottom { + vertical-align: bottom; } .is-off-canvas-open { overflow: hidden; } @@ -4068,9 +2870,9 @@ select { position: absolute; top: 0; left: 0; - z-index: 11; width: 100%; height: 100%; + -webkit-transition: opacity 0.5s ease, visibility 0.5s ease; transition: opacity 0.5s ease, visibility 0.5s ease; background: rgba(254, 254, 254, 0.25); opacity: 0; @@ -4092,295 +2894,224 @@ select { .off-canvas { position: fixed; - z-index: 12; + z-index: 1; + -webkit-transition: -webkit-transform 0.5s ease; + transition: -webkit-transform 0.5s ease; transition: transform 0.5s ease; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; -webkit-backface-visibility: hidden; backface-visibility: hidden; background: #e6e6e6; } [data-whatinput='mouse'] .off-canvas { outline: 0; } - .off-canvas.is-transition-push { - z-index: 12; } - .off-canvas.is-closed { - visibility: hidden; } .off-canvas.is-transition-overlap { - z-index: 13; } + z-index: 10; } .off-canvas.is-transition-overlap.is-open { - box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } .off-canvas.is-open { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } .off-canvas-absolute { position: absolute; - z-index: 12; + z-index: 1; + -webkit-transition: -webkit-transform 0.5s ease; + transition: -webkit-transform 0.5s ease; transition: transform 0.5s ease; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; -webkit-backface-visibility: hidden; backface-visibility: hidden; background: #e6e6e6; } [data-whatinput='mouse'] .off-canvas-absolute { outline: 0; } - .off-canvas-absolute.is-transition-push { - z-index: 12; } - .off-canvas-absolute.is-closed { - visibility: hidden; } .off-canvas-absolute.is-transition-overlap { - z-index: 13; } + z-index: 10; } .off-canvas-absolute.is-transition-overlap.is-open { - box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } .off-canvas-absolute.is-open { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } .position-left { top: 0; left: 0; - height: 100%; - overflow-y: auto; width: 250px; - -ms-transform: translateX(-250px); - transform: translateX(-250px); } - .off-canvas-content .off-canvas.position-left { - -ms-transform: translateX(-250px); - transform: translateX(-250px); } - .off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } - .off-canvas-content.is-open-left.has-transition-push { - -ms-transform: translateX(250px); - transform: translateX(250px); } - .position-left.is-transition-push { - box-shadow: inset -13px 0 20px -13px rgba(10, 10, 10, 0.25); } + height: 100%; + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); + overflow-y: auto; } + .position-left.is-open ~ .off-canvas-content { + -webkit-transform: translateX(250px); + -ms-transform: translateX(250px); + transform: translateX(250px); } + .position-left.is-transition-push::after { + position: absolute; + top: 0; + right: 0; + height: 100%; + width: 1px; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-left.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } .position-right { top: 0; right: 0; - height: 100%; - overflow-y: auto; width: 250px; - -ms-transform: translateX(250px); - transform: translateX(250px); } - .off-canvas-content .off-canvas.position-right { - -ms-transform: translateX(250px); - transform: translateX(250px); } - .off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } - .off-canvas-content.is-open-right.has-transition-push { - -ms-transform: translateX(-250px); - transform: translateX(-250px); } - .position-right.is-transition-push { - box-shadow: inset 13px 0 20px -13px rgba(10, 10, 10, 0.25); } + height: 100%; + -webkit-transform: translateX(250px); + -ms-transform: translateX(250px); + transform: translateX(250px); + overflow-y: auto; } + .position-right.is-open ~ .off-canvas-content { + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .position-right.is-transition-push::after { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 1px; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-right.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } .position-top { top: 0; left: 0; width: 100%; - overflow-x: auto; height: 250px; - -ms-transform: translateY(-250px); - transform: translateY(-250px); } - .off-canvas-content .off-canvas.position-top { - -ms-transform: translateY(-250px); - transform: translateY(-250px); } - .off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } - .off-canvas-content.is-open-top.has-transition-push { - -ms-transform: translateY(250px); - transform: translateY(250px); } - .position-top.is-transition-push { - box-shadow: inset 0 -13px 20px -13px rgba(10, 10, 10, 0.25); } + -webkit-transform: translateY(-250px); + -ms-transform: translateY(-250px); + transform: translateY(-250px); + overflow-x: auto; } + .position-top.is-open ~ .off-canvas-content { + -webkit-transform: translateY(250px); + -ms-transform: translateY(250px); + transform: translateY(250px); } + .position-top.is-transition-push::after { + position: absolute; + bottom: 0; + left: 0; + height: 1px; + width: 100%; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-top.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } .position-bottom { bottom: 0; left: 0; width: 100%; - overflow-x: auto; height: 250px; - -ms-transform: translateY(250px); - transform: translateY(250px); } - .off-canvas-content .off-canvas.position-bottom { - -ms-transform: translateY(250px); - transform: translateY(250px); } - .off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } - .off-canvas-content.is-open-bottom.has-transition-push { - -ms-transform: translateY(-250px); - transform: translateY(-250px); } - .position-bottom.is-transition-push { - box-shadow: inset 0 13px 20px -13px rgba(10, 10, 10, 0.25); } + -webkit-transform: translateY(250px); + -ms-transform: translateY(250px); + transform: translateY(250px); + overflow-x: auto; } + .position-bottom.is-open ~ .off-canvas-content { + -webkit-transform: translateY(-250px); + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .position-bottom.is-transition-push::after { + position: absolute; + top: 0; + left: 0; + height: 1px; + width: 100%; + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + content: " "; } + .position-bottom.is-transition-overlap.is-open ~ .off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; } .off-canvas-content { - -ms-transform: none; - transform: none; + -webkit-transition: -webkit-transform 0.5s ease; + transition: -webkit-transform 0.5s ease; transition: transform 0.5s ease; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; -webkit-backface-visibility: hidden; backface-visibility: hidden; } - .off-canvas-content.has-transition-push { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } - .off-canvas-content .off-canvas.is-open { - -ms-transform: translate(0, 0); - transform: translate(0, 0); } @media print, screen and (min-width: 40em) { .position-left.reveal-for-medium { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-left.reveal-for-medium .close-button { - display: none; } - .off-canvas-content .position-left.reveal-for-medium { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-left { - margin-left: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-left.reveal-for-medium ~ .off-canvas-content { margin-left: 250px; } .position-right.reveal-for-medium { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-right.reveal-for-medium .close-button { - display: none; } - .off-canvas-content .position-right.reveal-for-medium { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-right { - margin-right: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-right.reveal-for-medium ~ .off-canvas-content { margin-right: 250px; } .position-top.reveal-for-medium { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-top.reveal-for-medium .close-button { - display: none; } - .off-canvas-content .position-top.reveal-for-medium { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-top { - margin-top: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-top.reveal-for-medium ~ .off-canvas-content { margin-top: 250px; } .position-bottom.reveal-for-medium { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-bottom.reveal-for-medium .close-button { - display: none; } - .off-canvas-content .position-bottom.reveal-for-medium { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-bottom { - margin-bottom: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-bottom.reveal-for-medium ~ .off-canvas-content { margin-bottom: 250px; } } @media print, screen and (min-width: 64em) { .position-left.reveal-for-large { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-left.reveal-for-large .close-button { - display: none; } - .off-canvas-content .position-left.reveal-for-large { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-left { - margin-left: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-left.reveal-for-large ~ .off-canvas-content { margin-left: 250px; } .position-right.reveal-for-large { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-right.reveal-for-large .close-button { - display: none; } - .off-canvas-content .position-right.reveal-for-large { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-right { - margin-right: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-right.reveal-for-large ~ .off-canvas-content { margin-right: 250px; } .position-top.reveal-for-large { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-top.reveal-for-large .close-button { - display: none; } - .off-canvas-content .position-top.reveal-for-large { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-top { - margin-top: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-top.reveal-for-large ~ .off-canvas-content { margin-top: 250px; } .position-bottom.reveal-for-large { - -ms-transform: none; - transform: none; - z-index: 12; - transition: none; - visibility: visible; } - .position-bottom.reveal-for-large .close-button { - display: none; } - .off-canvas-content .position-bottom.reveal-for-large { - -ms-transform: none; - transform: none; } - .off-canvas-content.has-reveal-bottom { - margin-bottom: 250px; } + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 1; } .position-bottom.reveal-for-large ~ .off-canvas-content { margin-bottom: 250px; } } -@media print, screen and (min-width: 40em) { - .off-canvas.in-canvas-for-medium { - visibility: visible; - height: auto; - position: static; - background: inherit; - width: inherit; - overflow: inherit; - transition: inherit; } - .off-canvas.in-canvas-for-medium.position-left, .off-canvas.in-canvas-for-medium.position-right, .off-canvas.in-canvas-for-medium.position-top, .off-canvas.in-canvas-for-medium.position-bottom { - box-shadow: none; - -ms-transform: none; - transform: none; } - .off-canvas.in-canvas-for-medium .close-button { - display: none; } } - -@media print, screen and (min-width: 64em) { - .off-canvas.in-canvas-for-large { - visibility: visible; - height: auto; - position: static; - background: inherit; - width: inherit; - overflow: inherit; - transition: inherit; } - .off-canvas.in-canvas-for-large.position-left, .off-canvas.in-canvas-for-large.position-right, .off-canvas.in-canvas-for-large.position-top, .off-canvas.in-canvas-for-large.position-bottom { - box-shadow: none; - -ms-transform: none; - transform: none; } - .off-canvas.in-canvas-for-large .close-button { - display: none; } } - .orbit { position: relative; } @@ -4417,8 +3148,9 @@ select { .orbit-previous, .orbit-next { position: absolute; top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); z-index: 10; padding: 1rem; color: #fefefe; } @@ -4457,11 +3189,7 @@ select { margin-bottom: 1rem; } .pagination::before, .pagination::after { display: table; - content: ' '; - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-order: 1; - order: 1; } + content: ' '; } .pagination::after { clear: both; } .pagination li { @@ -4527,25 +3255,131 @@ select { .progress.alert .progress-meter { background-color: #cc4b37; } -.progress-meter { +.progress-meter { + position: relative; + display: block; + width: 0%; + height: 100%; + background-color: #1779ba; } + +.progress-meter-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + position: absolute; + margin: 0; + font-size: 0.75rem; + font-weight: bold; + color: #fefefe; + white-space: nowrap; } + +.slider { + position: relative; + height: 0.5rem; + margin-top: 1.25rem; + margin-bottom: 2.25rem; + background-color: #e6e6e6; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -ms-touch-action: none; + touch-action: none; } + +.slider-fill { + position: absolute; + top: 0; + left: 0; + display: inline-block; + max-width: 100%; + height: 0.5rem; + background-color: #cacaca; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } + .slider-fill.is-dragging { + -webkit-transition: all 0s linear; + transition: all 0s linear; } + +.slider-handle { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + position: absolute; + left: 0; + z-index: 1; + display: inline-block; + width: 1.4rem; + height: 1.4rem; + border-radius: 0; + background-color: #1779ba; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + -ms-touch-action: manipulation; + touch-action: manipulation; } + [data-whatinput='mouse'] .slider-handle { + outline: 0; } + .slider-handle:hover { + background-color: #14679e; } + .slider-handle.is-dragging { + -webkit-transition: all 0s linear; + transition: all 0s linear; } + +.slider.disabled, +.slider[disabled] { + opacity: 0.25; + cursor: not-allowed; } + +.slider.vertical { + display: inline-block; + width: 0.5rem; + height: 12.5rem; + margin: 0 1.25rem; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); } + .slider.vertical .slider-fill { + top: 0; + width: 0.5rem; + max-height: 100%; } + .slider.vertical .slider-handle { + position: absolute; + top: 0; + left: 50%; + width: 1.4rem; + height: 1.4rem; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + +.sticky-container { + position: relative; } + +.sticky { + position: relative; + z-index: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + +.sticky.is-stuck { + position: fixed; + z-index: 5; } + .sticky.is-stuck.is-at-top { + top: 0; } + .sticky.is-stuck.is-at-bottom { + bottom: 0; } + +.sticky.is-anchored { position: relative; - display: block; - width: 0%; - height: 100%; - background-color: #1779ba; } - -.progress-meter-text { - position: absolute; - top: 50%; - left: 50%; - -ms-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - position: absolute; - margin: 0; - font-size: 0.75rem; - font-weight: bold; - color: #fefefe; - white-space: nowrap; } + right: auto; + left: auto; } + .sticky.is-anchored.is-at-bottom { + bottom: 0; } body.is-reveal-open { overflow: hidden; } @@ -4554,7 +3388,6 @@ html.is-reveal-open, html.is-reveal-open body { min-height: 100%; overflow: hidden; - position: fixed; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; @@ -4590,7 +3423,8 @@ html.is-reveal-open body { @media print, screen and (min-width: 40em) { .reveal { min-height: 0; } } - .reveal .column { + .reveal .column, .reveal .columns, + .reveal .columns { min-width: 0; } .reveal > :last-child { margin-bottom: 0; } @@ -4598,6 +3432,11 @@ html.is-reveal-open body { .reveal { width: 600px; max-width: 75rem; } } + @media print, screen and (min-width: 40em) { + .reveal .reveal { + right: auto; + left: auto; + margin: 0 auto; } } .reveal.collapse { padding: 0; } @media print, screen and (min-width: 40em) { @@ -4638,103 +3477,6 @@ html.is-reveal-open body { .reveal.without-overlay { position: fixed; } -.slider { - position: relative; - height: 0.5rem; - margin-top: 1.25rem; - margin-bottom: 2.25rem; - background-color: #e6e6e6; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -ms-touch-action: none; - touch-action: none; } - -.slider-fill { - position: absolute; - top: 0; - left: 0; - display: inline-block; - max-width: 100%; - height: 0.5rem; - background-color: #cacaca; - transition: all 0.2s ease-in-out; } - .slider-fill.is-dragging { - transition: all 0s linear; } - -.slider-handle { - position: absolute; - top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); - left: 0; - z-index: 1; - display: inline-block; - width: 1.4rem; - height: 1.4rem; - border-radius: 0; - background-color: #1779ba; - transition: all 0.2s ease-in-out; - -ms-touch-action: manipulation; - touch-action: manipulation; } - [data-whatinput='mouse'] .slider-handle { - outline: 0; } - .slider-handle:hover { - background-color: #14679e; } - .slider-handle.is-dragging { - transition: all 0s linear; } - -.slider.disabled, -.slider[disabled] { - opacity: 0.25; - cursor: not-allowed; } - -.slider.vertical { - display: inline-block; - width: 0.5rem; - height: 12.5rem; - margin: 0 1.25rem; - -ms-transform: scale(1, -1); - transform: scale(1, -1); } - .slider.vertical .slider-fill { - top: 0; - width: 0.5rem; - max-height: 100%; } - .slider.vertical .slider-handle { - position: absolute; - top: 0; - left: 50%; - width: 1.4rem; - height: 1.4rem; - -ms-transform: translateX(-50%); - transform: translateX(-50%); } - -.sticky-container { - position: relative; } - -.sticky { - position: relative; - z-index: 0; - transform: translate3d(0, 0, 0); } - -.sticky.is-stuck { - position: fixed; - z-index: 5; - width: 100%; } - .sticky.is-stuck.is-at-top { - top: 0; } - .sticky.is-stuck.is-at-bottom { - bottom: 0; } - -.sticky.is-anchored { - position: relative; - right: auto; - left: auto; } - .sticky.is-anchored.is-at-bottom { - bottom: 0; } - .switch { height: 2rem; position: relative; @@ -4760,6 +3502,7 @@ html.is-reveal-open body { height: 2rem; border-radius: 0; background: #cacaca; + -webkit-transition: all 0.25s ease-out; transition: all 0.25s ease-out; font-weight: inherit; color: inherit; @@ -4773,9 +3516,11 @@ html.is-reveal-open body { display: block; width: 1.5rem; height: 1.5rem; - transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); border-radius: 0; background: #fefefe; + -webkit-transition: all 0.25s ease-out; transition: all 0.25s ease-out; content: ''; } input:checked ~ .switch-paddle { @@ -4788,8 +3533,9 @@ html.is-reveal-open body { .switch-active, .switch-inactive { position: absolute; top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); } + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } .switch-active { left: 8%; @@ -4845,7 +3591,6 @@ html.is-reveal-open body { left: 2.75rem; } table { - border-collapse: collapse; width: 100%; margin-bottom: 1rem; border-radius: 0; } @@ -4927,11 +3672,7 @@ table.hover:not(.unstriped) tr:nth-of-type(even):hover { list-style-type: none; } .tabs::before, .tabs::after { display: table; - content: ' '; - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-order: 1; - order: 1; } + content: ' '; } .tabs::after { clear: both; } @@ -4972,6 +3713,7 @@ table.hover:not(.unstriped) tr:nth-of-type(even):hover { border-top: 0; background: #fefefe; color: #0a0a0a; + -webkit-transition: all 0.5s ease; transition: all 0.5s ease; } .tabs-content.vertical { @@ -4981,7 +3723,7 @@ table.hover:not(.unstriped) tr:nth-of-type(even):hover { .tabs-panel { display: none; padding: 1rem; } - .tabs-panel.is-active { + .tabs-panel[aria-hidden="false"] { display: block; } .thumbnail { @@ -4990,36 +3732,40 @@ table.hover:not(.unstriped) tr:nth-of-type(even):hover { margin-bottom: 1rem; border: solid 4px #fefefe; border-radius: 0; - box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + -webkit-box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); line-height: 0; } a.thumbnail { - transition: box-shadow 200ms ease-out; } + -webkit-transition: -webkit-box-shadow 200ms ease-out; + transition: -webkit-box-shadow 200ms ease-out; + transition: box-shadow 200ms ease-out; + transition: box-shadow 200ms ease-out, -webkit-box-shadow 200ms ease-out; } a.thumbnail:hover, a.thumbnail:focus { - box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); } + -webkit-box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); + box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); } a.thumbnail image { - box-shadow: none; } + -webkit-box-shadow: none; + box-shadow: none; } .title-bar { padding: 0.5rem; background: #0a0a0a; - color: #fefefe; - display: -ms-flexbox; - display: flex; - -ms-flex-pack: start; - justify-content: flex-start; - -ms-flex-align: center; - align-items: center; } + color: #fefefe; } + .title-bar::before, .title-bar::after { + display: table; + content: ' '; } + .title-bar::after { + clear: both; } .title-bar .menu-icon { margin-left: 0.25rem; margin-right: 0.25rem; } -.title-bar-left, -.title-bar-right { - -ms-flex: 1 1 0px; - flex: 1 1 0px; } +.title-bar-left { + float: left; } .title-bar-right { + float: right; text-align: right; } .title-bar-title { @@ -5045,8 +3791,6 @@ a.thumbnail { font-size: 80%; color: #fefefe; } .tooltip::before { - position: absolute; } - .tooltip.bottom::before { display: block; width: 0; height: 0; @@ -5055,11 +3799,12 @@ a.thumbnail { border-top-width: 0; border-bottom-style: solid; border-color: transparent transparent #0a0a0a; - bottom: 100%; } - .tooltip.bottom.align-center::before { + position: absolute; + bottom: 100%; left: 50%; - -ms-transform: translateX(-50%); - transform: translateX(-50%); } + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); } .tooltip.top::before { display: block; width: 0; @@ -5071,10 +3816,6 @@ a.thumbnail { border-color: #0a0a0a transparent transparent; top: 100%; bottom: auto; } - .tooltip.top.align-center::before { - left: 50%; - -ms-transform: translateX(-50%); - transform: translateX(-50%); } .tooltip.left::before { display: block; width: 0; @@ -5084,12 +3825,12 @@ a.thumbnail { border-right-width: 0; border-left-style: solid; border-color: transparent transparent transparent #0a0a0a; - left: 100%; } - .tooltip.left.align-center::before { - bottom: auto; top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); } + bottom: auto; + left: 100%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } .tooltip.right::before { display: block; width: 0; @@ -5099,38 +3840,21 @@ a.thumbnail { border-left-width: 0; border-right-style: solid; border-color: transparent #0a0a0a transparent transparent; - right: 100%; - left: auto; } - .tooltip.right.align-center::before { - bottom: auto; top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); } - .tooltip.align-top::before { + right: 100%; bottom: auto; - top: 10%; } - .tooltip.align-bottom::before { - bottom: 10%; - top: auto; } - .tooltip.align-left::before { - left: 10%; - right: auto; } - .tooltip.align-right::before { left: auto; - right: 10%; } + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } .top-bar { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-pack: justify; - justify-content: space-between; - -ms-flex-align: center; - align-items: center; - padding: 0.5rem; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } + padding: 0.5rem; } + .top-bar::before, .top-bar::after { + display: table; + content: ' '; } + .top-bar::after { + clear: both; } .top-bar, .top-bar ul { background-color: #e6e6e6; } @@ -5144,49 +3868,32 @@ a.thumbnail { width: auto; } .top-bar .top-bar-left, .top-bar .top-bar-right { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; } + width: 100%; } @media print, screen and (min-width: 40em) { - .top-bar { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; } - .top-bar .top-bar-left { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - margin-right: auto; } - .top-bar .top-bar-right { - -ms-flex: 0 1 auto; - flex: 0 1 auto; - margin-left: auto; } } + .top-bar .top-bar-left, + .top-bar .top-bar-right { + width: auto; } } @media screen and (max-width: 63.9375em) { - .top-bar.stacked-for-medium { - -ms-flex-wrap: wrap; - flex-wrap: wrap; } - .top-bar.stacked-for-medium .top-bar-left, - .top-bar.stacked-for-medium .top-bar-right { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; } } + .top-bar.stacked-for-medium .top-bar-left, + .top-bar.stacked-for-medium .top-bar-right { + width: 100%; } } @media screen and (max-width: 74.9375em) { - .top-bar.stacked-for-large { - -ms-flex-wrap: wrap; - flex-wrap: wrap; } - .top-bar.stacked-for-large .top-bar-left, - .top-bar.stacked-for-large .top-bar-right { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; } } + .top-bar.stacked-for-large .top-bar-left, + .top-bar.stacked-for-large .top-bar-right { + width: 100%; } } .top-bar-title { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - margin: 0.5rem 1rem 0.5rem 0; } + display: inline-block; + float: left; + padding: 0.5rem 1rem 0.5rem 0; } + .top-bar-title .menu-icon { + bottom: 2px; } + +.top-bar-left { + float: left; } -.top-bar-left, .top-bar-right { - -ms-flex: 0 0 auto; - flex: 0 0 auto; } + float: right; } .hide { display: none !important; } @@ -5239,23 +3946,15 @@ a.thumbnail { position: absolute !important; width: 1px; height: 1px; - padding: 0; overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - -webkit-clip-path: inset(50%); - clip-path: inset(50%); - border: 0; } + clip: rect(0, 0, 0, 0); } .show-on-focus:active, .show-on-focus:focus { position: static !important; width: auto; height: auto; overflow: visible; - clip: auto; - white-space: normal; - -webkit-clip-path: none; - clip-path: none; } + clip: auto; } .show-for-landscape, .hide-for-portrait { @@ -5294,512 +3993,9 @@ a.thumbnail { .clearfix::before, .clearfix::after { display: table; - content: ' '; - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-order: 1; - order: 1; } + content: ' '; } .clearfix::after { clear: both; } -.slide-in-down.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateY(-100%); - transform: translateY(-100%); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-in-down.mui-enter.mui-enter-active { - -ms-transform: translateY(0); - transform: translateY(0); } - -.slide-in-left.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateX(-100%); - transform: translateX(-100%); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-in-left.mui-enter.mui-enter-active { - -ms-transform: translateX(0); - transform: translateX(0); } - -.slide-in-up.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateY(100%); - transform: translateY(100%); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-in-up.mui-enter.mui-enter-active { - -ms-transform: translateY(0); - transform: translateY(0); } - -.slide-in-right.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateX(100%); - transform: translateX(100%); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-in-right.mui-enter.mui-enter-active { - -ms-transform: translateX(0); - transform: translateX(0); } - -.slide-out-down.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateY(0); - transform: translateY(0); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-out-down.mui-leave.mui-leave-active { - -ms-transform: translateY(100%); - transform: translateY(100%); } - -.slide-out-right.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateX(0); - transform: translateX(0); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-out-right.mui-leave.mui-leave-active { - -ms-transform: translateX(100%); - transform: translateX(100%); } - -.slide-out-up.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateY(0); - transform: translateY(0); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-out-up.mui-leave.mui-leave-active { - -ms-transform: translateY(-100%); - transform: translateY(-100%); } - -.slide-out-left.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: translateX(0); - transform: translateX(0); - transition-property: transform, opacity; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.slide-out-left.mui-leave.mui-leave-active { - -ms-transform: translateX(-100%); - transform: translateX(-100%); } - -.fade-in.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - opacity: 0; - transition-property: opacity; } - -.fade-in.mui-enter.mui-enter-active { - opacity: 1; } - -.fade-out.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - opacity: 1; - transition-property: opacity; } - -.fade-out.mui-leave.mui-leave-active { - opacity: 0; } - -.hinge-in-from-top.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotateX(-90deg); - -ms-transform-origin: top; - transform-origin: top; - transition-property: transform, opacity; - opacity: 0; } - -.hinge-in-from-top.mui-enter.mui-enter-active { - transform: perspective(2000px) rotate(0deg); - opacity: 1; } - -.hinge-in-from-right.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotateY(-90deg); - -ms-transform-origin: right; - transform-origin: right; - transition-property: transform, opacity; - opacity: 0; } - -.hinge-in-from-right.mui-enter.mui-enter-active { - transform: perspective(2000px) rotate(0deg); - opacity: 1; } - -.hinge-in-from-bottom.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotateX(90deg); - -ms-transform-origin: bottom; - transform-origin: bottom; - transition-property: transform, opacity; - opacity: 0; } - -.hinge-in-from-bottom.mui-enter.mui-enter-active { - transform: perspective(2000px) rotate(0deg); - opacity: 1; } - -.hinge-in-from-left.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotateY(90deg); - -ms-transform-origin: left; - transform-origin: left; - transition-property: transform, opacity; - opacity: 0; } - -.hinge-in-from-left.mui-enter.mui-enter-active { - transform: perspective(2000px) rotate(0deg); - opacity: 1; } - -.hinge-in-from-middle-x.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotateX(-90deg); - -ms-transform-origin: center; - transform-origin: center; - transition-property: transform, opacity; - opacity: 0; } - -.hinge-in-from-middle-x.mui-enter.mui-enter-active { - transform: perspective(2000px) rotate(0deg); - opacity: 1; } - -.hinge-in-from-middle-y.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotateY(-90deg); - -ms-transform-origin: center; - transform-origin: center; - transition-property: transform, opacity; - opacity: 0; } - -.hinge-in-from-middle-y.mui-enter.mui-enter-active { - transform: perspective(2000px) rotate(0deg); - opacity: 1; } - -.hinge-out-from-top.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotate(0deg); - -ms-transform-origin: top; - transform-origin: top; - transition-property: transform, opacity; - opacity: 1; } - -.hinge-out-from-top.mui-leave.mui-leave-active { - transform: perspective(2000px) rotateX(-90deg); - opacity: 0; } - -.hinge-out-from-right.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotate(0deg); - -ms-transform-origin: right; - transform-origin: right; - transition-property: transform, opacity; - opacity: 1; } - -.hinge-out-from-right.mui-leave.mui-leave-active { - transform: perspective(2000px) rotateY(-90deg); - opacity: 0; } - -.hinge-out-from-bottom.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotate(0deg); - -ms-transform-origin: bottom; - transform-origin: bottom; - transition-property: transform, opacity; - opacity: 1; } - -.hinge-out-from-bottom.mui-leave.mui-leave-active { - transform: perspective(2000px) rotateX(90deg); - opacity: 0; } - -.hinge-out-from-left.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotate(0deg); - -ms-transform-origin: left; - transform-origin: left; - transition-property: transform, opacity; - opacity: 1; } - -.hinge-out-from-left.mui-leave.mui-leave-active { - transform: perspective(2000px) rotateY(90deg); - opacity: 0; } - -.hinge-out-from-middle-x.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotate(0deg); - -ms-transform-origin: center; - transform-origin: center; - transition-property: transform, opacity; - opacity: 1; } - -.hinge-out-from-middle-x.mui-leave.mui-leave-active { - transform: perspective(2000px) rotateX(-90deg); - opacity: 0; } - -.hinge-out-from-middle-y.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - transform: perspective(2000px) rotate(0deg); - -ms-transform-origin: center; - transform-origin: center; - transition-property: transform, opacity; - opacity: 1; } - -.hinge-out-from-middle-y.mui-leave.mui-leave-active { - transform: perspective(2000px) rotateY(-90deg); - opacity: 0; } - -.scale-in-up.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: scale(0.5); - transform: scale(0.5); - transition-property: transform, opacity; - opacity: 0; } - -.scale-in-up.mui-enter.mui-enter-active { - -ms-transform: scale(1); - transform: scale(1); - opacity: 1; } - -.scale-in-down.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: scale(1.5); - transform: scale(1.5); - transition-property: transform, opacity; - opacity: 0; } - -.scale-in-down.mui-enter.mui-enter-active { - -ms-transform: scale(1); - transform: scale(1); - opacity: 1; } - -.scale-out-up.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: scale(1); - transform: scale(1); - transition-property: transform, opacity; - opacity: 1; } - -.scale-out-up.mui-leave.mui-leave-active { - -ms-transform: scale(1.5); - transform: scale(1.5); - opacity: 0; } - -.scale-out-down.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: scale(1); - transform: scale(1); - transition-property: transform, opacity; - opacity: 1; } - -.scale-out-down.mui-leave.mui-leave-active { - -ms-transform: scale(0.5); - transform: scale(0.5); - opacity: 0; } - -.spin-in.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: rotate(-0.75turn); - transform: rotate(-0.75turn); - transition-property: transform, opacity; - opacity: 0; } - -.spin-in.mui-enter.mui-enter-active { - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; } - -.spin-out.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: rotate(0); - transform: rotate(0); - transition-property: transform, opacity; - opacity: 1; } - -.spin-out.mui-leave.mui-leave-active { - -ms-transform: rotate(0.75turn); - transform: rotate(0.75turn); - opacity: 0; } - -.spin-in-ccw.mui-enter { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: rotate(0.75turn); - transform: rotate(0.75turn); - transition-property: transform, opacity; - opacity: 0; } - -.spin-in-ccw.mui-enter.mui-enter-active { - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; } - -.spin-out-ccw.mui-leave { - transition-duration: 500ms; - transition-timing-function: linear; - -ms-transform: rotate(0); - transform: rotate(0); - transition-property: transform, opacity; - opacity: 1; } - -.spin-out-ccw.mui-leave.mui-leave-active { - -ms-transform: rotate(-0.75turn); - transform: rotate(-0.75turn); - opacity: 0; } - -.slow { - transition-duration: 750ms !important; } - -.fast { - transition-duration: 250ms !important; } - -.linear { - transition-timing-function: linear !important; } - -.ease { - transition-timing-function: ease !important; } - -.ease-in { - transition-timing-function: ease-in !important; } - -.ease-out { - transition-timing-function: ease-out !important; } - -.ease-in-out { - transition-timing-function: ease-in-out !important; } - -.bounce-in { - transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } - -.bounce-out { - transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } - -.bounce-in-out { - transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } - -.short-delay { - transition-delay: 300ms !important; } - -.long-delay { - transition-delay: 700ms !important; } - -.shake { - animation-name: shake-7; } - -@keyframes shake-7 { - 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% { - transform: translateX(7%); } - 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% { - transform: translateX(-7%); } } - -.spin-cw { - animation-name: spin-cw-1turn; } - -@keyframes spin-cw-1turn { - 0% { - transform: rotate(-1turn); } - 100% { - transform: rotate(0); } } - -.spin-ccw { - animation-name: spin-cw-1turn; } - -@keyframes spin-cw-1turn { - 0% { - transform: rotate(0); } - 100% { - transform: rotate(1turn); } } - -.wiggle { - animation-name: wiggle-7deg; } - -@keyframes wiggle-7deg { - 40%, 50%, 60% { - transform: rotate(7deg); } - 35%, 45%, 55%, 65% { - transform: rotate(-7deg); } - 0%, 30%, 70%, 100% { - transform: rotate(0); } } - -.shake, -.spin-cw, -.spin-ccw, -.wiggle { - animation-duration: 500ms; } - -.infinite { - animation-iteration-count: infinite; } - -.slow { - animation-duration: 750ms !important; } - -.fast { - animation-duration: 250ms !important; } - -.linear { - animation-timing-function: linear !important; } - -.ease { - animation-timing-function: ease !important; } - -.ease-in { - animation-timing-function: ease-in !important; } - -.ease-out { - animation-timing-function: ease-out !important; } - -.ease-in-out { - animation-timing-function: ease-in-out !important; } - -.bounce-in { - animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } - -.bounce-out { - animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } - -.bounce-in-out { - animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } - -.short-delay { - animation-delay: 300ms !important; } - -.long-delay { - animation-delay: 700ms !important; } +/*# sourceMappingURL=foundation.css.map */ From bca876fe9e531189a2f88bd89c304b70923bcf3e Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 15:55:37 -0700 Subject: [PATCH 46/61] small update on foundation --- app/assets/stylesheets/application.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 8b13789179..1e389b6487 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -1 +1 @@ - +@import url('foundation');" From 3f6e147cc633feacd09807c277476635eecad3af Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Sat, 14 Oct 2017 16:48:35 -0700 Subject: [PATCH 47/61] added some css styling and html stuff but it's not all displaying correctly with foundation. I think there is an issue with my foundation. --- app/assets/stylesheets/application.css | 22 ++++++++++++++++++++++ app/views/layouts/application.html.erb | 22 ++++++++++++---------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 1e389b6487..46912efb1b 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -1 +1,23 @@ @import url('foundation');" + +header { + max-width: 100%; + background-color: #B2DFDB; + border-bottom: 1px solid #EEEEEE; + padding: 25px 20px 10px 20px; + margin-bottom: 10px +} + +/*header.page-header.row::before { + display: table; + content: ' '; + box-sizing: inherit; +}*/ + +main { + max-width: 75%; +} + +.button { + background-color: #26A69A +} diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index e65a1ac031..1a2ae9f317 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -9,21 +9,23 @@ -
-

Media Ranker

+
<%= link_to "Title", "work_path(work_id)" %> <%= "creator" %> <%= "pub" %> <%= "cat" %> <%= link_to "#{@work.title}", work_path(@work.id) %> <%= @work.creator %> <%= @work.publication_year %> <%= @work.category %> <%= vote.created_at %>
work.votes.count <%= work.votes.count %> <%= link_to "#{work.title}", work_path(work) %> <%= work.creator %> <%= work.publication_year %> <%=link_to "UpVote", votes_path, method: :post %> <%= form_for Vote.new(work_id: work.id) do |f| %> + <%= f.hidden_field :work_id %> + <%= f.submit "Upvote" %> + <% end %>
<%= link_to "#{work.title}", work_path(work) %> <%= work.creator %> <%= work.publication_year %> <%= form_for Vote.new(work_id: work.id) do |f| %> - <%= f.hidden_field :work_id %> - <%= f.submit "Upvote" %> - <% end %> <%= render partial: 'form_upvote', locals: { work: work } %>
+ + + + + + + + <% @work.votes.each do |vote| %> + + + + + + + + <% end %> + +
UserDate
<% user = User.find_by(id: vote.user_id) %> + <%= user.name %> <%= vote.created_at %>
From d9de6b5f674f52b8cfc7513b2dfbdb4cec8f29ec Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Mon, 16 Oct 2017 13:54:35 -0700 Subject: [PATCH 55/61] Fix require statements at the top of application.css --- app/assets/stylesheets/application.css | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index b75cdaf6f0..f093030910 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -1,4 +1,18 @@ -@import url('foundation'); +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's + * vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope. + * + *= require_tree . + *= require_self + */ header { From 30f2e812e9e3d3c022561f5c55e4897ad36a2d1a Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Mon, 16 Oct 2017 14:03:46 -0700 Subject: [PATCH 56/61] got foundation fixed --- test/controllers/users_controller_test.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index c97c49788a..3d861f2524 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -6,24 +6,24 @@ get users_path must_respond_with :success end + + it "returns a success status when there are no users" do + User.destroy_all + get users_path + must_respond_with :success + end end describe "show" do it "returns a success status when an existing user is selected" do - get users_path(User.first.id) + get user_path(User.first.id) must_respond_with :success end it "returns an error message when given a bogus User id" do - get users_path(User.last.id + 1) + get user_path(User.last.id + 1) must_respond_with :not_found end - - it "returns a success status when there are no users" do - User.destroy_all - get users_path - must_respond_with :success - end end #THis test won't work... doesn't recognize login as a method?! From a5add36174fc82798470f91473c9ffcfbfecfef4 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Mon, 16 Oct 2017 14:07:46 -0700 Subject: [PATCH 57/61] updated spotlight so that it shoudl work now with heroku --- app/models/work.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/models/work.rb b/app/models/work.rb index 39355fce3b..04039568c8 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -17,7 +17,12 @@ def self.top work.votes.count end top = top.reverse - return top.first + if top.first == nil + message = "No media yet" + return message + else + return top.first + end end def self.all_albums From ac845f3373cd83d8d25be264abb7198bff956fef Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Mon, 16 Oct 2017 14:13:09 -0700 Subject: [PATCH 58/61] tyring to get heroku working --- app/models/work.rb | 5 ----- app/views/main/index.html.erb | 5 ++++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/app/models/work.rb b/app/models/work.rb index 04039568c8..b7f3558b3d 100644 --- a/app/models/work.rb +++ b/app/models/work.rb @@ -17,12 +17,7 @@ def self.top work.votes.count end top = top.reverse - if top.first == nil - message = "No media yet" - return message - else return top.first - end end def self.all_albums diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index 19837798c8..f722ccbc0e 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -5,7 +5,10 @@ Media Spotlight: - <%= link_to "#{work.title}", work_path(work.id) %> <%= "by #{work.creator}" %> + <% if work.title != nil %> + <%= link_to "#{work.title}", work_path(work.id) %> <%= "by #{work.creator}" %> + <% else %> + <%= "No Media Yet" %>

<%= "#{work.votes.count} votes" %>

From 10efa345a998219b3e39df426f4aae3c3da1e2b0 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Mon, 16 Oct 2017 14:15:23 -0700 Subject: [PATCH 59/61] ather update --- app/views/main/index.html.erb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index f722ccbc0e..e3229b8e6c 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -7,8 +7,9 @@ <% if work.title != nil %> <%= link_to "#{work.title}", work_path(work.id) %> <%= "by #{work.creator}" %> - <% else %> - <%= "No Media Yet" %> + <% else %> + <%= "No Media Yet" %> + <% end %>

<%= "#{work.votes.count} votes" %>

From 6ab56f0e1265ecaa5b98cc435156d158b82be358 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Mon, 16 Oct 2017 14:21:24 -0700 Subject: [PATCH 60/61] update --- app/views/main/index.html.erb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index e3229b8e6c..35a8d50c36 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -1,16 +1,19 @@
-<% work = Work.top %> +<% if work.top == nil %> + <% work = nil %> + <% else work = Work.top %> + <% end %>

Media Spotlight: - <% if work.title != nil %> + <% if work != nil %> <%= link_to "#{work.title}", work_path(work.id) %> <%= "by #{work.creator}" %> +

<%= "#{work.votes.count} votes" %>

<% else %> <%= "No Media Yet" %> <% end %> -

<%= "#{work.votes.count} votes" %>

From f249d68fa5a18ab1b7bf712a2ec2b23730be4815 Mon Sep 17 00:00:00 2001 From: Kimberley Zell Date: Mon, 16 Oct 2017 14:24:54 -0700 Subject: [PATCH 61/61] update --- app/views/main/index.html.erb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index 35a8d50c36..2af55261c3 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -1,9 +1,6 @@
-<% if work.top == nil %> - <% work = nil %> - <% else work = Work.top %> - <% end %> +<% work = Work.top %>

Media Spotlight: @@ -12,7 +9,7 @@ <%= link_to "#{work.title}", work_path(work.id) %> <%= "by #{work.creator}" %>

<%= "#{work.votes.count} votes" %>

<% else %> - <%= "No Media Yet" %> + <%= "No Media Yet" %> <% end %>