/**
 * 1. Set all visible elements with default inline, inline-block and block to
 *    display as blocks.
 *
 *    This might be controversial, but my position is that inline vs block
 *    display is a visual style and that block display is the most reasonable
 *    default for consistent styling. Rather than maintaining a mental map of
 *    which elements are _supposed_ to be inline vs block you can always rely
 *    on the fact that *all* elements are block by default. Except checkboxes
 *    and radios of course, because reasons.
 */
article, aside, div, footer, header, hgroup, main, menu, nav, noscript, section,
abbr, acronym, blockquote, h1, h2, h3, h4, h5, h6, p, q,
b, bdo, em, i, ins, hr, mark, pre, s, small, strike, strong, sub, sup, u, wbr,
a, address, cite, code, dd, dfn, dl, dt, figcaption, figure, kbd, ol, ul, samp, time, var,
rp, rt, ruby,
details, meter, progress, summary,
audio, canvas, embed, img, svg, video,
button, datalist, form, fieldset, input:not([type="checkbox"]):not([type="radio"]), keygen, label, output, select, textarea {
  display: block;
  /* 1 */ }

/**
 * 1. Reset box-sizing on all elements to border-box.
 *
 *    This uses Jon Neal's method of setting the default box-sizing on the root
 *    html element and then having all other elements inherit box-sizing
 *    (https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/).
 *    This method seems to cause the least number of headaches and override
 *    issues.
 */
html {
  box-sizing: border-box; }

*, *::before, *::after {
  box-sizing: inherit; }

/**
 * 1. Fully reset link styling.
 * 2. Remove gray background color from active links in IE 10
 *    (from normalize.css).
 */
a {
  color: inherit;
  /* 1 */
  text-decoration: none;
  /* 1 */
  background-color: transparent;
  /* 2 */ }
  a:link, a:active, a:visited {
    color: inherit;
    /* 1 */ }

ul, ol {
  margin: 0;
  padding: 0;
  list-style-type: none; }
  ul ol, ul ul, ol ol, ol ul {
    padding: 0; }

/**
 * 1. Prevent iOS and IE text size adjust after device orientation change
 *    without disabling user zoom.
 */
html {
  -ms-text-size-adjust: 100%;
  /* 1 */
  -webkit-text-size-adjust: 100%;
  /* 1 */ }

/**
 * 1. Remove all styling from `h1-6` elements.
 */
h1, h2, h3, h4, h5, h6 {
  margin: 0;
  /* 1 */
  font-size: inherit;
  /* 1 */
  font-weight: inherit;
  /* 1 */ }

/**
 * 1. Remove extra margin around these elements.
 */
p, dl, dd, pre, figure, blockquote {
  margin: 0;
  /* 1 */ }

/**
 * 1. Ensure that these elements inherit font-style.
 */
i, cite, em, var, address, dfn {
  font-style: inherit;
  /* 1 */ }

/**
 * 1. Ensure that these elements inherit text-decoration.
 */
u, s, strike, del, ins {
  text-decoration: inherit;
  /* 1 */ }

/**
 * 1. Ensure that these elements inherit font-weight.
 */
dfn, strong, th, b {
  font-weight: inherit;
  /* 1 */ }

small {
  font-size: inherit; }

/**
 * 1. Ensure that font-family is inherited.
 * 2. Inherit font size in IE.
 */
tt, code, kbd, samp, pre {
  font-family: inherit;
  /* 1 */
  font-size: inherit;
  /* 2 */ }

/**
 * 1. Remove quotation marks.
 */
q::before, q::after {
  content: "";
  /* 1 */
  content: none;
  /* 1 */ }

blockquote, q {
  quotes: none;
  /* 1 */ }

/**
 * 1. Reset styling for `mark` elements.
 */
mark {
  background-color: inherit;
  /* 1 */
  color: inherit;
  /* 1 */ }

hr {
  box-sizing: content-box;
  height: 0; }

/**
 * Prevent `sub` and `sup` affecting `line-height` in all browsers
 * (from normalize.css).
 */
sub, sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline; }

sup {
  top: -0.5em; }

sub {
  bottom: -0.25em; }

/**
 * 1. Remove border when inside `a` element in IE 9/10 (from normalize.css).
 *
 *    Note: We don't use a parent `a` because it causes the selector to have
 *    high specificity and makes it difficult to override. `img` shouldn't
 *    have borders anyway, so no harm no foul.
 */
img {
  border: none; }

/**
 * 1. Remove borders from iframes. This isn't 1995 any more.
 */
iframe {
  border: none;
  /* 1 */ }

/**
 * 1. Prevent modern browsers from displaying `audio` without controls.
 * 2. Remove excess height in iOS 5 devices (from normalize.css).
 */
audio:not([controls]) {
  display: none;
  /* 1 */
  height: 0;
  /* 2 */ }

/**
 * Correct overflow not hidden in IE 9/10/11 (from normalize.css).
 */
svg:not(:root) {
  overflow: hidden; }

/**
 * 1. Remove the outline on focused elements that all major browers add.
 *
 *    Ok, this is going to be *super* controversial but hear me out. Yes,
 *    accessability on focusable elements is really important and needs to be
 *    addressed in any design, but the default styling may not work for every
 *    design. For instance, a site with lots of grays would make the default
 *    focus outline difficult to see. Rather than try to guess what the best
 *    focus indicator should be for every design I argue that this is the
 *    responsibility of the designer to figure out. There is an argument to be
 *    made for standard and expected behavior, but it is easy enough to add
 *    a focus outline back in the application styling if that's what you want.
 */
