webpack-contrib / style-loader

Style Loader
MIT License
1.65k stars 471 forks source link

Not splitting style tags, incomplete output, missing styles #469

Closed davidbwaters closed 4 years ago

davidbwaters commented 4 years ago

Expected Behavior

All imported CSS would be inlined and split between style tags.

Actual Behavior

In production mode, all the CSS is included in a minified block. When in development mode, the code is formatted normally but most of it is missing. If I look into the Webpack bootstrap file, I can see all the CSS there in both scenarios.

I made a small repo showing the problem and included the single SCSS library that I'm compiling my CSS from so you can see how much is missing. I've also included the 2 dist builds so opening the index in those will let you inspect the differences to help debug. Also worth noting, extracting includes the complete CSS as well. This one had me scratching my head.

Here is the repo with the prebuilt examples and source.

https://github.com/davidbwaters/webpack-debug

alexander-akait commented 4 years ago

What is missing? One css module === one style tag, no splitting

davidbwaters commented 4 years ago

If you clone and open the index of the dev version. inspect it and you'll see most styles aren't inserted

alexander-akait commented 4 years ago

What styles are missing?

davidbwaters commented 4 years ago

image

@charset "UTF-8";
/* ==========================================================================
   #CONFIG
   ========================================================================== */
/* ==========================================================================
   #CONFIG
   ========================================================================== */
/* ==========================================================================
   #ALIASES
   ========================================================================== */
/* ==========================================================================
   #BOX-SIZING
   ========================================================================== */
/**
 * More sensible default box-sizing:
 * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice
 */
html {
  box-sizing: border-box; }

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

/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
/* Document
   ========================================================================== */
/**
 * 1. Correct the line height in all browsers.
 * 2. Prevent adjustments of font size after orientation changes in
 *    IE on Windows Phone and in iOS.
 */
html {
  line-height: 1.15;
  /* 1 */
  -ms-text-size-adjust: 100%;
  /* 2 */
  -webkit-text-size-adjust: 100%;
  /* 2 */ }

/* 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-.
 * 1. Add the correct display in IE.
 */
figcaption,
figure,
main {
  /* 1 */
  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 */ }

/**
 * 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 */ }

/* Text-level semantics
   ========================================================================== */
/**
 * 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 */ }

/**
 * 1. Remove the bottom border in Chrome 57- and 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.
 * 1. Show the overflow in Edge.
 */
button,
input {
  /* 1 */
  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 */ }

/**
 * Remove the inner border and padding in Firefox.
 */
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
  border-style: none;
  padding: 0; }

/**
 * Restore the focus styles unset by the previous rule.
 */
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
  outline: 1px dotted ButtonText; }

/**
 * Correct the padding in Firefox.
 */
fieldset {
  padding: 0.35em 0.75em 0.625em; }

/**
 * 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 */
  color: inherit;
  /* 2 */
  display: table;
  /* 1 */
  max-width: 100%;
  /* 1 */
  padding: 0;
  /* 3 */
  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; }

/**
 * 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 */ }

/* Interactive
   ========================================================================== */
/*
 * Add the correct display in IE 9-.
 * 1. Add the correct display in Edge, IE, and Firefox.
 */
details,
menu {
  display: block; }

/*
 * Add the correct display in all browsers.
 */
summary {
  display: list-item; }

/* 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; }

/* ==========================================================================
   #SHARED
   ========================================================================== */
/**
 * Shared declarations for certain elements.
 */
/**
 * Always declare margins in the same direction:
 * csswizardry.com/2012/06/single-direction-margin-declarations
 */
address,
h1, h2, h3, h4, h5, h6,
blockquote, p, pre,
dl, ol, ul,
figure,
hr,
table,
fieldset {
  margin-bottom: 24px; }

/**
 * Consistent indentation for lists.
 */
dd, ol, ul {
  margin-left: 24px; }

/* ==========================================================================
   #PAGE
   ========================================================================== */
/**
 * Simple page-level setup.
 *
 * 1. Set the default `font-size` and `line-height` for the entire project,
 *    sourced from our default variables. The `font-size` is calculated to exist
 *    in ems, the `line-height` is calculated to exist unitlessly.
 * 2. Force scrollbars to always be visible to prevent awkward ‘jumps’ when
 *    navigating between pages that do/do not have enough content to produce
 *    scrollbars naturally.
 * 3. Ensure the page always fills at least the entire height of the viewport.
 */
html {
  font-size: 1em;
  /* [1] */
  line-height: 1.5;
  /* [1] */
  overflow-y: scroll;
  /* [2] */
  min-height: 100%;
  /* [3] */ }

/* ==========================================================================
   #HEADINGS
   ========================================================================== */
