diff --git a/Gruntfile.js b/Gruntfile.js
index b3c9c8f62..9cb65298c 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -15,10 +15,142 @@ module.exports = function(grunt) {
},
target: ['core/\*\*/\*.scss']
},
+ // Examples: https://github.com/SassDoc/grunt-sassdoc/blob/master/Gruntfile.js
sassdoc: {
default: {
src: 'core',
- }
+ options: {
+ dest: 'docs/core',
+ verbose: 0,
+ autofill: ['requires', 'throws'],
+ exclude: [
+ 'vendors/*',
+ 'base/*'
+ ],
+ display: {
+ sort: [
+ 'group<',
+ 'access',
+ 'line>',
+ 'file',
+ ],
+ },
+ },
+ },
+ base: {
+ src: 'core/base',
+ options: {
+ dest: 'docs/base',
+ verbose: 0,
+ autofill: ['requires', 'throws'],
+ display: {
+ sort: [
+ 'group<',
+ 'access',
+ 'line>',
+ 'file',
+ ],
+ },
+ groups: {
+ 'base|typography': 'Typography',
+ },
+ },
+ },
+ components: {
+ src: 'core/components',
+ options: {
+ dest: 'docs/components',
+ verbose: 0,
+ autofill: ['requires', 'throws'],
+ display: {
+ sort: [
+ 'group<',
+ 'access',
+ 'line>',
+ 'file',
+ ],
+ },
+ },
+ },
+ functions: {
+ src: 'core/utilities/functions',
+ options: {
+ dest: 'docs/functions',
+ verbose: 0,
+ autofill: ['requires', 'throws'],
+ display: {
+ sort: [
+ 'group<',
+ 'access',
+ 'line>',
+ 'file',
+ ],
+ },
+ },
+ },
+ mixins: {
+ src: 'core/utilities/mixins',
+ options: {
+ dest: 'docs/mixins',
+ verbose: 0,
+ autofill: ['requires', 'throws'],
+ display: {
+ sort: [
+ 'group<',
+ 'access',
+ 'line>',
+ 'file',
+ ],
+ },
+ },
+ },
+ placeholders: {
+ src: 'core/utilities/placeholders',
+ options: {
+ dest: 'docs/placeholders',
+ verbose: 0,
+ autofill: ['requires', 'throws'],
+ display: {
+ sort: [
+ 'group<',
+ 'access',
+ 'line>',
+ 'file',
+ ],
+ },
+ },
+ },
+ variables: {
+ src: 'core/utilities/variables',
+ options: {
+ dest: 'docs/variables',
+ verbose: 0,
+ autofill: ['requires', 'throws'],
+ display: {
+ sort: [
+ 'group<',
+ 'access',
+ 'line>',
+ 'file',
+ ],
+ },
+ groups: {
+ 'variables|bourbon': 'Bourbon Settings',
+ 'variables|neat': 'Neat Settings',
+ 'variables|decanter': 'Decanter Settings',
+ 'variables|animations': 'Animations',
+ 'variables|borders': 'Borders',
+ 'variables|breakpoint-boundaries': 'Breakpoints',
+ 'variables|grid-media': 'Grid Media',
+ 'variables|buttons': 'Buttons',
+ 'variables|colors': 'Colors',
+ 'variables|containers': 'Containers',
+ 'variables|forms': 'Forms',
+ 'variables|typography': 'Typography',
+ 'variables|vertical-rhythm': 'Vertical Rhythm',
+ },
+ },
+ },
},
sass: {
// This will compile all of our sass files
@@ -94,7 +226,7 @@ module.exports = function(grunt) {
'examples/**/*.scss',
'examples/**/*.html'
],
- tasks: ['sass'],
+ tasks: ['sass', 'sassdoc'],
options: {
interrupt: true
}
diff --git a/core/base/_body.scss b/core/base/_body.scss
index 788164695..269871ebf 100644
--- a/core/base/_body.scss
+++ b/core/base/_body.scss
@@ -2,8 +2,13 @@
////
/// Root html element styles for the body and main elements.
+/// Style placement and basic settings for the top level html elements.
+/// @group base|body
////
+///
+/// Body defaults
+///
body {
min-height: 100vh;
display: flex;
@@ -12,20 +17,26 @@ body {
margin: 0;
}
-// We rely on source order for mobile-first approach
-// in this case:
-//
-// -50 header
-// -40 nav
-// 1 main
-// 50 footer
-//
-
+/// We rely on source order for mobile-first approach
+/// in this case:
+///
+/// -50 header
+/// -40 nav
+/// 1 main
+/// 50 footer
+///
body > header { order: -50; }
+
+/// Nav html element.
body > nav { order: -40; }
+
+/// Main html element of body.
body > main { order: 1; }
+
+// footer html element of body.
body > footer { order: 50; }
+/// Main html element.
main {
overflow: hidden;
background-color: color(background);
diff --git a/core/base/_box-model.scss b/core/base/_box-model.scss
index 3270f37c7..7d4836ff1 100644
--- a/core/base/_box-model.scss
+++ b/core/base/_box-model.scss
@@ -2,21 +2,21 @@
////
/// Box model default styles.
-/// @group html
+/// @group base|box-model
////
-// @import '../utilities/settings/settings';
+/// Set up a decent box model on the root element.
-// Set up a decent box model on the root element.
html {
font-size: 62.5%; // 1rem = 10px;
box-sizing: border-box;
}
-// Make all elements from the DOM inherit from the parent box-sizing
-// Since `*` has a specificity of 0, it does not override the `html` value
-// making all elements inheriting from the root box-sizing value
-// See: https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/
+/// Make all elements from the DOM inherit from the parent box-sizing
+/// Since `*` has a specificity of 0, it does not override the `html` value
+/// making all elements inheriting from the root box-sizing value
+/// See: https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/
+
*, *::before, *::after {
box-sizing: inherit;
}
@@ -24,6 +24,7 @@ html {
/// Set the base body font size.
/// @require {function} em Relative unit function
/// @require {variable} $base-font-size Base font size
+
body {
@include font-size($base-font-size, $root-font-size);
}
diff --git a/core/base/_buttons.scss b/core/base/_buttons.scss
index ca0dcecad..784b31fa8 100644
--- a/core/base/_buttons.scss
+++ b/core/base/_buttons.scss
@@ -2,11 +2,9 @@
////
/// Button base styles.
-/// @group base
+/// @group base|buttons
////
-// @import '../utilities/utilities';
-
/// Generic Button Styles.
/// @require {function} color Returns a color from the color map.
/// @require {function} em normalized relative values.
diff --git a/core/base/_fonts.scss b/core/base/_fonts.scss
index 0d608cc68..d463b538f 100644
--- a/core/base/_fonts.scss
+++ b/core/base/_fonts.scss
@@ -2,7 +2,7 @@
////
/// Base font styles.
/// This file contains all @font-face declarations, if any.
-/// @group base
+/// @group base|fonts
////
//// Load the font-face declarations.
diff --git a/core/base/_forms.scss b/core/base/_forms.scss
index f8881d7d0..c695de551 100644
--- a/core/base/_forms.scss
+++ b/core/base/_forms.scss
@@ -1,12 +1,10 @@
@charset "UTF-8";
////
/// Form base styles.
-/// @group html
+/// @group base|forms
////
-//@import '../utilities/settings/settings';
-
-// Fieldset defaults.
+/// Fieldset defaults.
fieldset {
background-color: transparent;
border: 0;
@@ -43,16 +41,15 @@ textarea {
}
/// All Text Input defaults.
+/// @require bourbon
+/// @require {function} color
+/// @require {mixin} on-event
/// @require {variable} $base-border
/// @require {variable} $base-border-radius
/// @require {variable} $form-box-shadow
/// @require {variable} $base-spacing
/// @require {variable} $base-duration
/// @require {variable} $base-timing
-/// @require {function} color
-/// @require {function} shade
-/// @require {function} tint
-/// @require {mixin} on-event
/// @group base
#{$all-text-inputs} {
$_border: $base-border;
@@ -92,7 +89,7 @@ textarea {
}
}
-// Text area styles.
+/// Text area styles.
textarea {
resize: vertical;
}
diff --git a/core/base/_lists.scss b/core/base/_lists.scss
index a7b059536..f2f49f989 100644
--- a/core/base/_lists.scss
+++ b/core/base/_lists.scss
@@ -1,12 +1,11 @@
@charset "UTF-8";
////
/// List base styles.
-/// @group html
+/// @group base|lists
////
-// @import '../utilities/settings/settings';
-// List classes.
+/// List classes.
ul.plain,
ol.plain {
list-style-type: none;
@@ -14,15 +13,16 @@ ol.plain {
padding: 0;
}
+/// plain
dl.plain {
margin: 0;
}
-
+/// plain
dt.plain {
font-weight: 600;
margin: 0;
}
-
+/// plain
dd.plain {
margin: 0;
}
@@ -38,6 +38,7 @@ ol {
}
}
+/// uls
ul {
list-style: disc;
ul {
@@ -83,6 +84,7 @@ li > ol {
dl {
margin: 0 0 modular-scale(-5);
}
+/// dt
dt {
font-weight: 600;
}
diff --git a/core/base/_media-elements.scss b/core/base/_media-elements.scss
index 67c79fd52..7d365e919 100644
--- a/core/base/_media-elements.scss
+++ b/core/base/_media-elements.scss
@@ -2,7 +2,7 @@
////
/// Meida base styles.
-/// @group html
+/// @group base|media
////
// @import '../utilities/settings/settings';
diff --git a/core/base/_tables.scss b/core/base/_tables.scss
index c6b8989b8..59f3a2ddc 100644
--- a/core/base/_tables.scss
+++ b/core/base/_tables.scss
@@ -1,7 +1,7 @@
@charset "UTF-8";
////
/// Media base styles.
-/// @group html
+/// @group base|tables
////
//@import '../utilities/settings/settings';
diff --git a/core/base/_typography.scss b/core/base/_typography.scss
index a14e2ba05..1de9a8486 100644
--- a/core/base/_typography.scss
+++ b/core/base/_typography.scss
@@ -1,7 +1,7 @@
@charset "UTF-8";
////
/// This file contains Site-wide typography base styles.
-/// @group html
+/// @group base|typography
////
// @import '../utilities/settings/settings';
diff --git a/core/utilities/_decanter-utilities.scss b/core/utilities/_decanter-utilities.scss
index 4a2f8f719..edfcb3393 100644
--- a/core/utilities/_decanter-utilities.scss
+++ b/core/utilities/_decanter-utilities.scss
@@ -1,11 +1,15 @@
@charset 'UTF-8';
////
-/// Roll Up
+/// Roll Up Partial
+///
+/// This partial is only meant to include all of the immediate parent's partials.
+/// Do not include any sort of work in this file other than the import function.
////
@import
- 'functions/decanter-functions',
- 'mixins/decanter-mixins',
- 'variables/decanter-variables',
- 'placeholders/decanter-placeholders';
+ 'functions/decanter-functions'
+, 'mixins/decanter-mixins'
+, 'variables/decanter-variables'
+, 'placeholders/decanter-placeholders'
+;
diff --git a/core/utilities/functions/_color.scss b/core/utilities/functions/_color.scss
index d96a983de..0a843000c 100644
--- a/core/utilities/functions/_color.scss
+++ b/core/utilities/functions/_color.scss
@@ -4,25 +4,23 @@
/// File comment here
////
-$colors: () !default;
-
/// Return a color from the color map.
///
/// @group core functions
///
/// @name color
///
-/// @argument {map} $color-palette
-///
-/// @argument {string} $color
+/// @arg {color} color [null] - The color returned by the function
+/// @arg {map} $color-palette [$colors] - The color map to use to retrieve the color
///
-/// @return {string} color hex value
///
-/// @example scss
+/// @example scss - SCSS
/// background-color: color(white);
///
-/// @example css
+/// @example css - CSS
/// background-color: #fff;
+///
+/// @requires {variable} $colors
@function color($color, $palette: ()) {
// First, we marge this default color palette with the decanter color palette we set up in `variables/color`
@@ -30,14 +28,14 @@ $colors: () !default;
// Unbranded, default color palette
brand: #004fdc,
action: #004991,
- action-active: #005ddc,
+ action--active: #005ddc,
background: #fff,
- background-secondary: #ddd,
+ background--secondary: #ddd,
border: #999,
text: #112,
- text-active: #808080,
+ text--active: #808080,
reverse-text: #fff,
- reverse-text-active: #dceefe,
+ reverse-text--active: #dceefe,
// Generic Color Palette
// see http://clrs.cc
diff --git a/core/utilities/functions/layout/_set-container-padding.scss b/core/utilities/functions/layout/_set-container-padding.scss
index ca54f45d9..be63c74bb 100644
--- a/core/utilities/functions/layout/_set-container-padding.scss
+++ b/core/utilities/functions/layout/_set-container-padding.scss
@@ -2,7 +2,12 @@
/// Set Container padding
/// Creates a fluid container of a certain number of columns.
-// Can be constrained to a specific max width, or to the project's global `$max-container-width`.
+/// Can be constrained to a specific max width, or to the project's global `$max-container-width`.
+///
+/// @param {number | string} columns [null] - The number of columns the container spans (ex: 1 or 1 of 2)
+/// @param {map} grid [$neat-grid] - The grid to base the calculations on.
+/// @param {length(with unit)} v-space [1em] - The value for padding-top and padding-bottom in a container
+/// @param {boolean} max-width [false] - Whether the container's columns are based on the full parent width, or on a set max width
@function _set-container-padding(
$columns: null,
diff --git a/core/utilities/mixins/_material-shadow.scss b/core/utilities/mixins/_material-shadow.scss
index 9b2cf9230..ab8611683 100644
--- a/core/utilities/mixins/_material-shadow.scss
+++ b/core/utilities/mixins/_material-shadow.scss
@@ -5,23 +5,23 @@
/// @author Kevin Garcia
/// @group mixins
///
-/// @arg {strong} $depth [flat | shallow | medium | deep] - how deep the shadow appears to be. May be flat, shallow, medium, or deep.
-///
+/// @arg {string} Depth [shallow] - How deep the shadow appears to be. Default is Shallow.
/// @require {function} rgba
///
-/// @example scss
+/// @example - scss SCSS
/// .element {
/// @include material-shadow(shallow);
/// }
///
-/// @example css
+/// @example - css CSS
/// .element {
/// box-shadow: 0px 0px 12px 0px rgba(0,0,0,0.10), 2px 4px 7px 0px rgba(0,0,0,0.15);
/// }
@mixin material-shadow
(
- $depth: shallow
+ $depth: shallow
) {
+// Depths: flat | shallow | medium | deep
@media screen {
@if $depth == 'flat' {
// Box Shadow: offset-x | offset-y | blur-radius | spread-radius | color
diff --git a/core/utilities/mixins/theme/_color-theme.scss b/core/utilities/mixins/theme/_color-theme.scss
index 6e7cf743b..48554725f 100644
--- a/core/utilities/mixins/theme/_color-theme.scss
+++ b/core/utilities/mixins/theme/_color-theme.scss
@@ -1,5 +1,8 @@
@charset "UTF-8";
+// Dependency on the $colors variable.
+@import '../../variables/colors';
+
/// `color-theme` allows you to change the default color palette within the specified block.
/// optionally, it lets you target a specific selector.
///
diff --git a/core/utilities/mixins/theme/_color-themes.scss b/core/utilities/mixins/theme/_color-themes.scss
index fe3bbac46..a7f668dd2 100644
--- a/core/utilities/mixins/theme/_color-themes.scss
+++ b/core/utilities/mixins/theme/_color-themes.scss
@@ -1,5 +1,19 @@
@charset "UTF-8";
+////
+/// Color Themes mixin
+/// @group mixins|theme
+////
+
+// Dependency on the $colors variable.
+@import '../../variables/colors';
+
+///
+///
+$default-theme-group: (
+ default: ( palette: $colors, selector: '&' ),
+) !default;
+
/// `color-themes` consumes a map to render multiple color variations on a specific block. For each
/// theme group in the theme group map, the `$color-themes` mixin iterates over that group with the specified selector.
///
@@ -19,26 +33,26 @@
/// $green-theme: (
/// brand: #2c853c,
/// action: #00992b,
-/// action-active: #007b38,
+/// action--active: #007b38,
/// background: #fff,
-/// background-secondary: #f4f4f4,
+/// background--secondary: #f4f4f4,
/// border: #ccc,
/// text: #121111,
-/// text-active: #00992b,
+/// text--active: #00992b,
/// reverse-text: #fff,
-/// reverse-text-active: #fff,
+/// reverse-text--active: #fff,
/// );
/// $blue-theme: (
/// brand: #3B7185,
/// action: #297C85,
/// action-active: #004a7b,
/// background: #fff,
-/// background-secondary: #f4f4f4,
+/// background--secondary: #f4f4f4,
/// border: #ccc,
/// text: #121111,
-/// text-active: #297C85,
+/// text--active: #297C85,
/// reverse-text: #fff,
-/// reverse-text-active: #fff,
+/// reverse-text--active: #fff,
/// );
/// $custom-theme-group: (
/// default ( palette: $colors, selector: '&' ),
@@ -67,11 +81,6 @@
/// color: #297C85;
/// }
///
-
-$default-theme-group: (
- default: ( palette: $colors, selector: '&' ),
-) !default;
-
@mixin color-themes($theme-group: null) {
@each $_theme, $_map in $theme-group {
diff --git a/core/utilities/variables/_animations.scss b/core/utilities/variables/_animations.scss
index 6e9961acc..0a3726242 100644
--- a/core/utilities/variables/_animations.scss
+++ b/core/utilities/variables/_animations.scss
@@ -2,6 +2,7 @@
////
/// Animations
+/// @group variables|animations
////
/// Base property animation default.
diff --git a/core/utilities/variables/_borders.scss b/core/utilities/variables/_borders.scss
index e5d80eeaf..f80978421 100644
--- a/core/utilities/variables/_borders.scss
+++ b/core/utilities/variables/_borders.scss
@@ -2,6 +2,7 @@
////
/// Borders
+/// @group variables|borders
////
/// Base border radius.
diff --git a/core/utilities/variables/_breakpoints.scss b/core/utilities/variables/_breakpoints.scss
index ab06feff0..461c7bc43 100644
--- a/core/utilities/variables/_breakpoints.scss
+++ b/core/utilities/variables/_breakpoints.scss
@@ -5,121 +5,322 @@
////
// Breakpoint Boundaries
-// @type length
-// These correspond to the Bootstrap 4 Responsive Breakpoints
-// Lower boundaries
-// ----------------
-
-/// Screen XS Min
+/// Lower Boundary for extra small screens
+/// @group variables|breakpoint-boundaries
+/// @type variable
$screen-xs-min: 0px !default;
-/// Screen SM Min
+/// Lower boundary for small screens
+/// @group variables|breakpoint-boundaries
+/// @type variable
$screen-sm-min: 576px !default;
-/// Screen MD Min
+/// Lower boundary for medium screens
+/// @group variables|breakpoint-boundaries
+/// @type variable
$screen-md-min: 768px !default;
-/// Screen LG Min
+/// Lower boundary for large screens
+/// @group variables|breakpoint-boundaries
+/// @type variable
$screen-lg-min: 992px !default;
-/// Screen XL Min
+/// Lower boundary for extra large screens
+/// @group variables|breakpoint-boundaries
+/// @type variable
$screen-xl-min: $max-container-width !default;
-// Upper boundaries
-// ----------------
-/// Screen XS Max
+/// Upper boundary for extra small screens
+/// @group variables|breakpoint-boundaries
+/// @requires $screen-xs-min
+/// @type variable
$screen-xs-max: $screen-sm-min - 1px !default;
-/// Screen SM Max
+/// Upper boundary for small screens
+/// @group variables|breakpoint-boundaries
+/// @requires $screen-sm-min
+/// @type variable
$screen-sm-max: $screen-md-min - 1px !default;
-/// Screen MD Max
+/// Upper boundary for medium screens
+/// @group variables|breakpoint-boundaries
+/// @requires $screen-lg-min
+/// @type variable
$screen-md-max: $screen-lg-min - 1px !default;
-/// Screen LG Max
+/// Upper boundary for large screens
+/// @group variables|breakpoint-boundaries
+/// @requires $screen-xl-min
+/// @type variable
$screen-lg-max: $screen-xl-min - 1px !default;
-/// Custom neat grids:
-/// Media XS only
+// Neat Media Queries
+
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media [$screen-xs-min]
+/// Grid media query.
+///
+/// @requires $screen-xs-min
+///
$media-xs: (
- columns: 12,
media: $screen-xs-min,
) !default;
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (max-width: $screen-xs-max)']
+/// Grid media query.
+///
+/// @requires $screen-xs-max
+///
$media-xs-only: (
- columns: 12,
media: 'only screen and (max-width: #{$screen-xs-max})',
) !default;
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (max-width: $screen-xs-max)']
+/// Grid media query.
+///
+/// @requires $screen-xs-max
+///
$media-xs-max: (
- columns: 12,
media: 'only screen and (max-width: #{$screen-xs-max})',
) !default;
-/// Media SM
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media [$screen-sm-min]
+/// Grid media query.
+///
+/// @requires $screen-sm-min
+///
$media-sm: (
- columns: 12,
media: $screen-sm-min,
) !default;
-/// Media SM only
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (min-width: $screen-sm-min) and (max-width: $screen-sm-max)']
+/// Grid media query.
+///
+/// @requires $screen-sm-min
+/// @requires $screen-sm-max
+///
$media-sm-only: (
- columns: 12,
media: 'only screen and (min-width: #{$screen-sm-min}) and (max-width: #{$screen-sm-max})',
) !default;
-/// Media SM max
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (max-width: $screen-sm-max)']
+/// Grid media query.
+///
+/// @requires $screen-sm-max
+///
$media-sm-max: (
- columns: 12,
media: 'only screen and (max-width: #{$screen-sm-max})',
) !default;
-/// Media MD
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} $screen-md-min]
+/// Grid media query.
+///
+/// @requires $screen-md-min
+///
$media-md: (
- columns: 12,
media: $screen-md-min,
) !default;
-/// Media MD only
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (min-width: $screen-md-min) and (max-width: $screen-md-max)']
+/// Grid media query.
+///
+/// @requires $screen-md-min
+/// @requires $screen-md-max
+///
$media-md-only: (
- columns: 12,
media: 'only screen and (min-width: #{$screen-md-min}) and (max-width: #{$screen-md-max})',
) !default;
-/// Media MD max
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (max-width: $screen-md-max)']
+/// Grid media query.
+///
+/// @requires $screen-md-max
+///
$media-md-max: (
- columns: 12,
media: 'only screen and (max-width: #{$screen-md-max})',
) !default;
-/// Media LG
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} $screen-lg-min]
+/// Grid media query.
+///
+/// @requires $screen-lg-min
+///
$media-lg: (
- columns: 12,
media: $screen-lg-min,
) !default;
-/// Media LG only
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (min-width: $screen-lg-min) and (max-width: $screen-lg-max)']
+/// Grid media query.
+///
+/// @requires $screen-lg-min
+/// @requires $screen-lg-max
$media-lg-only: (
- columns: 12,
media: 'only screen and (min-width: #{$screen-lg-min}) and (max-width: #{$screen-lg-max})',
) !default;
-/// Media LG max
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} media ['only screen and (max-width: $screen-lg-max)']
+/// Grid media query.
+///
+/// @requires $screen-lg-max
+///
$media-lg-max: (
- columns: 12,
media: 'only screen and (max-width: #{$screen-lg-max})',
) !default;
-/// Media XL
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat Docs - Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [null]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [null]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} $screen-xl-min]
+/// Grid media query.
+///
+/// @requires $screen-xl-min
+///
$media-xl: (
- columns: 12,
media: $screen-xl-min,
) !default;
-/// Media print
+/// @group variables|grid-media
+/// @link http://neat.bourbon.io/docs/latest/#grid-media Neat | Grid Media
+/// @type map
+///
+/// @property {number (unitless)} columns [12]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [.25in]
+/// Default grid gutter width between columns.
+///
+/// @property {string | number (with unit)} 'only print']
+/// Grid media query.
+///
$media-print: (
columns: 12,
gutter: .25in,
diff --git a/core/utilities/variables/_color.scss b/core/utilities/variables/_color.scss
deleted file mode 100644
index 320aa11d2..000000000
--- a/core/utilities/variables/_color.scss
+++ /dev/null
@@ -1,64 +0,0 @@
-@charset "UTF-8";
-
-////
-/// Colors
-////
-
-/// This variable is a sass map that overrides our generic color map.
-/// Use this to define your project's color palette.
-///
-/// @type map
-///
-/// @group settings
-///
-/// @name Colors
-///
-/// @property {color} color [null]
-/// The color value retrieved by the color function
-///
-/// @example scss
-/// $colors: (
-/// brand: #8c1515,
-/// text: #333,
-/// link: #ff4136,
-/// link-hover: 82121B,
-/// red: #ff4136,
-/// );
-$colors: (
- // Decanter Colors
- brand: #004fdc,
- action: #004991,
- action--active: #005ddc,
- background: #fff,
- background--secondary: #ddd,
- border: #999,
- text: #112,
- text-active: #808080,
- reverse-text: #fff,
- reverse-text--active: #dceefe,
-) !default;
-
-/// Custom Colors Map
-/// If you would like to have multiple color palettes in a single project, you can do
-/// this by defining a new map stored within a variable of your choosing. This
-/// variable can then be passed directly to the color() function, such as
-/// `color(red, $my-custom-colors)`.
-///
-/// @type map
-///
-/// @group settings
-///
-/// @name Custom color palettes
-///
-/// @property {color} color [null]
-/// The color value retrieved by the color function
-///
-/// @example scss
-/// $my-custom-palette: (
-/// brand: #ff4136,
-/// text: #333,
-/// action: #ff4136,
-/// action-hover: 82121B,
-/// red: #ff4136,
-/// );
-$custom-colors: () !default;
diff --git a/core/utilities/variables/_colors.scss b/core/utilities/variables/_colors.scss
new file mode 100644
index 000000000..3c74ae53f
--- /dev/null
+++ b/core/utilities/variables/_colors.scss
@@ -0,0 +1,61 @@
+@charset "UTF-8";
+
+////
+/// Colors
+/// @group variables|colors
+////
+
+/// This variable is a sass map that overrides our generic color map.
+/// Use this to define your project's color palette.
+///
+/// @name Colors
+///
+/// @type map
+///
+/// @prop {Color} brand [#004fdc] - Brand Color
+/// @prop {Color} action [#33548F] - Action Color (such as links)
+/// @prop {Color} action--active [#33548F] - Action Color (when in hover, active and focus states)
+/// @prop {Color} background [#fff] - Background color
+/// @prop {Color} background--secondary [#ddd] - Secondary Background Color
+/// @prop {Color} border [#999] - Border Color
+/// @prop {Color} text [#112] - Text color
+/// @prop {Color} text--active [$808080] - Text Color (when interacted with. This is an edge case)
+/// @prop {Color} reverse-text [#fff] - Reverse Text Color (when the background is a dark color)
+/// @prop {Color} reverse-text--active [#dceefe] - Reverse Text Color (when in hover, active and focus states)
+
+$colors: (
+ brand: #004fdc,
+ action: #006cb8,
+ action--active: #33548F,
+ background: #fff,
+ background--secondary: #ddd,
+ border: #999,
+ text: #112,
+ text--active: #808080,
+ reverse-text: #fff,
+ reverse-text--active: #dceefe,
+) !default;
+
+/// If you would like to have multiple color palettes in a single project, you can do
+/// this by defining a new map stored within a variable of your choosing. This
+/// variable can then be passed directly to the color() function, such as
+/// `color(red, $my-custom-colors)`. Note that you don't need to define any colors that
+/// you want to default to the default color map, and colors that don't exist in the color
+/// map will be defined in your custom color palette only.
+///
+/// @name Custom Colors
+///
+/// @type map
+///
+/// @prop {Color} brand [#004fdc] - Brand Color
+/// @prop {Color} action [#004991] - Action Color (such as links)
+/// @prop {Color} action--active [#005ddc] - Action Color (when in hover, active and focus states)
+/// @prop {Color} background [#fff] - Background color
+/// @prop {Color} background--secondary [#ddd] - Secondary Background Color
+/// @prop {Color} border [#999] - Border Color
+/// @prop {Color} text [#112] - Text color
+/// @prop {Color} text--active [$808080] - Text Color (when interacted with. This is an edge case)
+/// @prop {Color} reverse-text [#fff] - Reverse Text Color (when the background is a dark color)
+/// @prop {Color} reverse-text--active [#dceefe] - Reverse Text Color (when in hover, active and focus states)
+
+$custom-color-palette: ()!default;
\ No newline at end of file
diff --git a/core/utilities/variables/_containers.scss b/core/utilities/variables/_containers.scss
index c64885546..45036e828 100644
--- a/core/utilities/variables/_containers.scss
+++ b/core/utilities/variables/_containers.scss
@@ -1,6 +1,46 @@
@charset "UTF-8";
+////
+/// Containers
+/// @group variables|containers
+////
+
/// Default Responsive Container
+///
+/// The deafult responsive container map for the responsive-container mixin.
+///
+/// @see responsive-container
+///
+/// @type map
+///
+/// @property {map} xs
+/// Global dark color for the `contrast-switch` function.
+///
+/// @property {map} sm
+/// Global light color for the `contrast-switch` function.
+///
+/// @property {map} md
+/// Global font file formats for the `font-face` mixin.
+///
+/// @property {map} lg
+/// Global base value for the `modular-scale` function.
+///
+/// @property {map} xl
+/// balhs
+///
+/// @property {map} print
+/// Set this to `true` when using the Rails Asset Pipeline and Bourbon will
+///
+/// @example scss
+/// $bourbon: (
+/// "contrast-switch-dark-color": #000,
+/// "contrast-switch-light-color": #fff,
+/// "global-font-file-formats": ("ttf", "woff2", "woff"),
+/// "modular-scale-base": 1em,
+/// "modular-scale-ratio": $major-third,
+/// "rails-asset-pipeline": false,
+/// );
+
$default-container: (
xs: ( columns: 12, grid-media: $media-xs-only, v-space: 1em, max-width: false, grid-collapse: false ),
sm: ( columns: 12, grid-media: $media-sm-only, v-space: 1em, max-width: false, grid-collapse: false ),
@@ -10,8 +50,8 @@ $default-container: (
print: ( columns: 12, grid-media: $media-print, v-space: 1em, max-width: false, grid-collapse: false ),
) !default;
-/// Default Responsive Container Collapsed
-$default-container-collapsed: (
+/// @alias $default-container
+$default-container--collapsed: (
xs: ( columns: 12, grid-media: $media-xs-only, v-space: 1em, max-width: false, grid-collapse: true ),
sm: ( columns: 12, grid-media: $media-sm-only, v-space: 1em, max-width: false, grid-collapse: true ),
md: ( columns: 12, grid-media: $media-md-only, v-space: 1em, max-width: false, grid-collapse: true ),
diff --git a/core/utilities/variables/_decanter-variables.scss b/core/utilities/variables/_decanter-variables.scss
index 34febf846..23e9eff7b 100644
--- a/core/utilities/variables/_decanter-variables.scss
+++ b/core/utilities/variables/_decanter-variables.scss
@@ -1,7 +1,7 @@
@charset 'UTF-8';
////
-/// @group utilities
+/// Decanter Variables
////
// Decanter global settings
@@ -28,7 +28,7 @@
, 'borders'
, 'breakpoints'
, 'buttons'
- , 'color'
+ , 'colors'
, 'containers'
, 'forms'
;
diff --git a/core/utilities/variables/_forms.scss b/core/utilities/variables/_forms.scss
index 7ce863941..3ac492e05 100644
--- a/core/utilities/variables/_forms.scss
+++ b/core/utilities/variables/_forms.scss
@@ -2,12 +2,14 @@
////
/// Forms
+/// @group variables|forms
////
/// Form box shadow default.
-/// @requires {function} rbga
-/// @requires {function} color
+/// @require {function} color
$form-box-shadow: inset 0 1px 3px rgba(color(black), 0.06) !default;
/// Form box shadow focus default.
+/// @require {variable} lightness
+/// @require {variable} alpha
$form-box-shadow-focus: $form-box-shadow, 0 0 5px adjust-color(color(blue), $lightness: -5%, $alpha: -0.3) !default;
diff --git a/core/utilities/variables/_typography.scss b/core/utilities/variables/_typography.scss
index 7ebd7e54e..10122edfa 100644
--- a/core/utilities/variables/_typography.scss
+++ b/core/utilities/variables/_typography.scss
@@ -2,12 +2,11 @@
////
/// Typography
+/// @group variables|typography
////
-// Individual Font family definitions
-// ----------------------------------
-
/// Font Stack Monospace.
+///
/// This is outputted via `font-family: $font-stack-monospace;`
$decanter-default-fonts: (
@@ -37,10 +36,15 @@ $heading-font-family: unquote(map-get($decanter-font-families, serif)) !default;
$monospace-font-family: unquote(map-get($decanter-font-families, monospace)) !default;
/// Base Line Height.
+/// @todo find out where this is used and let people know. I assume everywhere.
+/// @type number
$base-line-height: 1.5 !default;
/// Heading Line Height.
+/// @todo find out where this is used and let people know. I assume everywhere.
+/// @type number
$heading-line-height: 1.2 !default;
-/// All Headlines
+/// All Headlines list selector
+/// @type list
$all-headlines: 'h1, h2, h3, h4, h5, h6' !default;
diff --git a/core/utilities/variables/_variables-bourbon.scss b/core/utilities/variables/_variables-bourbon.scss
index fbda3ab63..e6b77d01b 100644
--- a/core/utilities/variables/_variables-bourbon.scss
+++ b/core/utilities/variables/_variables-bourbon.scss
@@ -1,12 +1,14 @@
@charset "UTF-8";
////
+/// Bourbon settings
/// This file contains bourbon specific variable overrides.
-/// @group settings
+/// @group variables|bourbon
////
-
-/// @name Bourbon Settings
+/// Bourbon Settings
+///
+/// Bourbon default overrides for decanter.
///
/// @type map
///
@@ -19,10 +21,12 @@
/// @property {list} global-font-file-formats [("ttf", "woff2", "woff")]
/// Global font file formats for the `font-face` mixin.
///
-/// @property {number (with unit)} modular-scale-base [1em]
+/// @property {number | em measurement} modular-scale-base [1em]
/// Global base value for the `modular-scale` function.
///
-/// @property {number (unitless)} modular-scale-ratio [$major-third (1.25)]
+/// @property {number$default-theme-group: (
+/// default: ( palette: $colors, selector: '&' ),
+/// ) !default;} modular-scale-ratio [$major-third (1.25)]
/// Global base ratio for the `modular-scale` function.
///
/// @property {boolean} rails-asset-pipeline [false]
@@ -40,7 +44,7 @@
/// "rails-asset-pipeline": false,
/// );
///
-/// @group settings
+/// @link https://github.com/thoughtbot/bourbon/blob/master/core/bourbon/settings/_settings.scss
$bourbon: (
"modular-scale-ratio": 1.25,
) !default;
diff --git a/core/utilities/variables/_variables-decanter.scss b/core/utilities/variables/_variables-decanter.scss
index c194901c7..d5437de10 100644
--- a/core/utilities/variables/_variables-decanter.scss
+++ b/core/utilities/variables/_variables-decanter.scss
@@ -1,58 +1,49 @@
@charset "UTF-8";
////
+/// Decanter settings
/// This file contains decanter specific variables.
-/// @group settings
+/// @group variables|decanter
////
-/// Root font size in pixels. Used for converting rem to pixels.
+/// Root font size in pixels.
+/// Used for converting rem to pixels.
///
-/// @type length
-///
-/// @group settings
+/// @type number | pixel measurement
$root-font-size: 10px !default;
-/// Base font size in pixels. Used for converting between em and absolute lengths.
-/// @type length
+/// Base font size in pixels.
+/// Used for converting between em and absolute lengths.
///
-/// @group settings
+/// @type number | pixel measurement
$base-font-size: 18px !default;
/// Grid Columns
-///
-/// @type number (unitless)
-///
/// How many columns in the default grid
///
-/// @group settings
+/// @type number
$grid-columns: 12 !default;
/// Gutter
-///
-/// @type length (with unit)
-///
/// The space on the left and right of default grid elements
///
-/// @group settings
+/// @type number | pixel measurement
$gutter: 20px !default;
/// Max width, including horizontal gutters.
// This is also used to generate our XL breakpoint.
-/// @type length (with unit)
-///
-/// @group settings
+//
+/// @type number | pixel measurement
$max-container-width: 1200px !default;
/// Max Content Width
-///
-/// @type length
-///
/// Removes gutters from the max-container-width constant to give us a computed content-width.
///
-/// @group settings
+/// @type number | pixel measurement
$max-content-width: $max-container-width - ($gutter * 2) !default;
-/// Breakpoint Helper. Generates a set of configurable breakpoint visual prompts to aid during development.
+/// Breakpoint Helper.
+/// Generates a set of configurable breakpoint visual prompts to aid during development.
+///
/// @type bool
-/// @group settings
$breakpoint-helper: true;
diff --git a/core/utilities/variables/_variables-neat.scss b/core/utilities/variables/_variables-neat.scss
index e22c7f45c..e559bdefe 100644
--- a/core/utilities/variables/_variables-neat.scss
+++ b/core/utilities/variables/_variables-neat.scss
@@ -1,8 +1,9 @@
@charset "UTF-8";
////
+/// Neat settings
/// This file contains neat specific variable overrides.
-/// @group settings
+/// @group variables|neat
////
/// This variable is a sass map that overrides Neat's default grid settings.
@@ -10,8 +11,8 @@
/// total column count.
///
/// @type map
-///
-/// @name Neat grid
+/// @link http://neat.bourbon.io/docs/2.0.0/
+/// @name Neat Settings
///
/// @property {number (unitless)} columns [12]
/// Default number of the total grid columns.
@@ -25,13 +26,12 @@
/// @property {color} color [rgba(#00d4ff, 0.25)]
/// Default visual grid color.
///
-/// @example scss
+/// @example scss SCSS
/// $neat-grid: (
/// columns: 12,
/// gutter: 20px,
/// );
///
-/// @group settings
$neat-grid: (
columns: $grid-columns,
gutter: $gutter,
diff --git a/core/utilities/variables/_vertical-rhythm.scss b/core/utilities/variables/_vertical-rhythm.scss
index 5cdaee430..a46ab1b11 100644
--- a/core/utilities/variables/_vertical-rhythm.scss
+++ b/core/utilities/variables/_vertical-rhythm.scss
@@ -1,9 +1,28 @@
+@charset 'UTF-8';
+
////
/// Vertical Rhythm
+/// @group variables|vertical-rhythm
////
/// Base vertical spacing.
+/// Uses the bourbon function modular-scale to procude an em size.
+/// @require {function} modular-scale
+/// @type String
+/// @link http://bourbon.io/docs/#modular-scale
+/// @example - SCSS
+///
+/// $_spacing: $base-spacing; // 1.77689em
+///
$base-spacing: modular-scale(0) !default;
/// Small vertical spacing.
+/// Uses the bourbon function modular-scale to procude an em size.
+/// @require {function} modular-scale
+/// @type String
+/// @link http://bourbon.io/docs/#modular-scale
+/// @example - SCSS
+///
+/// $_spacing: $small-spacing; // 0.75019em
+///
$small-spacing: modular-scale(-1) !default;
diff --git a/docs/_config.yml b/docs/_config.yml
deleted file mode 100644
index 2f7efbeab..000000000
--- a/docs/_config.yml
+++ /dev/null
@@ -1 +0,0 @@
-theme: jekyll-theme-minimal
\ No newline at end of file
diff --git a/sassdoc/assets/css/main.css b/docs/base/assets/css/main.css
similarity index 100%
rename from sassdoc/assets/css/main.css
rename to docs/base/assets/css/main.css
diff --git a/sassdoc/assets/images/favicon.png b/docs/base/assets/images/favicon.png
similarity index 100%
rename from sassdoc/assets/images/favicon.png
rename to docs/base/assets/images/favicon.png
diff --git a/sassdoc/assets/images/logo_full_compact.svg b/docs/base/assets/images/logo_full_compact.svg
similarity index 100%
rename from sassdoc/assets/images/logo_full_compact.svg
rename to docs/base/assets/images/logo_full_compact.svg
diff --git a/sassdoc/assets/images/logo_full_inline.svg b/docs/base/assets/images/logo_full_inline.svg
similarity index 100%
rename from sassdoc/assets/images/logo_full_inline.svg
rename to docs/base/assets/images/logo_full_inline.svg
diff --git a/sassdoc/assets/images/logo_light_compact.svg b/docs/base/assets/images/logo_light_compact.svg
similarity index 100%
rename from sassdoc/assets/images/logo_light_compact.svg
rename to docs/base/assets/images/logo_light_compact.svg
diff --git a/sassdoc/assets/images/logo_light_inline.svg b/docs/base/assets/images/logo_light_inline.svg
similarity index 100%
rename from sassdoc/assets/images/logo_light_inline.svg
rename to docs/base/assets/images/logo_light_inline.svg
diff --git a/sassdoc/assets/js/main.js b/docs/base/assets/js/main.js
similarity index 100%
rename from sassdoc/assets/js/main.js
rename to docs/base/assets/js/main.js
diff --git a/sassdoc/assets/js/main.min.js b/docs/base/assets/js/main.min.js
similarity index 100%
rename from sassdoc/assets/js/main.min.js
rename to docs/base/assets/js/main.min.js
diff --git a/sassdoc/assets/js/search.js b/docs/base/assets/js/search.js
similarity index 100%
rename from sassdoc/assets/js/search.js
rename to docs/base/assets/js/search.js
diff --git a/sassdoc/assets/js/sidebar.js b/docs/base/assets/js/sidebar.js
similarity index 100%
rename from sassdoc/assets/js/sidebar.js
rename to docs/base/assets/js/sidebar.js
diff --git a/sassdoc/assets/js/vendor/fuse.min.js b/docs/base/assets/js/vendor/fuse.min.js
similarity index 100%
rename from sassdoc/assets/js/vendor/fuse.min.js
rename to docs/base/assets/js/vendor/fuse.min.js
diff --git a/sassdoc/assets/js/vendor/jquery.min.js b/docs/base/assets/js/vendor/jquery.min.js
similarity index 100%
rename from sassdoc/assets/js/vendor/jquery.min.js
rename to docs/base/assets/js/vendor/jquery.min.js
diff --git a/sassdoc/assets/js/vendor/prism.min.js b/docs/base/assets/js/vendor/prism.min.js
similarity index 100%
rename from sassdoc/assets/js/vendor/prism.min.js
rename to docs/base/assets/js/vendor/prism.min.js
diff --git a/docs/base/index.html b/docs/base/index.html
new file mode 100644
index 000000000..62a8f933c
--- /dev/null
+++ b/docs/base/index.html
@@ -0,0 +1,135 @@
+
Decanter - v0.1.0-alpha1base
csss
@css #{$all-text-inputs}() { ... }
base|body
csss
@css body > header() { ... }
@css body > nav() { ... }
@css body > main() { ... }
base|box-model
csss
@css *, *::before, *::after() { ... }
base|buttons
placeholders
%button__secondary { ... }
Description
Requires
csss
@css #{$all-buttons}() { ... }
base|forms
csss
@css input,
+select,
+textarea() { ... }
@css [type="checkbox"],
+[type="radio"]() { ... }
@css [type="file"]() { ... }
base|lists
csss
@css ul.plain,
+ol.plain() { ... }
@css li > ul,
+li > ol() { ... }
Typography
csss
@css #{$all-headlines}() { ... }
@css blockquote, q() { ... }
@css code, kbd, tt, var() { ... }
@css abbr, acronym() { ... }
@css small,
+.small-text() { ... }
@css big,
+.large-text() { ... }
\ No newline at end of file
diff --git a/docs/components/assets/css/main.css b/docs/components/assets/css/main.css
new file mode 100644
index 000000000..c30e6a040
--- /dev/null
+++ b/docs/components/assets/css/main.css
@@ -0,0 +1 @@
+.container:after,.header:after,.searchbar:after{content:"";display:table;clear:both}.visually-hidden{width:1px;height:1px;position:absolute;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.sidebar__title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}code[class*='language-'],pre[class*='language-']{color:black;text-shadow:0 1px white;font-family:Consolas, Monaco, 'Andale Mono', monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*='language-']::-moz-selection,pre[class*='language-'] ::-moz-selection,code[class*='language-']::-moz-selection,code[class*='language-'] ::-moz-selection{text-shadow:none;background:#b3d4fc}pre[class*='language-']::selection,pre[class*='language-'] ::selection,code[class*='language-']::selection,code[class*='language-'] ::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*='language-'],pre[class*='language-']{text-shadow:none}}pre[class*='language-']{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*='language-'],pre[class*='language-']{background:white}:not(pre)>code[class*='language-']{padding:.1em;border-radius:.3em}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:slategray}.token.punctuation{color:#999}.namespace{opacity:.7}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol{color:#905}.token.selector,.token.attr-name,.token.string,.token.builtin{color:#690}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:#a67f59;background:rgba(255,255,255,0.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.regex,.token.important{color:#e90}.token.important{font-weight:bold}.token.entity{cursor:help}html{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*,*::after,*::before{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}body{font:1em/1.35 "Open Sans","Helvetica Neue Light","Helvetica Neue","Helvetica","Arial",sans-serif;overflow:auto;margin:0}a{transition:0.15s;text-decoration:none;color:#dd5a6f}a:hover,a:hover code{color:#333}table p{margin:0 0 0.5rem}:not(pre)>code{color:#dd5a6f;white-space:nowrap;font-weight:normal}@media (max-width: 800px){table,tbody,tr,td,th{display:block}thead{width:1px;height:1px;position:absolute;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}tr{padding-bottom:1em;margin-bottom:1em;border-bottom:2px solid #ddd}td::before,th::before{content:attr(data-label) ": ";text-transform:capitalize;font-weight:bold}td p,th p{display:inline}}.layout-toggle{display:none}@media (min-width: 801px){.layout-toggle{position:absolute;top:8px;left:20px;font-size:2em;cursor:pointer;color:white;display:block}}@media (min-width: 801px){.sidebar-closed .sidebar{-webkit-transform:translateX(-280px);-ms-transform:translateX(-280px);transform:translateX(-280px)}.sidebar-closed .main{padding-left:0}.sidebar-closed .header{left:0}}.list-unstyled{padding-left:0;list-style:none;line-height:1.5;margin-top:0;margin-bottom:1.5rem}.list-inline li{display:inline-block}.container{max-width:100%;width:1170px;margin:0 auto;padding:0 2rem}.relative{position:relative}.clear{clear:both}.header{position:fixed;top:0;right:0;left:280px;box-shadow:0 2px 5px rgba(0,0,0,0.26);padding:1em 0;background:#dd5a6f;color:#e0e0e0;z-index:4000}@media (max-width: 800px){.header{left:0}}@media (min-width: 801px){.header{transition:0.2s cubic-bezier(0.215, 0.61, 0.355, 1)}}.header__title{font-weight:500;text-align:center;margin:0 0 0.5em 0}.header__title a{color:#e0e0e0}@media (min-width: 801px){.header__title{float:left;font-size:1em;margin-top:.25em;margin-bottom:0}}.searchbar{display:inline-block;float:right}@media (max-width: 800px){.searchbar{display:block;float:none}}.searchbar__form{float:right;position:relative}@media (max-width: 800px){.searchbar__form{float:none}}@media (min-width: 801px){.searchbar__form{min-width:15em}}.searchbar__field{border:none;padding:0.5em;font-size:1em;margin:0;width:100%;box-shadow:0 1.5px 4px rgba(0,0,0,0.24),0 1.5px 6px rgba(0,0,0,0.12);border:1px solid #e0e0e0}.searchbar__suggestions{position:absolute;top:100%;right:0;left:0;box-shadow:0 1.5px 4px rgba(0,0,0,0.24),0 1.5px 6px rgba(0,0,0,0.12);border:1px solid #e0e0e0;background:white;padding:0;margin:0;list-style:none;z-index:2}.searchbar__suggestions:empty{display:none}.searchbar__suggestions .selected{background:#ddd}.searchbar__suggestions li{border-bottom:1px solid #e0e0e0}.searchbar__suggestions li:last-of-type{border:none}.searchbar__suggestions a{display:block;padding:0.5em;font-size:0.9em}.searchbar__suggestions a:hover,.searchbar__suggestions a:active,.searchbar__suggestions a:focus{background:#e0e0e0}.searchbar__suggestions code{margin-right:.5em}@media (min-width: 801px){.sidebar{position:fixed;top:0;bottom:0;left:0;overflow:auto;box-shadow:1px 0 1.5px rgba(0,0,0,0.12);width:280px;z-index:2;border-right:1px solid #e0e0e0;transition:0.2s cubic-bezier(0.215, 0.61, 0.355, 1)}}@media (max-width: 800px){.sidebar{margin-top:4em}}.sidebar__annotation{color:#5c4863}.sidebar__item{font-size:0.9em}.sidebar__item a{padding:0.5em 4.5em;display:block;text-decoration:none;color:#333}.sidebar__item:hover,.sidebar__item:active,.sidebar__item:focus{background:#e0e0e0}.sidebar__item.is-collapsed+*{display:none}.sidebar__item--heading{padding:1em 1.5em}.sidebar__item--heading a{font-weight:bold}.sidebar__item--sub-heading{padding:0.5em 2.5em}.sidebar__item--sub-heading a{color:#888}.sidebar__item--heading,.sidebar__item--sub-heading{position:relative}.sidebar__item--heading:after,.sidebar__item--sub-heading:after{position:absolute;top:50%;right:2em;content:'\25BC';margin-top:-0.5em;color:#ddd;font-size:0.7em}.sidebar__item--heading.is-collapsed:after,.sidebar__item--sub-heading.is-collapsed:after{content:'\25B6'}.sidebar__item--heading a,.sidebar__item--sub-heading a{padding:0;display:inline}.sidebar__description{color:#e0e0e0;padding-right:2em}.sidebar__header{border-bottom:1px solid #e0e0e0}.sidebar__title{font-size:1em;margin:0;padding:1.45em}.btn-toggle{background:#EFEFEF;border:none;border-bottom:1px solid #e0e0e0;display:block;padding:1em;width:100%;cursor:pointer;color:#999;font-weight:bold;margin:0;transition:0.15s ease-out}.btn-toggle:hover,.btn-toggle:active,.btn-toggle:focus{background:#DFDFDF}.main{background:#f9f9f9;position:relative}@media (min-width: 801px){.main{transition:0.2s cubic-bezier(0.215, 0.61, 0.355, 1);padding-left:280px;padding-top:4em;min-height:45em}}.main__section{margin-top:5em;border-top:5px solid rgba(92,72,99,0.2)}.header+.main__section{margin-top:0;border-top:none}.main__heading,.main__heading--secondary{padding:1em 0;margin-top:0}@media (min-width: 801px){.main__heading,.main__heading--secondary{padding:2em 0 0}}.main__heading{color:#5c4863;font-size:3.5em;text-align:center;border-bottom:5px solid rgba(92,72,99,0.2);padding-bottom:.5em;margin-bottom:1em;background:rgba(92,72,99,0.1)}.main__heading--secondary{font-size:3em;color:#dd5a6f;text-transform:uppercase;font-weight:bold;padding-top:0;margin-bottom:-3rem;position:relative}.main__heading--secondary .container{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.main__heading--secondary::before{content:'';position:absolute;left:0;right:0;bottom:0.15em;height:0.2em;background-color:#dd5a6f}.footer{background:#e0e0e0;padding:1em 0}.footer .container{position:relative}.footer__project-info{float:left}.footer__watermark{position:absolute;right:0;top:-0.7em}.footer__watermark img{display:block;max-width:7em}.project-info__name,.project-info__version,.project-info__license{display:inline-block}.project-info__version,.project-info__license{color:#555}.project-info__license{text-indent:-0.25em}.main__section{margin-bottom:4.5rem}.item__heading{color:#333;margin:4.5rem 0 1.5rem 0;position:relative;font-size:2em;font-weight:300;float:left}.item__name{color:#dd5a6f}.item__example{margin-bottom:1.5rem}.item__example,.item__code{box-shadow:0 1.5px 4px rgba(0,0,0,0.24),0 1.5px 6px rgba(0,0,0,0.12);border:1px solid #e0e0e0;word-wrap:break-word;line-height:1.42}.item__code{padding-right:7em;clear:both;cursor:pointer}.item__code--togglable::after{position:absolute;right:0;bottom:-2.5em;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;color:#c4c4c4;font-size:0.8em;transition:0.2s ease-out}.item__code--togglable:hover::after,.item__code--togglable:active::after,.item__code--togglable:focus::after{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}.item__code--togglable[data-current-state='expanded']::after{content:'Click to collapse.'}.item__code--togglable[data-current-state='collapsed']::after{content:'Click to expand.'}.example__description{padding:1em;background:#EFEFEF}.example__description p{margin:0}.example__code[class*='language-']{margin:0}.item__anchor{font-size:0.6em;color:#eeafb9}@media (min-width: 801px){.item__anchor{position:absolute;right:101%;bottom:0.25em;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0}.item:hover .item__anchor{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}}.item__deprecated{display:inline-block;overflow:hidden;margin-top:5.5em;margin-left:1em}.item__deprecated strong{float:left;color:#c00;text-transform:uppercase}.item__deprecated p{float:left;margin:0;padding-left:0.5em}.item__type{color:#ddd;text-transform:capitalize;font-size:0.75em}.item__alias,.item__aliased{color:#ddd;font-size:0.8em}.item__sub-heading{color:#333;margin-top:0;margin-bottom:1.5rem;font-size:1.2em}.item__parameters{width:100%;margin-bottom:1em;border-collapse:collapse}.item__parameters thead th{vertical-align:bottom;border-bottom:2px solid #ddd;border-top:none;text-align:left;color:#707070}.item__parameters tbody th{text-align:left}.item__parameters td,.item__parameters th{padding:0.5em 0.5em 0.5em 0;vertical-align:top}@media (min-width: 801px){tbody>.item__parameter:first-of-type>td{border-top:none}.item__parameters td,.item__parameters th{border-top:1px solid #ddd}}.item__access{text-transform:capitalize;color:#5c4863;font-size:0.8em}.item__since{float:right;padding-top:0.9em;color:#c4c4c4;margin-bottom:1em}.item__source-link{position:absolute;top:1px;right:1px;background:white;padding:1em;z-index:2;color:#c4c4c4}.item__cross-type{color:#4d4d4d;font-family:'Consolas', 'Monaco', 'Andale Mono', monospace;font-size:0.8em}.item__description{margin-bottom:1.5rem}li.item__description{margin-bottom:0}.item__description--inline>*{display:inline-block;margin:0}.item__code-wrapper{position:relative;clear:both;margin-bottom:1.5rem}.color-preview--inline{padding:2px 4px;border:1px solid rgba(0,0,0,0.1);border-radius:3px}.color-preview--block{width:2em;height:2em;position:absolute;top:140%;right:0;top:calc(100% + 20px);border:1px solid rgba(0,0,0,0.1);border-radius:3px}
diff --git a/docs/components/assets/images/favicon.png b/docs/components/assets/images/favicon.png
new file mode 100644
index 000000000..585fb5314
Binary files /dev/null and b/docs/components/assets/images/favicon.png differ
diff --git a/docs/components/assets/images/logo_full_compact.svg b/docs/components/assets/images/logo_full_compact.svg
new file mode 100644
index 000000000..0f590c9aa
--- /dev/null
+++ b/docs/components/assets/images/logo_full_compact.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/components/assets/images/logo_full_inline.svg b/docs/components/assets/images/logo_full_inline.svg
new file mode 100644
index 000000000..68b010309
--- /dev/null
+++ b/docs/components/assets/images/logo_full_inline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/components/assets/images/logo_light_compact.svg b/docs/components/assets/images/logo_light_compact.svg
new file mode 100644
index 000000000..7f9ef8013
--- /dev/null
+++ b/docs/components/assets/images/logo_light_compact.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/components/assets/images/logo_light_inline.svg b/docs/components/assets/images/logo_light_inline.svg
new file mode 100644
index 000000000..120ffd2d6
--- /dev/null
+++ b/docs/components/assets/images/logo_light_inline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/components/assets/js/main.js b/docs/components/assets/js/main.js
new file mode 100644
index 000000000..015842a09
--- /dev/null
+++ b/docs/components/assets/js/main.js
@@ -0,0 +1,56 @@
+/* global document */
+
+(function ($, global) {
+ 'use strict';
+
+ // Constructor
+ var App = function (conf) {
+ this.conf = $.extend({
+ // Search module
+ search: new global.Search(),
+
+ // Sidebar module
+ sidebar: new global.Sidebar(),
+
+ // Initialisation
+ init: true
+ }, conf || {});
+
+ // Launch the module
+ if (this.conf.init !== false) {
+ this.initialize();
+ }
+ };
+
+ // Initialisation method
+ App.prototype.initialize = function () {
+ this.codePreview();
+ };
+
+ // Toggle code preview collapsed/expanded modes
+ App.prototype.codePreview = function () {
+ var $item;
+ var $code;
+ var switchTo;
+
+ $('.item__code--togglable').on('click', function () {
+ $item = $(this);
+ $code = $item.find('code');
+ switchTo = $item.attr('data-current-state') === 'expanded' ? 'collapsed' : 'expanded';
+
+ $item.attr('data-current-state', switchTo);
+ $code.html($item.attr('data-' + switchTo));
+ Prism.highlightElement($code[0]);
+ });
+ };
+
+ global.App = App;
+}(window.jQuery, window));
+
+(function ($, global) {
+
+ $(document).ready(function () {
+ var app = new global.App();
+ });
+
+}(window.jQuery, window));
\ No newline at end of file
diff --git a/docs/components/assets/js/main.min.js b/docs/components/assets/js/main.min.js
new file mode 100644
index 000000000..b81f9d4a6
--- /dev/null
+++ b/docs/components/assets/js/main.min.js
@@ -0,0 +1 @@
+!function(t){function e(t,n){this.list=t,this.options=n=n||{};var i,o,s;for(i=0,keys=["sort","includeScore","shouldSort"],o=keys.length;o>i;i++)s=keys[i],this.options[s]=s in n?n[s]:e.defaultOptions[s];for(i=0,keys=["searchFn","sortFn","keys","getFn"],o=keys.length;o>i;i++)s=keys[i],this.options[s]=n[s]||e.defaultOptions[s]}var n=function(t,e){if(e=e||{},this.options=e,this.options.location=e.location||n.defaultOptions.location,this.options.distance="distance"in e?e.distance:n.defaultOptions.distance,this.options.threshold="threshold"in e?e.threshold:n.defaultOptions.threshold,this.options.maxPatternLength=e.maxPatternLength||n.defaultOptions.maxPatternLength,this.pattern=e.caseSensitive?t:t.toLowerCase(),this.patternLen=t.length,this.patternLen>this.options.maxPatternLength)throw new Error("Pattern length is too long");this.matchmask=1<i;)this._bitapScore(e,l+o)<=u?i=o:d=o,o=Math.floor((d-i)/2+i);for(d=o,s=Math.max(1,l-o+1),r=Math.min(l+o,c)+this.patternLen,a=Array(r+2),a[r+1]=(1<=s;n--)if(p=this.patternAlphabet[t.charAt(n-1)],a[n]=0===e?(a[n+1]<<1|1)&p:(a[n+1]<<1|1)&p|((h[n+1]|h[n])<<1|1)|h[n+1],a[n]&this.matchmask&&(g=this._bitapScore(e,n-1),u>=g)){if(u=g,f=n-1,m.push(f),!(f>l))break;s=Math.max(1,2*l-f)}if(this._bitapScore(e+1,l)>u)break;h=a}return{isMatch:f>=0,score:g}};var i={deepValue:function(t,e){for(var n=0,e=e.split("."),i=e.length;i>n;n++){if(!t)return null;t=t[e[n]]}return t}};e.defaultOptions={id:null,caseSensitive:!1,includeScore:!1,shouldSort:!0,searchFn:n,sortFn:function(t,e){return t.score-e.score},getFn:i.deepValue,keys:[]},e.prototype.search=function(t){var e,n,o,s,r,a=new this.options.searchFn(t,this.options),h=this.list,p=h.length,c=this.options,l=this.options.keys,u=l.length,f=[],d={},g=[],m=function(t,e,n){void 0!==t&&null!==t&&"string"==typeof t&&(s=a.search(t),s.isMatch&&(r=d[n],r?r.score=Math.min(r.score,s.score):(d[n]={item:e,score:s.score},f.push(d[n]))))};if("string"==typeof h[0])for(var e=0;p>e;e++)m(h[e],e,e);else for(var e=0;p>e;e++)for(o=h[e],n=0;u>n;n++)m(this.options.getFn(o,l[n]),o,e);c.shouldSort&&f.sort(c.sortFn);for(var y=c.includeScore?function(t){return f[t]}:function(t){return f[t].item},L=c.id?function(t){return i.deepValue(y(t),c.id)}:function(t){return y(t)},e=0,v=f.length;v>e;e++)g.push(L(e));return g},"object"==typeof exports?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}):t.Fuse=e}(this);(function($,global){var Sidebar=function(conf){this.conf=$.extend({collapsedClass:"is-collapsed",storageKey:"_sassdoc_sidebar_index",indexAttribute:"data-slug",toggleBtn:".js-btn-toggle",init:true},conf||{});if(this.conf.init===true){this.initialize()}};Sidebar.prototype.initialize=function(){this.conf.nodes=$("["+this.conf.indexAttribute+"]");this.load();this.updateDOM();this.bind();this.loadToggle()};Sidebar.prototype.loadToggle=function(){$("",{"class":"layout-toggle",html:"×","data-alt":"→"}).appendTo($(".header"));$(".layout-toggle").on("click",function(){var $this=$(this);var alt;$("body").toggleClass("sidebar-closed");alt=$this.html();$this.html($this.data("alt"));$this.data("alt",alt)})};Sidebar.prototype.load=function(){var index="localStorage"in global?global.localStorage.getItem(this.conf.storageKey):null;this.index=index?JSON.parse(index):this.buildIndex()};Sidebar.prototype.buildIndex=function(){var index={};var $item;this.conf.nodes.each($.proxy(function(index,item){$item=$(item);index[$item.attr(this.conf.indexAttribute)]=!$item.hasClass(this.conf.collapsedClass)},this));return index};Sidebar.prototype.updateDOM=function(){var item;for(item in this.index){if(this.index[item]===false){$("["+this.conf.indexAttribute+'="'+item+'"]').addClass(this.conf.collapsedClass)}}};Sidebar.prototype.save=function(){if(!("localStorage"in global)){return}global.localStorage.setItem(this.conf.storageKey,JSON.stringify(this.index))};Sidebar.prototype.bind=function(){var $item,slug,fn,text;var collapsed=false;global.onbeforeunload=$.proxy(function(){this.save()},this);$(this.conf.toggleBtn).on("click",$.proxy(function(event){$node=$(event.target);text=$node.attr("data-alt");$node.attr("data-alt",$node.text());$node.text(text);fn=collapsed===true?"removeClass":"addClass";this.conf.nodes.each($.proxy(function(index,item){$item=$(item);slug=$item.attr(this.conf.indexAttribute);this.index[slug]=collapsed;$("["+this.conf.indexAttribute+'="'+slug+'"]')[fn](this.conf.collapsedClass)},this));collapsed=!collapsed;this.save()},this));this.conf.nodes.on("click",$.proxy(function(event){$item=$(event.target);slug=$item.attr(this.conf.indexAttribute);this.index[slug]=!this.index[slug];$item.toggleClass(this.conf.collapsedClass)},this))};global.Sidebar=Sidebar})(window.jQuery,window);(function($,global){var Search=function(conf){this.conf=$.extend({search:{items:".sassdoc__item",input:"#js-search-input",form:"#js-search",suggestionsWrapper:"#js-search-suggestions"},fuse:{keys:["name"],threshold:.3},init:true},conf||{});if(this.conf.init===true){this.initialize()}};Search.prototype.initialize=function(){this.index=new Fuse($.map($(this.conf.search.items),function(item){var $item=$(item);return{group:$item.data("group"),name:$item.data("name"),type:$item.data("type"),node:$item}}),this.conf.fuse);this.initializeSearch()};Search.prototype.fillSuggestions=function(items){var searchSuggestions=$(this.conf.search.suggestionsWrapper);searchSuggestions.html("");var suggestions=$.map(items.slice(0,10),function(item){var $li=$("",{"data-group":item.group,"data-type":item.type,"data-name":item.name,html:''+item.type.slice(0,3)+"
"+item.name+""});searchSuggestions.append($li);return $li});return suggestions};Search.prototype.search=function(term){return this.fillSuggestions(this.index.search(term))};Search.prototype.initializeSearch=function(){var searchForm=$(this.conf.search.form);var searchInput=$(this.conf.search.input);var searchSuggestions=$(this.conf.search.suggestionsWrapper);var currentSelection=-1;var suggestions=[];var selected;var self=this;searchSuggestions.on("click",function(e){var target=$(event.target);if(target.nodeName==="A"){searchInput.val(target.parent().data("name"));suggestions=self.fillSuggestions([])}});searchForm.on("keyup",function(e){e.preventDefault();if(e.keyCode===13){if(selected){suggestions=self.fillSuggestions([]);searchInput.val(selected.data("name"));window.location=selected.children().first().attr("href")}e.stopPropagation()}if(e.keyCode===40){currentSelection=(currentSelection+1)%suggestions.length}if(e.keyCode===38){currentSelection=currentSelection-1;if(currentSelection<0){currentSelection=suggestions.length-1}}if(suggestions[currentSelection]){if(selected){selected.removeClass("selected")}selected=suggestions[currentSelection];selected.addClass("selected")}});searchInput.on("keyup",function(e){if(e.keyCode!==40&&e.keyCode!==38){currentSelection=-1;suggestions=self.search($(this).val())}else{e.preventDefault()}}).on("search",function(){suggestions=self.search($(this).val())})};global.Search=Search})(window.jQuery,window);(function($,global){"use strict";var App=function(conf){this.conf=$.extend({search:new global.Search,sidebar:new global.Sidebar,init:true},conf||{});if(this.conf.init!==false){this.initialize()}};App.prototype.initialize=function(){this.codePreview()};App.prototype.codePreview=function(){var $item;var $code;var switchTo;$(".item__code--togglable").on("click",function(){$item=$(this);$code=$item.find("code");switchTo=$item.attr("data-current-state")==="expanded"?"collapsed":"expanded";$item.attr("data-current-state",switchTo);$code.html($item.attr("data-"+switchTo));Prism.highlightElement($code[0])})};global.App=App})(window.jQuery,window);(function($,global){$(document).ready(function(){var app=new global.App})})(window.jQuery,window);var self=typeof window!="undefined"?window:{},Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content)):t.util.type(e)==="Array"?e.map(t.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""+s.tag+">"};if(!self.document){if(!self.addEventListener)return self.Prism;self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return self.Prism}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}return self.Prism}();typeof module!="undefined"&&module.exports&&(module.exports=Prism);Prism.languages.markup={comment://g,prolog:/<\?.+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/\?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/gi,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,punctuation:/[\{\};:]/g,"function":/[-a-z0-9]+(?=\()/gi};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/