:focus {
  outline: none; }

/**
 * 1. Remove the underline that Firefox adds to elements with a title.
 *
 *    Again, this might be controversal but see the comments on :focus above.
 */
[title] {
  text-decoration: none; }

table {
  border-collapse: collapse;
  border-spacing: 0; }

td, th {
  padding: 0; }

caption {
  text-align: inherit; }

html {
  width: 100%;
  overflow-x: hidden; }

input:not([type="checkbox"]):not([type="radio"]), select, textarea, button, meter, progress {
  width: 100%; }

img, video, object, embed, iframe {
  height: auto;
  max-width: 100%; }

audio {
  max-width: 100%; }

/**
 * 1. Fully reset fieldsets removing all default styling.
 */
fieldset {
  margin: 0;
  /* 1 */
  padding: 0;
  /* 1 */
  border: none;
  /* 1 */ }

/**
 * 1. Fully reset lengends removing all default styling.
 * 2. On Android Chrome browser lengends don't expand to 100%, so we fix that.
 */
legend {
  border: 0;
  /* 1 */
  padding: 0;
  /* 1 */
  width: 100%;
  /* 2 */ }

/**
 * Known limitation: by default, Chrome and Safari on OS X allow very limited
 * styling of `select`, unless a `border` property is set.
 */
input:not([type="checkbox"]):not([type="radio"]),
optgroup,
select,
textarea,
button {
  margin: 0;
  padding: 0;
  border: none;
  background: none;
  font: inherit;
  color: inherit; }

/**
 * 1. Remove border-radius in Safari.
 * 2. Remove glossy background in Safari.
 *
 *    Note that this also removes the dropdown arrow in Safari, which isn't
 *    ideal but there is little we can do about it.
 */
select {
  border-radius: 0;
  /* 1 */
  -webkit-appearance: none;
  /* 2 */ }

/**
 * Remove default vertical scrollbar in IE 8/9/10/11 (from normalize.css).
 */
textarea {
  overflow: auto; }

/**
 * 1. Address `overflow` set to `hidden` in IE 8/9/10/11 (from normalize.css).
 */
button {
  overflow: visible;
  /* 1 */ }

/**
 * 1. Address inconsistent `text-transform` inheritance for `button` and
 *    `select`. All other form control elements do not inherit `text-transform`
 *    values. Correct `button` style inheritance in Firefox, IE 8/9/10/11, and
 *    Opera. Correct `select` style inheritance in Firefox
 *    (from normalize.css).
 */
button,
select {
  text-transform: none;
  /* 1 */ }

/**
 * 1. Remove inner padding and border in Firefox 4+ (from normalize.css).
 */
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  /* 1 */
  padding: 0;
  /* 1 */ }

/**
 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 *    and `video` controls.
 * 2. Correct inability to style clickable `input` types in iOS.
 * 3. Improve usability and consistency of cursor style between image-type
 *    `input` and others.
 */
button,
html input[type="button"],
input[type="submit"],
input[type="reset"] {
  -webkit-appearance: button;
  /* 2 */
  cursor: pointer;
  /* 3 */
  text-align: left; }

/**
 * Re-set default cursor for disabled elements.
 */
button[disabled],
html input[disabled] {
  cursor: default; }

/**
 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
 * the UA stylesheet.
 */
input {
  line-height: normal; }

/**
 * Checkboxes and radio inputs are not styleable in most browsers unfortunately,
 * so we have to treat them as a special case.
 *
 * 1. Address box sizing set to `content-box` in IE 8/9/10 (from normalize.css).
 * 2. Remove excess padding in IE 8/9/10 (from normalize.css).
 */
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  /* 1 */
  padding: 0;
  /* 2 */ }

/**
 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
 * `font-size` values of the `input`, it causes the cursor style of the
 * decrement button to change from `default` to `text`.
 */
input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button {
  height: auto; }

/**
 * 1. Address `appearance` set to `searchfield` in Safari and Chrome which is
 *    unstylable (from normalize.css).
 * 2. Remove inner padding and search cancel button in Safari and Chrome on
 *    OS X. Safari (but not Chrome) clips the cancel button when the search
 *    input has padding (and `textfield` appearance) (from normalize.css).
 *
 *    Ideally we'd like to support the native cancel button, but unfortunately
 *    safar
 *
 */
input[type="search"] {
  -webkit-appearance: textfield;
  /* 1 */ }
  input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
    -webkit-appearance: none;
    /* 2 */ }

/**
 * 1. Update input placeholders to inherit color (IE, Chrome and Safari) and
 *    opacity (Firefox).
 *
 *    Note: On Firefox number inputs do not respect placeholder styling. This is
 *    a known bug (https://bugzilla.mozilla.org/show_bug.cgi?id=1004130) with no
 *    workaround :(.
 */
::-webkit-input-placeholder {
  color: inherit;
  /* 1 */ }

::-moz-placeholder {
  opacity: inherit;
  /* 1 */ }

:-ms-input-placeholder {
  color: inherit;
  /* 1 */ }

/**
 * 1. Address `[hidden]` styling not present in IE 8/9/10 and hide the
 *    `template` element in IE 8/9/10/11, Safari, and Firefox < 22
 *    (from normalize.css).
 */
[hidden],
template {
  display: none;
  /* 1 */ }

/**
 * 1. Remove default padding on body.
 * 2. Normalize line-height.
 */
body {
  margin: 0;
  /* 1 */
  line-height: 1;
  /* 2 */ }