/**
 * Simple default styles for headings 1 through 6. Anything more opinionated
 * than simple font-size changes should likely be applied via classes (see:
 * http://csswizardry.com/2016/02/managing-typography-on-large-apps/).
 */
h1 {
  font-size: 36px;
  font-size: 2.25rem;
  line-height: 1.16667; }

h2 {
  font-size: 28px;
  font-size: 1.75rem;
  line-height: 1.28571; }

h3 {
  font-size: 24px;
  font-size: 1.5rem;
  line-height: 1.25; }

h4 {
  font-size: 20px;
  font-size: 1.25rem;
  line-height: 1.5; }

h5 {
  font-size: 18px;
  font-size: 1.125rem;
  line-height: 1.33333; }

h6 {
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5; }

/* ==========================================================================
   #LAYOUT
   ========================================================================== */
/**
 * Grid-like layout system.
 *
 * The layout object provides us with a column-style layout system. This file
 * contains the basic structural elements, but classes should be complemented
 * with width utilities, for example:
 *
 *   <div class="o-layout">
 *     <div class="o-layout__item  u-1/2">
 *     </div>
 *     <div class="o-layout__item  u-1/2">
 *     </div>
 *   </div>
 *
 * The above will create a two-column structure in which each column will
 * fluidly fill half of the width of the parent. We can have more complex
 * systems:
 *
 *   <div class="o-layout">
 *     <div class="o-layout__item  u-1/1  u-1/3@medium">
 *     </div>
 *     <div class="o-layout__item  u-1/2  u-1/3@medium">
 *     </div>
 *     <div class="o-layout__item  u-1/2  u-1/3@medium">
 *     </div>
 *   </div>
 *
 * The above will create a system in which the first item will be 100% width
 * until we enter our medium breakpoint, when it will become 33.333% width. The
 * second and third items will be 50% of their parent, until they also become
 * 33.333% width at the medium breakpoint.
 *
 * We can also manipulate entire layout systems by adding a series of modifiers
 * to the `.o-layout` block. For example:
 *
 *   <div class="o-layout  o-layout--reverse">
 *
 * This will reverse the displayed order of the system so that it runs in the
 * opposite order to our source, effectively flipping the system over.
 *
 *   <div class="o-layout  o-layout--[right|center]">
 *
 * This will cause the system to fill up from either the centre or the right
 * hand side. Default behaviour is to fill up the layout system from the left.
 *
 * There are plenty more options available to us: explore them below.
 */
/* Default/mandatory classes
   ========================================================================== */
/**
 * 1. Allows us to use the layout object on any type of element.
 * 2. We need to defensively reset any box-model properties.
 * 3. Use the negative margin trick for multi-row grids:
 *    http://csswizardry.com/2011/08/building-better-grid-systems/
 */
.o-layout {
  display: block;
  /* [1] */
  margin: 0;
  /* [2] */
  padding: 0;
  /* [2] */
  list-style: none;
  /* [1] */
  margin-left: -24px;
  /* [3] */
  font-size: 0; }

/**
   * 1. Required in order to combine fluid widths with fixed gutters.
   * 2. Allows us to manipulate grids vertically, with text-level properties,
   *    etc.
   * 3. Default item alignment is with the tops of each other, like most
   *    traditional grid/layout systems.
   * 4. By default, all layout items are full-width (mobile first).
   * 5. Gutters provided by left padding:
   *    http://csswizardry.com/2011/08/building-better-grid-systems/
   * 6. Fallback for old IEs not supporting `rem` values.
   */
.o-layout__item {
  box-sizing: border-box;
  /* [1] */
  display: inline-block;
  /* [2] */
  vertical-align: top;
  /* [3] */
  width: 100%;
  /* [4] */
  padding-left: 24px;
  /* [5] */
  font-size: 16px;
  /* [6] */
  font-size: 1rem; }

/* Gutter size modifiers
   ========================================================================== */
.o-layout--flush {
  margin-left: 0; }
  .o-layout--flush > .o-layout__item {
    padding-left: 0; }

.o-layout--tiny {
  margin-left: -6px; }
  .o-layout--tiny > .o-layout__item {
    padding-left: 6px; }

.o-layout--small {
  margin-left: -12px; }
  .o-layout--small > .o-layout__item {
    padding-left: 12px; }

.o-layout--large {
  margin-left: -48px; }
  .o-layout--large > .o-layout__item {
    padding-left: 48px; }

.o-layout--huge {
  margin-left: -96px; }
  .o-layout--huge > .o-layout__item {
    padding-left: 96px; }

/* Vertical alignment modifiers
   ========================================================================== */
/**
 * Align all grid items to the middles of each other.
 */
.o-layout--middle > .o-layout__item {
  vertical-align: middle; }

/**
 * Align all grid items to the bottoms of each other.
 */
.o-layout--bottom > .o-layout__item {
  vertical-align: bottom; }

/**
 * Stretch all grid items of each row to have an equal-height.
 * Please be aware that this modifier class doesn’t take any effect in IE9 and
 * below and other older browsers due to the lack of `display: flex` support.
 */
.o-layout--stretch {
  display: flex;
  flex-wrap: wrap; }
  .o-layout--stretch > .o-layout__item {
    display: flex; }
  .o-layout--stretch.o-layout--center {
    justify-content: center; }
  .o-layout--stretch.o-layout--right {
    justify-content: flex-end; }
  .o-layout--stretch.o-layout--left {
    justify-content: flex-start; }

/* Fill order modifiers
   ========================================================================== */
/**
 * Fill up the layout system from the centre.
 */
.o-layout--center {
  text-align: center; }
  .o-layout--center > .o-layout__item {
    text-align: left; }

/**
 * Fill up the layout system from the right-hand side.
 */
.o-layout--right {
  text-align: right; }
  .o-layout--right > .o-layout__item {
    text-align: left; }

/**
 * Fill up the layout system from the left-hand side. This will likely only be
 * needed when using in conjunction with `.o-layout--reverse`.
 */
.o-layout--left {
  text-align: left; }
  .o-layout--left > .o-layout__item {
    text-align: left; }

/**
 * Reverse the rendered order of the grid system.
 */
.o-layout--reverse {
  direction: rtl; }
  .o-layout--reverse > .o-layout__item {
    direction: ltr; }

/* Auto-widths modifier
   ========================================================================== */
/**
 * Cause layout items to take up a non-explicit amount of width.
 */
.o-layout--auto > .o-layout__item {
  width: auto; }

/* ==========================================================================
   #MEDIA
   ========================================================================== */
/**
 * Place any image- and text-like content side-by-side, as per:
 * http://www.stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code
 */
.o-media {
  display: block; }
  .o-media:after {
    content: "" !important;
    display: block !important;
    clear: both !important; }

.o-media__img {
  float: left;
  margin-right: 24px; }
  .o-media__img > img {
    display: block; }

.o-media__body {
  overflow: hidden;
  display: block; }
  .o-media__body,
  .o-media__body > :last-child {
    margin-bottom: 0; }

/* Size variants
   ========================================================================== */
/**
 * Modify the amount of space between our image and our text. We also have
 * reversible options for all available sizes.
 */
.o-media--flush > .o-media__img {
  margin-right: 0;
  margin-left: 0; }

.o-media--tiny > .o-media__img {
  margin-right: 6px; }

.o-media--tiny.o-media--reverse > .o-media__img {
  margin-right: 0;
  margin-left: 6px; }

.o-media--small > .o-media__img {
  margin-right: 12px; }

.o-media--small.o-media--reverse > .o-media__img {
  margin-right: 0;
  margin-left: 12px; }

.o-media--large > .o-media__img {
  margin-right: 48px; }

.o-media--large.o-media--reverse > .o-media__img {
  margin-right: 0;
  margin-left: 48px; }

.o-media--huge > .o-media__img {
  margin-right: 96px; }

.o-media--huge.o-media--reverse > .o-media__img {
  margin-right: 0;
  margin-left: 96px; }

/* Reversed media objects
   ========================================================================== */
.o-media--reverse > .o-media__img {
  float: right;
  margin-right: 0;
  margin-left: 24px; }

/* ==========================================================================
   #FLAG
   ========================================================================== */
/**
 * The flag object is a design pattern similar to the media object, however it
 * utilises `display: table[-cell];` to give us control over the vertical
 * alignments of the text and image.
 *
 * http://csswizardry.com/2013/05/the-flag-object/
 *
 * 1. Allows us to control vertical alignments.
 * 2. Force the object to be the full width of its parent. Combined with [1],
 *    this makes the object behave in a quasi-`display: block;` manner.
 * 3. Reset inherited `border-spacing` declarations.
 */
.o-flag {
  display: table;
  /* [1] */
  width: 100%;
  /* [2] */
  border-spacing: 0;
  /* [3] */ }

/**
   * Items within a flag object. There should only ever be one of each.
   *
   * 1. Default to aligning content to their middles.
   */
.o-flag__img,
.o-flag__body {
  display: table-cell;
  vertical-align: middle;
  /* [1] */ }

/**
   * Flag images have a space between them and the body of the object.
   *
   * 1. Force `.flag__img` to take up as little space as possible:
   *    https://pixelsvsbytes.com/2012/02/this-css-layout-grid-is-no-holy-grail/
   */
.o-flag__img {
  width: 1px;
  /* [1] */
  padding-right: 24px;
  /**
     * 1. Fixes problem with images disappearing.
     *
     *    The direct child selector '>' needs to remain in order for nested flag
     *    objects to not inherit their parent’s formatting. In case the image tag
     *    is wrapped into another tag, e.g. an anchor for linking reasons, it will
     *    disappear. In that case try wrapping the whole o-flag__img object into
     *    an anchor tag.
     *
     *    E.g.:
     *
     *      <a href="/">
     *        <div class="o-flag__img">
     *          <img src="./link/to/image.jpg" alt="image alt text">
     *        </div>
     *      </a>
     */ }
  .o-flag__img > img {
    max-width: none;
    /* [1] */ }

/**
   * The container for the main content of the flag object.
   *
   * 1. Forces the `.flag__body` to take up all remaining space.
   */
.o-flag__body {
  width: auto;
  /* [1] */ }
  .o-flag__body,
  .o-flag__body > :last-child {
    margin-bottom: 0; }

/* Size variants
   ========================================================================== */
.o-flag--flush > .o-flag__img {
  padding-right: 0;
  padding-left: 0; }

.o-flag--tiny > .o-flag__img {
  padding-right: 6px; }

.o-flag--tiny.o-flag--reverse > .o-flag__img {
  padding-right: 0;
  padding-left: 6px; }

.o-flag--small > .o-flag__img {
  padding-right: 12px; }

.o-flag--small.o-flag--reverse > .o-flag__img {
  padding-right: 0;
  padding-left: 12px; }

.o-flag--large > .o-flag__img {
  padding-right: 48px; }

.o-flag--large.o-flag--reverse > .o-flag__img {
  padding-right: 0;
  padding-left: 48px; }

.o-flag--huge > .o-flag__img {
  padding-right: 96px; }

.o-flag--huge.o-flag--reverse > .o-flag__img {
  padding-right: 0;
  padding-left: 96px; }

/* Reversed flag
   ========================================================================== */
/**
 * 1. Swap the rendered direction of the object…
 * 2. …and reset it.
 * 3. Reassign margins to the correct sides.
 */
.o-flag--reverse {
  direction: rtl;
  /* [1] */ }
  .o-flag--reverse > .o-flag__img,
  .o-flag--reverse > .o-flag__body {
    direction: ltr;
    /* [2] */ }
  .o-flag--reverse > .o-flag__img {
    padding-right: 0;
    /* [3] */
    padding-left: 24px;
    /* [3] */ }

/* Alignment variants
   ========================================================================== */
/**
 * Vertically align the image- and body-content differently. Defaults to middle.
 */
.o-flag--top > .o-flag__img,
.o-flag--top > .o-flag__body {
  vertical-align: top; }

.o-flag--bottom > .o-flag__img,
.o-flag--bottom > .o-flag__body {
  vertical-align: bottom; }

/* ==========================================================================
   #LIST-BARE
   ========================================================================== */
/**
 * Strip list-like appearance from lists by removing their bullets and any
 * indentation.
 *
 * Note: Declaring the item class might not be necessary everywhere,
 * but is for example in <dl> lists for the <dd> children.
 */
.o-list-bare {
  list-style: none;
  margin-left: 0; }

.o-list-bare__item {
  margin-left: 0; }

/* ==========================================================================
   #LIST-INLINE
   ========================================================================== */
/**
 * The list-inline object simply displays a list of items in one line.
 */
.o-list-inline {
  margin-left: 0;
  list-style: none; }

.o-list-inline__item {
  display: inline-block; }

/* ==========================================================================
   #BOX
   ========================================================================== */
/**
 * The box object simply boxes off content. Extend with cosmetic styles in the
 * Components layer.
 *
 * 1. So we can apply the `.o-box` class to naturally-inline elements.
 */
.o-box {
  display: block;
  /* [1] */
  padding: 24px; }
  .o-box:after {
    content: "" !important;
    display: block !important;
    clear: both !important; }
  .o-box > :last-child {
    margin-bottom: 0; }

/* Size variants
   ========================================================================== */
.o-box--flush {
  padding: 0; }

.o-box--tiny {
  padding: 6px; }

.o-box--small {
  padding: 12px; }

.o-box--large {
  padding: 48px; }

.o-box--huge {
  padding: 96px; }

/* ==========================================================================
   #BLOCK
   ========================================================================== */
/**
 * Stacked image-with-text object. A simple abstraction to cover a very commonly
 * occurring design pattern.
 */
.o-block {
  display: block;
  text-align: center; }

.o-block__img {
  margin-bottom: 24px;
  /* Size variants
       ====================================================================== */ }
  .o-block--flush > .o-block__img {
    margin-bottom: 0; }
  .o-block--tiny > .o-block__img {
    margin-bottom: 6px; }
  .o-block--small > .o-block__img {
    margin-bottom: 12px; }
  .o-block--large > .o-block__img {
    margin-bottom: 48px; }
  .o-block--huge > .o-block__img {
    margin-bottom: 96px; }

.o-block__body {
  display: block; }

/* Alignment variants
   ========================================================================== */
.o-block--right {
  text-align: right; }

.o-block--left {
  text-align: left; }

/* ==========================================================================
   #TABLE
   ========================================================================== */
/**
 * A simple object for manipulating the structure of HTML `table`s.
 */
.o-table {
  width: 100%; }

/* Equal-width table cells
   ========================================================================== */
/**
 * `table-layout: fixed` forces all cells within a table to occupy the same
 * width as each other. This also has performance benefits: because the browser
 * does not need to (re)calculate cell dimensions based on content it discovers,
 * the table can be rendered very quickly. Further reading:
 * https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout#Values
 */
.o-table--fixed {
  table-layout: fixed; }

/* Size variants
   ========================================================================== */
.o-table--tiny th,
.o-table--tiny td {
  padding: 6px; }

.o-table--small th,
.o-table--small td {
  padding: 12px; }

.o-table--large th,
.o-table--large td {
  padding: 48px; }

.o-table--huge th,
.o-table--huge td {
  padding: 96px; }

/* ==========================================================================
   #WRAPPER
   ========================================================================== */
/**
 * Page-level constraining and wrapping elements.
 */
.o-wrapper {
  padding-right: 24px;
  padding-left: 24px;
  margin-right: auto;
  margin-left: auto;
  max-width: 1200px; }
  .o-wrapper:after {
    content: "" !important;
    display: block !important;
    clear: both !important; }

/* ==========================================================================
   #BUTTONS
   ========================================================================== */
/**
 * 1. Allow us to style box model properties.
 * 2. Line different sized buttons up a little nicer.
 * 3. Make buttons inherit font styles (often necessary when styling `input`s as
 *    buttons).
 * 4. Reset/normalize some styles.
 * 5. Force all button-styled elements to appear clickable.
 */
.c-btn {
  display: inline-block;
  /* [1] */
  vertical-align: middle;
  /* [2] */
  font: inherit;
  /* [3] */
  text-align: center;
  /* [4] */
  margin: 0;
  /* [4] */
  cursor: pointer;
  /* [5] */
  padding: 12px 24px;
  transition: all 300ms ease-in-out;
  border-radius: 3px; }

/* Style variants
   ========================================================================== */
.c-btn--primary {
  background-color: #4a8ec2; }
  .c-btn--primary, .c-btn--primary:hover, .c-btn--primary:active, .c-btn--primary:focus {
    text-decoration: none;
    /* [4] */
    color: #fff; }
  .c-btn--primary:hover, .c-btn--primary:focus {
    background-color: #3774a2; }

.c-btn--secondary {
  background-color: #2f4054; }
  .c-btn--secondary, .c-btn--secondary:hover, .c-btn--secondary:active, .c-btn--secondary:focus {
    text-decoration: none;
    color: #fff; }
  .c-btn--secondary:hover, .c-btn--secondary:focus {
    background-color: #1d2733; }

.c-btn--tertiary {
  background-color: #fff;
  color: #4a8ec2; }
  .c-btn--tertiary, .c-btn--tertiary:hover, .c-btn--tertiary:active, .c-btn--tertiary:focus {
    text-decoration: none;
    color: #4a8ec2; }
  .c-btn--tertiary:hover, .c-btn--tertiary:focus {
    color: #3774a2; }

/* Size variants
   ========================================================================== */
.c-btn--small {
  padding: 6px 12px; }

.c-btn--large {
  padding: 24px 48px; }

/* Ghost buttons
   ========================================================================== */
/**
 * Ghost buttons have see-through backgrounds and are bordered.
 */
.c-btn--ghost {
  border: 2px solid currentColor;
  padding: 10px 22px; }
  .c-btn--ghost, .c-btn--ghost:hover, .c-btn--ghost:active, .c-btn--ghost:focus {
    background: none; }
  .c-btn--ghost.c-btn--small {
    padding: 4px 10px; }
  .c-btn--ghost.c-btn--large {
    padding: 22px 46px; }
  .c-btn--ghost.c-btn--primary {
    color: #4a8ec2; }
    .c-btn--ghost.c-btn--primary:hover, .c-btn--ghost.c-btn--primary:focus {
      color: #3774a2; }
  .c-btn--ghost.c-btn--secondary {
    color: #2f4054; }
    .c-btn--ghost.c-btn--secondary:hover, .c-btn--ghost.c-btn--secondary:focus {
      color: #1d2733; }
  .c-btn--ghost.c-btn--tertiary {
    color: #fff; }
    .c-btn--ghost.c-btn--tertiary:hover, .c-btn--ghost.c-btn--tertiary:focus {
      color: #fff; }

/* ==========================================================================
   #WIDTHS
   ========================================================================== */
/**
 * inuitcss generates a series of utility classes that give a fluid width to
 * whichever element they’re applied, e.g.:
 *
 *   <img src="" alt="" class="u-1/2" />
 *
 * These classes are most commonly used in conjunction with our layout system,
 * e.g.:
 *
 *   <div class="o-layout__item  u-1/2">
 *
 * By default, inuitcss will also generate responsive variants of each of these
 * classes by using your Sass MQ configuration, e.g.:
 *
 *   <div class="o-layout__item  u-1/1  u-1/2@tablet  u-1/3@desktop">
 *
 * Optionally, inuitcss can generate offset classes which can push and pull
 * elements left and right by a specified amount, e.g.:
 *
 *   <div class="o-layout__item  u-2/3  u-pull-1/3">
 *
 * This is useful for making very granular changes to the rendered order of
 * items in a layout.
 *
 * N.B. This option is turned off by default.
 */
/**
 * A series of width helper classes that you can use to size things like grid
 * systems. Classes take a fraction-like format (e.g. `.u-2/3`). Use these in
 * your markup:
 *
 * <div class="u-7/12">
 *
 * The following will generate widths helper classes based on the fractions
 * defined in the `$inuit-fractions` list.
 */
.u-1\/1 {
  width: 100% !important; }

.u-1\/2 {
  width: 50% !important; }

.u-2\/2 {
  width: 100% !important; }

.u-1\/3 {
  width: 33.33333% !important; }

.u-2\/3 {
  width: 66.66667% !important; }

.u-3\/3 {
  width: 100% !important; }

.u-1\/4 {
  width: 25% !important; }

.u-2\/4 {
  width: 50% !important; }

.u-3\/4 {
  width: 75% !important; }

.u-4\/4 {
  width: 100% !important; }

.u-1\/5 {
  width: 20% !important; }

.u-2\/5 {
  width: 40% !important; }

.u-3\/5 {
  width: 60% !important; }

.u-4\/5 {
  width: 80% !important; }

.u-5\/5 {
  width: 100% !important; }

/**
 * If we’re using Sass-MQ, automatically generate grid system(s) for each of our
 * defined breakpoints, and give them a Responsive Suffix, e.g.:
 *
 * <div class="u-3/12@mobile">
 */
@media (min-width: 20em) {
  .u-1\/1\@mobile {
    width: 100% !important; }
  .u-1\/2\@mobile {
    width: 50% !important; }
  .u-2\/2\@mobile {
    width: 100% !important; }
  .u-1\/3\@mobile {
    width: 33.33333% !important; }
  .u-2\/3\@mobile {
    width: 66.66667% !important; }
  .u-3\/3\@mobile {
    width: 100% !important; }
  .u-1\/4\@mobile {
    width: 25% !important; }
  .u-2\/4\@mobile {
    width: 50% !important; }
  .u-3\/4\@mobile {
    width: 75% !important; }
  .u-4\/4\@mobile {
    width: 100% !important; }
  .u-1\/5\@mobile {
    width: 20% !important; }
  .u-2\/5\@mobile {
    width: 40% !important; }
  .u-3\/5\@mobile {
    width: 60% !important; }
  .u-4\/5\@mobile {
    width: 80% !important; }
  .u-5\/5\@mobile {
    width: 100% !important; } }

@media (min-width: 46.25em) {
  .u-1\/1\@tablet {
    width: 100% !important; }
  .u-1\/2\@tablet {
    width: 50% !important; }
  .u-2\/2\@tablet {
    width: 100% !important; }
  .u-1\/3\@tablet {
    width: 33.33333% !important; }
  .u-2\/3\@tablet {
    width: 66.66667% !important; }
  .u-3\/3\@tablet {
    width: 100% !important; }
  .u-1\/4\@tablet {
    width: 25% !important; }
  .u-2\/4\@tablet {
    width: 50% !important; }
  .u-3\/4\@tablet {
    width: 75% !important; }
  .u-4\/4\@tablet {
    width: 100% !important; }
  .u-1\/5\@tablet {
    width: 20% !important; }
  .u-2\/5\@tablet {
    width: 40% !important; }
  .u-3\/5\@tablet {
    width: 60% !important; }
  .u-4\/5\@tablet {
    width: 80% !important; }
  .u-5\/5\@tablet {
    width: 100% !important; } }

@media (min-width: 61.25em) {
  .u-1\/1\@desktop {
    width: 100% !important; }
  .u-1\/2\@desktop {
    width: 50% !important; }
  .u-2\/2\@desktop {
    width: 100% !important; }
  .u-1\/3\@desktop {
    width: 33.33333% !important; }
  .u-2\/3\@desktop {
    width: 66.66667% !important; }
  .u-3\/3\@desktop {
    width: 100% !important; }
  .u-1\/4\@desktop {
    width: 25% !important; }
  .u-2\/4\@desktop {
    width: 50% !important; }
  .u-3\/4\@desktop {
    width: 75% !important; }
  .u-4\/4\@desktop {
    width: 100% !important; }
  .u-1\/5\@desktop {
    width: 20% !important; }
  .u-2\/5\@desktop {
    width: 40% !important; }
  .u-3\/5\@desktop {
    width: 60% !important; }
  .u-4\/5\@desktop {
    width: 80% !important; }
  .u-5\/5\@desktop {
    width: 100% !important; } }

@media (min-width: 81.25em) {
  .u-1\/1\@wide {
    width: 100% !important; }
  .u-1\/2\@wide {
    width: 50% !important; }
  .u-2\/2\@wide {
    width: 100% !important; }
  .u-1\/3\@wide {
    width: 33.33333% !important; }
  .u-2\/3\@wide {
    width: 66.66667% !important; }
  .u-3\/3\@wide {
    width: 100% !important; }
  .u-1\/4\@wide {
    width: 25% !important; }
  .u-2\/4\@wide {
    width: 50% !important; }
  .u-3\/4\@wide {
    width: 75% !important; }
  .u-4\/4\@wide {
    width: 100% !important; }
  .u-1\/5\@wide {
    width: 20% !important; }
  .u-2\/5\@wide {
    width: 40% !important; }
  .u-3\/5\@wide {
    width: 60% !important; }
  .u-4\/5\@wide {
    width: 80% !important; }
  .u-5\/5\@wide {
    width: 100% !important; } }

/* ==========================================================================
   #HEADINGS
   ========================================================================== */
/**
 * Redefine all of our basic heading styles against utility classes so as to
 * allow for double stranded heading hierarchy, e.g. we semantically need an H2,
 * but we want it to be sized like an H1:
 *
 *   <h2 class="u-h1"></h2>
 *
 */
.u-h1 {
  font-size: 36px !important;
  font-size: 2.25rem !important;
  line-height: 1.16667 !important; }

.u-h2 {
  font-size: 28px !important;
  font-size: 1.75rem !important;
  line-height: 1.28571 !important; }

.u-h3 {
  font-size: 24px !important;
  font-size: 1.5rem !important;
  line-height: 1.25 !important; }

.u-h4 {
  font-size: 20px !important;
  font-size: 1.25rem !important;
  line-height: 1.5 !important; }

.u-h5 {
  font-size: 18px !important;
  font-size: 1.125rem !important;
  line-height: 1.33333 !important; }

.u-h6 {
  font-size: 16px !important;
  font-size: 1rem !important;
  line-height: 1.5 !important; }

/* ==========================================================================
   #SPACINGS
   ========================================================================== */
/**
 * Utility classes to put specific spacing values onto elements. The below loop
 * will generate us a suite of classes like:
 *
 *   .u-margin-top {}
 *   .u-padding-left-large {}
 *   .u-margin-right-small {}
 *   .u-padding {}
 *   .u-padding-right-none {}
 *   .u-padding-horizontal {}
 *   .u-padding-vertical-small {}
 */
.u-padding {
  padding: 24px !important; }

.u-padding-tiny {
  padding: 6px !important; }

.u-padding-small {
  padding: 12px !important; }

.u-padding-large {
  padding: 48px !important; }

.u-padding-huge {
  padding: 96px !important; }

.u-padding-none {
  padding: 0 !important; }

.u-padding-top {
  padding-top: 24px !important; }

.u-padding-top-tiny {
  padding-top: 6px !important; }

.u-padding-top-small {
  padding-top: 12px !important; }

.u-padding-top-large {
  padding-top: 48px !important; }

.u-padding-top-huge {
  padding-top: 96px !important; }

.u-padding-top-none {
  padding-top: 0 !important; }

.u-padding-right {
  padding-right: 24px !important; }

.u-padding-right-tiny {
  padding-right: 6px !important; }

.u-padding-right-small {
  padding-right: 12px !important; }

.u-padding-right-large {
  padding-right: 48px !important; }

.u-padding-right-huge {
  padding-right: 96px !important; }

.u-padding-right-none {
  padding-right: 0 !important; }

.u-padding-bottom {
  padding-bottom: 24px !important; }

.u-padding-bottom-tiny {
  padding-bottom: 6px !important; }

.u-padding-bottom-small {
  padding-bottom: 12px !important; }

.u-padding-bottom-large {
  padding-bottom: 48px !important; }

.u-padding-bottom-huge {
  padding-bottom: 96px !important; }

.u-padding-bottom-none {
  padding-bottom: 0 !important; }

.u-padding-left {
  padding-left: 24px !important; }

.u-padding-left-tiny {
  padding-left: 6px !important; }

.u-padding-left-small {
  padding-left: 12px !important; }

.u-padding-left-large {
  padding-left: 48px !important; }

.u-padding-left-huge {
  padding-left: 96px !important; }

.u-padding-left-none {
  padding-left: 0 !important; }

.u-padding-horizontal {
  padding-left: 24px !important;
  padding-right: 24px !important; }

.u-padding-horizontal-tiny {
  padding-left: 6px !important;
  padding-right: 6px !important; }

.u-padding-horizontal-small {
  padding-left: 12px !important;
  padding-right: 12px !important; }

.u-padding-horizontal-large {
  padding-left: 48px !important;
  padding-right: 48px !important; }

.u-padding-horizontal-huge {
  padding-left: 96px !important;
  padding-right: 96px !important; }

.u-padding-horizontal-none {
  padding-left: 0 !important;
  padding-right: 0 !important; }

.u-padding-vertical {
  padding-top: 24px !important;
  padding-bottom: 24px !important; }

.u-padding-vertical-tiny {
  padding-top: 6px !important;
  padding-bottom: 6px !important; }

.u-padding-vertical-small {
  padding-top: 12px !important;
  padding-bottom: 12px !important; }

.u-padding-vertical-large {
  padding-top: 48px !important;
  padding-bottom: 48px !important; }

.u-padding-vertical-huge {
  padding-top: 96px !important;
  padding-bottom: 96px !important; }

.u-padding-vertical-none {
  padding-top: 0 !important;
  padding-bottom: 0 !important; }

.u-margin {
  margin: 24px !important; }

.u-margin-tiny {
  margin: 6px !important; }

.u-margin-small {
  margin: 12px !important; }

.u-margin-large {
  margin: 48px !important; }

.u-margin-huge {
  margin: 96px !important; }

.u-margin-none {
  margin: 0 !important; }

.u-margin-top {
  margin-top: 24px !important; }

.u-margin-top-tiny {
  margin-top: 6px !important; }

.u-margin-top-small {
  margin-top: 12px !important; }

.u-margin-top-large {
  margin-top: 48px !important; }

.u-margin-top-huge {
  margin-top: 96px !important; }

.u-margin-top-none {
  margin-top: 0 !important; }

.u-margin-right {
  margin-right: 24px !important; }

.u-margin-right-tiny {
  margin-right: 6px !important; }

.u-margin-right-small {
  margin-right: 12px !important; }

.u-margin-right-large {
  margin-right: 48px !important; }

.u-margin-right-huge {
  margin-right: 96px !important; }

.u-margin-right-none {
  margin-right: 0 !important; }

.u-margin-bottom {
  margin-bottom: 24px !important; }

.u-margin-bottom-tiny {
  margin-bottom: 6px !important; }

.u-margin-bottom-small {
  margin-bottom: 12px !important; }

.u-margin-bottom-large {
  margin-bottom: 48px !important; }

.u-margin-bottom-huge {
  margin-bottom: 96px !important; }

.u-margin-bottom-none {
  margin-bottom: 0 !important; }

.u-margin-left {
  margin-left: 24px !important; }

.u-margin-left-tiny {
  margin-left: 6px !important; }

.u-margin-left-small {
  margin-left: 12px !important; }

.u-margin-left-large {
  margin-left: 48px !important; }

.u-margin-left-huge {
  margin-left: 96px !important; }

.u-margin-left-none {
  margin-left: 0 !important; }

.u-margin-horizontal {
  margin-left: 24px !important;
  margin-right: 24px !important; }

.u-margin-horizontal-tiny {
  margin-left: 6px !important;
  margin-right: 6px !important; }

.u-margin-horizontal-small {
  margin-left: 12px !important;
  margin-right: 12px !important; }

.u-margin-horizontal-large {
  margin-left: 48px !important;
  margin-right: 48px !important; }

.u-margin-horizontal-huge {
  margin-left: 96px !important;
  margin-right: 96px !important; }

.u-margin-horizontal-none {
  margin-left: 0 !important;
  margin-right: 0 !important; }

.u-margin-vertical {
  margin-top: 24px !important;
  margin-bottom: 24px !important; }

.u-margin-vertical-tiny {
  margin-top: 6px !important;
  margin-bottom: 6px !important; }

.u-margin-vertical-small {
  margin-top: 12px !important;
  margin-bottom: 12px !important; }

.u-margin-vertical-large {
  margin-top: 48px !important;
  margin-bottom: 48px !important; }

.u-margin-vertical-huge {
  margin-top: 96px !important;
  margin-bottom: 96px !important; }

.u-margin-vertical-none {
  margin-top: 0 !important;
  margin-bottom: 0 !important; }