From 4bcd9893f3c2b2d84fb8c6172bef32100ca1c796 Mon Sep 17 00:00:00 2001 From: Shea McKinney Date: Mon, 15 Jan 2018 11:06:18 -0800 Subject: [PATCH] Added lando config files. --- .lando.yml | 11 + scss/components/index.scss | 16 +- scss/components/molecules/_alerts.scss | 15 + scss/homepage.md | 3 + styleguide/index.html | 77 + styleguide/item-components-atoms.html | 97 ++ styleguide/item-components-molecules.html | 97 ++ .../item-components-organisims-alerts.html | 353 ++++ styleguide/item-components-organisims.html | 97 ++ styleguide/item-components.html | 120 ++ styleguide/kss-assets/WARNING.txt | 2 + styleguide/kss-assets/github-fork--black.png | Bin 0 -> 7791 bytes styleguide/kss-assets/kss-fullscreen.js | 59 + styleguide/kss-assets/kss-guides.js | 26 + styleguide/kss-assets/kss-markup.js | 40 + styleguide/kss-assets/kss.css | 1 + styleguide/kss-assets/kss.js | 53 + styleguide/kss-assets/kss.scss | 745 +++++++++ styleguide/kss-assets/noise-low.png | Bin 0 -> 5154 bytes styleguide/kss-assets/prettify.js | 1477 +++++++++++++++++ styleguide/kss-assets/sample-inline.png | Bin 0 -> 1155 bytes styleguide/kss-assets/sample-inline.svg | 3 + styleguide/kss-assets/sample.png | Bin 0 -> 65497 bytes styleguide/kss-assets/sample.svg | 3 + styleguide/kss-assets/scrollspy.js | 147 ++ styleguide/section-components.html | 488 ++++++ templates/components/molecules/alerts.html | 58 - .../molecules/alerts/alerts.html.twig | 27 + .../icon-grid}/icon-grid.html | 0 .../main-menu}/main-menu.html | 0 .../mega-menu}/mega-menu.html | 0 .../sidenav}/sidenav.html | 0 32 files changed, 3955 insertions(+), 60 deletions(-) create mode 100644 .lando.yml create mode 100644 scss/homepage.md create mode 100644 styleguide/index.html create mode 100644 styleguide/item-components-atoms.html create mode 100644 styleguide/item-components-molecules.html create mode 100644 styleguide/item-components-organisims-alerts.html create mode 100644 styleguide/item-components-organisims.html create mode 100644 styleguide/item-components.html create mode 100644 styleguide/kss-assets/WARNING.txt create mode 100644 styleguide/kss-assets/github-fork--black.png create mode 100644 styleguide/kss-assets/kss-fullscreen.js create mode 100644 styleguide/kss-assets/kss-guides.js create mode 100644 styleguide/kss-assets/kss-markup.js create mode 100644 styleguide/kss-assets/kss.css create mode 100644 styleguide/kss-assets/kss.js create mode 100644 styleguide/kss-assets/kss.scss create mode 100644 styleguide/kss-assets/noise-low.png create mode 100644 styleguide/kss-assets/prettify.js create mode 100644 styleguide/kss-assets/sample-inline.png create mode 100644 styleguide/kss-assets/sample-inline.svg create mode 100644 styleguide/kss-assets/sample.png create mode 100644 styleguide/kss-assets/sample.svg create mode 100644 styleguide/kss-assets/scrollspy.js create mode 100644 styleguide/section-components.html delete mode 100644 templates/components/molecules/alerts.html create mode 100644 templates/components/molecules/alerts/alerts.html.twig rename templates/components/{molecules => organisms/icon-grid}/icon-grid.html (100%) rename templates/components/{molecules => organisms/main-menu}/main-menu.html (100%) rename templates/components/{molecules => organisms/mega-menu}/mega-menu.html (100%) rename templates/components/{molecules => organisms/sidenav}/sidenav.html (100%) diff --git a/.lando.yml b/.lando.yml new file mode 100644 index 000000000..03fabf6d6 --- /dev/null +++ b/.lando.yml @@ -0,0 +1,11 @@ +name: decanter +recipe: lamp +config: + webroot: styleguide + php: '7.1' +services: + appserver: + ssl: true +tooling: + git: + service: appserver diff --git a/scss/components/index.scss b/scss/components/index.scss index 8ebe790e6..8c903d532 100644 --- a/scss/components/index.scss +++ b/scss/components/index.scss @@ -1,8 +1,20 @@ @charset "UTF-8"; /// -/// ROLL UP -/// +// Components +// Style guide: Components + +// Atoms +// +// Style guide: Components.Atoms + +// Molecules +// +// Style guide: Components.Molecules + +// Organisims +// +// Style guide: Components.Organisims @import 'atoms/index', diff --git a/scss/components/molecules/_alerts.scss b/scss/components/molecules/_alerts.scss index f05594571..aee7d13ff 100644 --- a/scss/components/molecules/_alerts.scss +++ b/scss/components/molecules/_alerts.scss @@ -8,6 +8,21 @@ // of a status, or for displaying a validation message that // alerts someone of an important piece of information. + +// +// Alerts +// +// The alert types. Use these for the Drupal messages. +// +// .decanter-alert-success - Successful Transaction Message +// .decanter-alert-warning - Warning Message +// .decanter-alert-error - Error Message +// .decanter-alert-info - Informative Message +// +// Markup: ../templates/components/molecules/alerts/alerts.html.twig +// +// Style guide: Components.Organisims.Alerts +// .decanter-alert { @include alerts; } diff --git a/scss/homepage.md b/scss/homepage.md new file mode 100644 index 000000000..a41f235cf --- /dev/null +++ b/scss/homepage.md @@ -0,0 +1,3 @@ +# Decanter + +Welcome to the Decanter styleguide. diff --git a/styleguide/index.html b/styleguide/index.html new file mode 100644 index 000000000..60a0a3e82 --- /dev/null +++ b/styleguide/index.html @@ -0,0 +1,77 @@ + + + + + Decanter Style Guide + + + + + + + + + + + +
+
+

Decanter Style Guide

+
+ +
+
+
+

Decanter

+

Welcome to the Decanter styleguide.

+ +
+
+ + + + + + + + + + + + + + + + diff --git a/styleguide/item-components-atoms.html b/styleguide/item-components-atoms.html new file mode 100644 index 000000000..590e96c9a --- /dev/null +++ b/styleguide/item-components-atoms.html @@ -0,0 +1,97 @@ + + + + + Decanter Style Guide + + + + + + + + + + + +
+
+

Decanter Style Guide

+
+ +
+
+ + +
+ + + +
+ Source: components/index.scss, line 7 +
+
+
+ + + + + + + + + + + + + + + + diff --git a/styleguide/item-components-molecules.html b/styleguide/item-components-molecules.html new file mode 100644 index 000000000..4f7bc9842 --- /dev/null +++ b/styleguide/item-components-molecules.html @@ -0,0 +1,97 @@ + + + + + Decanter Style Guide + + + + + + + + + + + +
+
+

Decanter Style Guide

+
+ +
+
+ + +
+ + + +
+ Source: components/index.scss, line 11 +
+
+
+ + + + + + + + + + + + + + + + diff --git a/styleguide/item-components-organisims-alerts.html b/styleguide/item-components-organisims-alerts.html new file mode 100644 index 000000000..35ed54c84 --- /dev/null +++ b/styleguide/item-components-organisims-alerts.html @@ -0,0 +1,353 @@ + + + + + Decanter Style Guide + + + + + + + + + + + +
+
+

Decanter Style Guide

+
+ +
+
+ + +
+ + +
+
+ Examples
+ +
+ Default styling +
+ +
+
+
+

Success Alert

+

This is a success alert.

+
+
+ +
+
+

Warning Alert

+

This is a warning alert.

+
+
+ + + +
+
+

Information Alert

+

This is an information alert.

+
+
+ + +
+ +
+ .decanter-alert-success +
+
+ Successful Transaction Message +
+
+
+
+

Success Alert

+

This is a success alert.

+
+
+ +
+
+

Warning Alert

+

This is a warning alert.

+
+
+ + + +
+
+

Information Alert

+

This is an information alert.

+
+
+ + +
+
+ .decanter-alert-warning +
+
+ Warning Message +
+
+
+
+

Success Alert

+

This is a success alert.

+
+
+ +
+
+

Warning Alert

+

This is a warning alert.

+
+
+ + + +
+
+

Information Alert

+

This is an information alert.

+
+
+ + +
+
+ .decanter-alert-error +
+
+ Error Message +
+
+
+
+

Success Alert

+

This is a success alert.

+
+
+ +
+
+

Warning Alert

+

This is a warning alert.

+
+
+ + + +
+
+

Information Alert

+

This is an information alert.

+
+
+ + +
+
+ .decanter-alert-info +
+
+ Informative Message +
+
+
+
+

Success Alert

+

This is a success alert.

+
+
+ +
+
+

Warning Alert

+

This is a warning alert.

+
+
+ + + +
+
+

Information Alert

+

This is an information alert.

+
+
+ + +
+
+
+ + Markup: ../templates/components/molecules/alerts/alerts.html.twig + +
<div class="decanter-alert decanter-alert-success">
+  <div class="decanter-alert__body">
+    <h3 class="decanter-alert__heading">Success Alert</h3>
+    <p class="decanter-alert__text">This is a success alert.</p>
+  </div>
+</div>
+
+<div class="decanter-alert decanter-alert-warning">
+  <div class="decanter-alert__body">
+    <h3 class="decanter-alert__heading">Warning Alert</h3>
+    <p class="decanter-alert__text">This is a warning alert.</p>
+  </div>
+</div>
+
+<div class="decanter-alert decanter-alert-error" role="alert">
+  <div class="decanter-alert__body">
+    <h3 class="decanter-alert__heading">Error Alert</h3>
+    <p class="decanter-alert__text">This is a error alert.</p>
+  </div>
+</div>
+
+<div class="decanter-alert decanter-alert-info">
+  <div class="decanter-alert__body">
+    <h3 class="decanter-alert__heading">Information Alert</h3>
+    <p class="decanter-alert__text">This is an information alert.</p>
+  </div>
+</div>
+
+
+ +
+ Source: components/molecules/_alerts.scss, line 12 +
+
+
+ + + + + + + + + + + + + + + + diff --git a/styleguide/item-components-organisims.html b/styleguide/item-components-organisims.html new file mode 100644 index 000000000..091a27b3c --- /dev/null +++ b/styleguide/item-components-organisims.html @@ -0,0 +1,97 @@ + + + + + Decanter Style Guide + + + + + + + + + + + +
+
+

Decanter Style Guide

+
+ +
+
+ + +
+ + + +
+ Source: components/index.scss, line 15 +
+
+
+ + + + + + + + + + + + + + + + diff --git a/styleguide/item-components.html b/styleguide/item-components.html new file mode 100644 index 000000000..4482694a5 --- /dev/null +++ b/styleguide/item-components.html @@ -0,0 +1,120 @@ + + + + + Decanter Style Guide + + + + + + + + + + + +
+
+

Decanter Style Guide

+
+ +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/styleguide/kss-assets/WARNING.txt b/styleguide/kss-assets/WARNING.txt new file mode 100644 index 000000000..644e75e44 --- /dev/null +++ b/styleguide/kss-assets/WARNING.txt @@ -0,0 +1,2 @@ +WARNING: This folder is deleted and re-recreated each time the style guide is +built. Do NOT put your own files in this folder. diff --git a/styleguide/kss-assets/github-fork--black.png b/styleguide/kss-assets/github-fork--black.png new file mode 100644 index 0000000000000000000000000000000000000000..146ef8a800602169cf78c686fc5a6d138a76bc0a GIT binary patch literal 7791 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.kss-toolbar__tooltip,#kss-node a:hover>.kss-toolbar__tooltip{opacity:1;clip:auto;height:auto;width:auto;overflow:visible}#kss-node .is-fullscreen .kss-toolbar a[data-kss-fullscreen],#kss-node.kss-guides-mode .kss-toolbar a[data-kss-guides],#kss-node.kss-markup-mode .kss-toolbar a[data-kss-markup]{border-color:#666;background-color:#666}#kss-node .is-fullscreen .kss-toolbar a[data-kss-fullscreen] .kss-toolbar__icon-fill,#kss-node.kss-guides-mode .kss-toolbar a[data-kss-guides] .kss-toolbar__icon-fill,#kss-node.kss-markup-mode .kss-toolbar a[data-kss-markup] .kss-toolbar__icon-fill{fill:#fff}#kss-node .is-fullscreen .kss-toolbar a[data-kss-fullscreen] svg.on,#kss-node.kss-guides-mode .kss-toolbar a[data-kss-guides] svg.on,#kss-node.kss-markup-mode .kss-toolbar a[data-kss-markup] svg.on{display:block}#kss-node .is-fullscreen .kss-toolbar a[data-kss-fullscreen] svg.off,#kss-node.kss-guides-mode .kss-toolbar a[data-kss-guides] svg.off,#kss-node.kss-markup-mode .kss-toolbar a[data-kss-markup] svg.off{display:none}#kss-node .kss-parameters{display:table;list-style-type:none;margin-top:0;margin-left:0;padding-left:0}#kss-node .kss-parameters__title{font-weight:bold}#kss-node .kss-parameters__item{display:table-row}#kss-node .kss-parameters__name{display:table-cell;padding-right:20px;white-space:nowrap}#kss-node .kss-parameters__description{display:table-cell}#kss-node .kss-parameters__default-value code{white-space:nowrap}#kss-node .kss-modifier__wrapper{border:1px solid #ccc;padding:0 10px 10px}#kss-node .is-fullscreen .kss-modifier__wrapper{margin-left:-20px;margin-right:-20px;padding-left:0;padding-right:0;border:none}#kss-node .kss-modifier__heading{margin:0 -10px 10px -10px;padding:10px;border-bottom:1px solid #ccc;background-color:#eee;font-weight:bold}#kss-node .is-fullscreen .kss-modifier__heading{margin:0 20px 10px;border:1px solid #ccc}#kss-node .kss-modifier__default-name{font-weight:bold;margin-bottom:12px}#kss-node .is-fullscreen .kss-modifier__default-name{margin-left:20px;margin-right:20px}#kss-node .kss-modifier__name{float:left;padding-right:10px;font-weight:bold}#kss-node .is-fullscreen .kss-modifier__name{margin-left:20px}#kss-node .kss-modifier__description{margin-bottom:12px}#kss-node .is-fullscreen .kss-modifier__description{margin-right:20px}#kss-node .kss-modifier__example{clear:left;border:2px dashed transparent;position:relative;z-index:0;margin:-2px -2px 22px}#kss-node .kss-modifier__example:last-child{margin-bottom:0}#kss-node.kss-guides-mode .kss-modifier__example:before,#kss-node.kss-guides-mode .kss-modifier__example:after,#kss-node.kss-guides-mode .kss-modifier__example-footer:before,#kss-node.kss-guides-mode .kss-modifier__example-footer:after{z-index:-1;box-sizing:border-box;content:'';position:absolute;width:5px;height:5px;border:2px solid #000}#kss-node.kss-guides-mode .kss-modifier__example{border-color:#000}#kss-node.kss-guides-mode .kss-modifier__example:before{top:-5px;left:-5px;border-top:0;border-left:0}#kss-node.kss-guides-mode .kss-modifier__example:after{top:-5px;right:-5px;border-top:0;border-right:0}#kss-node.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example:before{left:auto;right:0}#kss-node.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example:after{right:auto;left:0}#kss-node .kss-modifier__example-footer{clear:both}#kss-node.kss-guides-mode .kss-modifier__example-footer:before{bottom:-5px;left:-5px;border-bottom:0;border-left:0}#kss-node.kss-guides-mode .kss-modifier__example-footer:after{bottom:-5px;right:-5px;border-right:0;border-bottom:0}#kss-node.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example-footer:before{left:auto;right:0}#kss-node.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example-footer:after{right:auto;left:0}#kss-node .kss-markup{margin:24px 0;border:1px solid #ccc}#kss-node .kss-markup[open] summary{border-bottom:1px solid #ccc;margin-bottom:3px}#kss-node .kss-markup summary{padding-left:10px}#kss-node .kss-markup pre{margin:0}#kss-node .kss-source{font-size:80%}#kss-node .kss-github{display:none}@media screen and (min-width: 501px){#kss-node .kss-github{display:block;position:absolute;top:0;right:0}}#kss-node .kss-github img{border:0}#kss-node .pln{color:#000}#kss-node .str{color:#080}#kss-node .kwd{color:#008}#kss-node .com{color:#800}#kss-node .typ{color:#606}#kss-node .lit{color:#066}#kss-node .pun,#kss-node .opn,#kss-node .clo{color:#660}#kss-node .tag{color:#008}#kss-node .atn{color:#606}#kss-node .atv{color:#080}#kss-node .dec,#kss-node .var{color:#606}#kss-node .fun{color:red}@media print, projection{#kss-node .str{color:#060}#kss-node .kwd{color:#006;font-weight:bold}#kss-node .com{color:#600;font-style:italic}#kss-node .typ{color:#404;font-weight:bold}#kss-node .lit{color:#044}#kss-node .pun,#kss-node .opn,#kss-node .clo{color:#440}#kss-node .tag{color:#006;font-weight:bold}#kss-node .atn{color:#404}#kss-node .atv{color:#060}}#kss-node ol.linenums{margin:0;padding:0 0 3px 0;list-style-type:none}#kss-node ol.linenums li{min-height:24px;border-bottom:1px solid #eee;padding:0 10px;background:#fff}#kss-node ol.linenums li:first-child{padding-top:3px}#kss-node ol.linenums li.L0,#kss-node ol.linenums li.L2,#kss-node ol.linenums li.L4,#kss-node ol.linenums li.L6,#kss-node ol.linenums li.L8{background:#fcfcfc} diff --git a/styleguide/kss-assets/kss.js b/styleguide/kss-assets/kss.js new file mode 100644 index 000000000..9523bf2e2 --- /dev/null +++ b/styleguide/kss-assets/kss.js @@ -0,0 +1,53 @@ +(function() { + var KssStateGenerator; + + KssStateGenerator = (function() { + var pseudo_selectors; + + pseudo_selectors = ['hover', 'enabled', 'disabled', 'active', 'visited', 'focus', 'target', 'checked', 'empty', 'first-of-type', 'last-of-type', 'first-child', 'last-child']; + + function KssStateGenerator() { + var idx, idxs, pseudos, replaceRule, rule, stylesheet, _i, _len, _len2, _ref, _ref2; + pseudos = new RegExp("(\\:" + (pseudo_selectors.join('|\\:')) + ")", "g"); + try { + _ref = document.styleSheets; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + stylesheet = _ref[_i]; + if (stylesheet.href && stylesheet.href.indexOf(document.domain) >= 0) { + idxs = []; + _ref2 = stylesheet.cssRules; + for (idx = 0, _len2 = _ref2.length; idx < _len2; idx++) { + rule = _ref2[idx]; + if ((rule.type === CSSRule.STYLE_RULE) && pseudos.test(rule.selectorText)) { + replaceRule = function(matched, stuff) { + return matched.replace(/\:/g, '.pseudo-class-'); + }; + this.insertRule(rule.cssText.replace(pseudos, replaceRule)); + } + pseudos.lastIndex = 0; + } + } + } + } catch (_error) {} + } + + KssStateGenerator.prototype.insertRule = function(rule) { + var headEl, styleEl; + headEl = document.getElementsByTagName('head')[0]; + styleEl = document.createElement('style'); + styleEl.type = 'text/css'; + if (styleEl.styleSheet) { + styleEl.styleSheet.cssText = rule; + } else { + styleEl.appendChild(document.createTextNode(rule)); + } + return headEl.appendChild(styleEl); + }; + + return KssStateGenerator; + + })(); + + new KssStateGenerator; + +}).call(this); diff --git a/styleguide/kss-assets/kss.scss b/styleguide/kss-assets/kss.scss new file mode 100644 index 000000000..7e791ea0c --- /dev/null +++ b/styleguide/kss-assets/kss.scss @@ -0,0 +1,745 @@ +// ------------------------------------------------------------------------------ +// Variables - Colors, Fonts, etc. +// ------------------------------------------------------------------------------ +$kss-colors-background : #fff; + +$kss-colors-foreground : #444; +$kss-colors-heading : #111; +$kss-colors-quotes : #666; + +$kss-colors-link : #0645ad; +$kss-colors-link-visited : #0645ad; +$kss-colors-link-hover : lighten($kss-colors-link, 20%); +$kss-colors-link-active : #faa700; + +$kss-font-body : Helvetica, 'Helvetica Neue', Arial, sans-serif; +$kss-font-code : Menlo, 'Ubuntu Mono', 'Lucida Console', 'Courier New', Courier, monospace; + +$kss-font-size : 16px; +$kss-vertical-rhythm : $kss-font-size * 1.5; + +// ------------------------------------------------------------------------------ +// Wrap all of this builder's base HTML styling inside a .kss-style selector. +// ------------------------------------------------------------------------------ + +.kss-style { + color: $kss-colors-foreground; + font-family: $kss-font-body; + font-size: $kss-font-size; + line-height: $kss-vertical-rhythm; + + a { + color: $kss-colors-link; + text-decoration: none; + transition-property: color; + transition-duration: 0.5s; + + &:visited { color: $kss-colors-link-visited; } + &:hover, + &:focus { color: $kss-colors-link-hover; } + &:active { color: $kss-colors-link-active; } + + &:hover, + &:active { + outline: 0; + } + } + + p { + margin: ($kss-vertical-rhythm/2) 0 $kss-vertical-rhythm 0; + } + + h1, h2, h3, h4, h5, h6 { + margin: $kss-vertical-rhythm 0 0 0; + font-family: $kss-font-body; + color: $kss-colors-heading; + line-height: 1.15em; + } + + h4, h5, h6 { + font-weight: bold; + } + + h1 { font-size: $kss-font-size * 2.5; } + h2 { font-size: $kss-font-size * 2.25; } + h3 { font-size: $kss-font-size * 2.125; } + h4 { font-size: $kss-font-size * 2; } + h5 { font-size: $kss-font-size * 1.875; } + h6 { font-size: $kss-font-size * 1.75; } + + blockquote { + color: $kss-colors-quotes; + margin: 0; + padding-left: $kss-vertical-rhythm; + border-left: 0.5em mix($kss-colors-quotes, $kss-colors-background, 25%) solid; + } + + hr { + display: block; + height: 2px; + border: 0; + border-top: 1px solid lighten($kss-colors-foreground, 60%); + border-bottom: 1px solid darken($kss-colors-background, 10%); + margin: $kss-vertical-rhythm 0; + padding: 0; + } + + pre, code, kbd, samp { + font-family: $kss-font-code; + color: mix($kss-colors-foreground, $kss-colors-heading, 50%); + font-size: 1em; + } + + pre { + white-space: pre; + overflow: scroll; + } + + ins { + color: $kss-colors-heading; + background: #ff9; + text-decoration: none; + } + + mark { + color: $kss-colors-heading; + background: #ff0; + font-weight: bold; + } + + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sup { top: -0.5em; } + sub { bottom: -0.25em; } + + ul, ol { + margin: $kss-vertical-rhythm 0; + padding: 0 0 0 $kss-vertical-rhythm; + } + li p:last-child { + margin: 0; + } + dd { + margin: 0 0 0 $kss-vertical-rhythm; + } + + img { + max-width:100%; + border: 0; + -ms-interpolation-mode: bicubic; + vertical-align: middle; + } + + table { + border-collapse: collapse; + border-spacing: 0; + } + td { + vertical-align: top; + } + + @media print { + a, a:visited { text-decoration: underline; } + hr { height: 1px; border:0; border-bottom:1px solid black; } + a[href]:after { content: " (" attr(href) ")"; } + a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + abbr[title]:after { content: " (" attr(title) ")"; } + pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; } + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + p, h2, h3 { orphans: 3; widows: 3; } + h2, h3 { page-break-after: avoid; } + } +} + +// ------------------------------------------------------------------------------ +// Layout and page background +// ------------------------------------------------------------------------------ + +#kss-node { + margin: 0; + padding: 20px; + background: #fff; + + &.kss-fullscreen-mode { + .kss-sidebar, + .kss-section:not(.is-fullscreen), + .kss-github { + display: none; + } + } + + @media screen and (min-width: 769px) { + padding: 0; + + .kss-main, + .kss-sidebar { + float: left; + margin-right: -100%; + box-sizing: border-box; + } + } + + .kss-main { + width: 100%; + margin: 0 auto; + + @media screen and (min-width: 769px) { + width: 80%; + margin-left: 20%; + padding: 0 20px 0 30px; + } + } + + .kss-sidebar { + border-bottom:1px solid #ddd; + + @media screen and (min-width: 769px) { + position: fixed; + width: 20%; + height: 100%; + overflow: auto; + padding: 0 10px 0 20px; + border-bottom: 0; + background-image: url(noise-low.png), -ms-radial-gradient(#fff, #eee); + background-image: url(noise-low.png), -o-radial-gradient(#fff, #eee); + background-image: url(noise-low.png), -webkit-radial-gradient(#fff, #eee); + background-image: url(noise-low.png), radial-gradient(#fff, #eee); + box-shadow: inset -10px 0 10px -10px rgba(0,0,0,0.7); + } + } +} + +// ------------------------------------------------------------------------------ +// Sidebar-area components +// ------------------------------------------------------------------------------ + +#kss-node { + + .kss-doc-title { + margin: 0; + + @media screen and (min-width: 769px) { + font-size: 1.5em; + } + } + + .kss-header, + .kss-nav { + @media screen and (min-width: 769px) { + margin-top: 2em; + } + } + + .kss-nav__menu { + margin-top: ($kss-vertical-rhythm/2); + margin-bottom: ($kss-vertical-rhythm/2); + padding: 0; + list-style-type: none; + } + + .kss-nav__menu-item { + display: inline-block; + padding-right: $kss-vertical-rhythm; + + @media screen and (min-width: 769px) { + display: list-item; + padding-right: 0; + } + } + + .kss-nav__menu-link { + position: relative; + display: inline-block; + + &:before { + @media screen and (min-width: 769px) { + content: ' '; + position: absolute; + left: -20px; + width: 0; + height: 100%; + background-color: rgba(#000, 0); + } + } + + &.is-in-viewport:before { + background-color: #000; + width: 5px; + transition: background-color .4s, width .6s; + } + } + + .kss-nav__menu-child { + display: none; + + @media screen and (min-width: 769px) { + display: block; + list-style-type: none; + margin: 0; + padding: 0; + + // @TODO: The ul is output even when there are no children. Fix this, so + // we can put these :first-child and :last child styles back on the ul. + li:first-child { + margin-top: 10px; + border-top: 1px solid #ccc; + padding: 10px 0 0; + } + + li:last-child { + margin-bottom: 10px; + border-bottom: 1px solid #ccc; + padding: 0 0 10px; + } + } + } + + .kss-nav__ref { + color: #333; + font-weight: bold; + + &:after { + content: ' '; + } + } + .kss-nav__ref-child { + font-weight: normal; + } +} + +// ------------------------------------------------------------------------------ +// Content-area components +// ------------------------------------------------------------------------------ + +#kss-node { + + .kss-section { + margin-bottom: ($kss-vertical-rhythm * 2); + + // "fullscreen" styles copied from Mozilla's default stylesheet. + &.is-fullscreen { + position: fixed !important; + top: 0 !important; + left: 0 !important; + right: 0 !important; + bottom: 0 !important; + width: 100% !important; + height: 100% !important; + margin: 0 !important; + min-width: 0 !important; + max-width: none !important; + min-height: 0 !important; + max-height: none !important; + box-sizing: border-box !important; + object-fit: contain !important; + transform: none !important; + // Turn on scrolling if needed. + overflow: auto !important; + padding: 20px; + } + } + + .kss-title { + margin-bottom: 0; + } + .is-fullscreen .kss-title { + margin-top: 0; + } + .kss-title__ref { + display: block; + font-size: $kss-font-size; + line-height: $kss-font-size; + color: #666; + + &:before { + content: 'Section '; + } + } + .kss-title__permalink { + display: block; + color: #000; + text-decoration: none; + + &:hover, + &:focus, + &:active { + color: $kss-colors-link; + + @media screen and (min-width: 607px) { + .kss-title__permalink-hash { + display: inline; + } + } + } + } + .kss-title__permalink-hash { + display: none; + color: #ccc; + } + + .kss-toolbar { + margin: 6px 0 24px; + display: inline-block; + border: 1px solid #eee; + background-color: #f9f9f9; + border-right-color: #e0e0e0; + border-bottom-color: #e0e0e0; + line-height: 1; + padding: 3px; + + a { + box-sizing: content-box; + display: inline-block; + width: 16px; + height: 16px; + padding: 3px; + vertical-align: top; + // Tooltip wrapper styles: + position: relative; + overflow: visible; + + + a { + margin-left: 6px; + } + + .kss-toolbar__icon-fill { + fill: #ccc; + } + + svg.on { + display: none; + } + + &:focus, + &:hover { + border-color: #000; + + .kss-toolbar__icon-fill { + fill: #000; + } + } + } + } + .kss-toolbar__tooltip { + position: absolute; + z-index: 1; + display: inline-block; + bottom: 100%; + left: -10px; + margin-bottom: 5px; + border: solid 1px #666; + padding: 8px 10px 6px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, .25); + white-space: nowrap; + color: #000; + background: #fff; + cursor: help; + opacity: 0; + transition: opacity 0.25s; + // Visually hidden + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + word-wrap: normal; + + // Solid grey triangle. + &:before, + &:after { + content: ''; + position: absolute; + bottom: -8px; + left: 15px; + width: 0; + height: 0; + border-width: 7px 5px 0; + border-color: #666 transparent; + border-style: solid; + } + + // White triangle knock-out. + &:after { + bottom: -6px; + border-top-color: #fff; + } + } + a:focus, + a:hover { + > .kss-toolbar__tooltip { + opacity: 1; + // Visually hidden off + clip: auto; + height: auto; + width: auto; + overflow: visible; + } + } + .is-fullscreen .kss-toolbar a[data-kss-fullscreen], + &.kss-guides-mode .kss-toolbar a[data-kss-guides], + &.kss-markup-mode .kss-toolbar a[data-kss-markup] { + border-color: #666; + background-color: #666; + + .kss-toolbar__icon-fill { + fill: #fff; + } + + svg.on { + display: block; + } + + svg.off { + display: none; + } + } + + .kss-parameters { + display: table; + list-style-type: none; + margin-top: 0; + margin-left: 0; + padding-left: 0; + } + .kss-parameters__title { + font-weight: bold; + } + .kss-parameters__item { + display: table-row; + } + .kss-parameters__name { + display: table-cell; + padding-right: 20px; + white-space: nowrap; + } + .kss-parameters__description { + display: table-cell; + } + .kss-parameters__default-value code { + white-space: nowrap; + } + + .kss-modifier__wrapper { + border: 1px solid #ccc; + padding: 0 10px 10px; + } + .is-fullscreen .kss-modifier__wrapper { + // Un-do padding on .kss-section. + margin-left: -20px; + margin-right: -20px; + // Remove all padding on the wrapper + padding-left: 0; + padding-right: 0; + border: none; + } + .kss-modifier__heading { + margin: 0 -10px 10px -10px; + padding: 10px; + border-bottom: 1px solid #ccc; + background-color: #eee; + font-weight: bold; + } + .is-fullscreen .kss-modifier__heading { + margin: 0 20px 10px; + border: 1px solid #ccc; + } + .kss-modifier__default-name { + font-weight: bold; + margin-bottom: ($kss-vertical-rhythm / 2); + } + .is-fullscreen .kss-modifier__default-name { + margin-left: 20px; + margin-right: 20px; + } + .kss-modifier__name { + float: left; + padding-right: 10px; + font-weight: bold; + } + .is-fullscreen .kss-modifier__name { + margin-left: 20px; + } + .kss-modifier__description { + margin-bottom: ($kss-vertical-rhythm / 2); + } + .is-fullscreen .kss-modifier__description { + margin-right: 20px; + } + .kss-modifier__example { + clear: left; + border: 2px dashed transparent; + position: relative; // Contain the example's absolute positioning. + z-index: 0; // Establishes a local stacking context. + margin: -2px -2px ($kss-vertical-rhythm - 2px); + + &:last-child { + margin-bottom: 0; + } + } + &.kss-guides-mode .kss-modifier__example, + &.kss-guides-mode .kss-modifier__example-footer { + &:before, + &:after { + z-index: -1; + box-sizing: border-box; + content: ''; + position: absolute; + width: 5px; + height: 5px; + border: 2px solid #000; + } + } + &.kss-guides-mode .kss-modifier__example { + border-color: #000; + + &:before { + top: -5px; + left: -5px; + border-top: 0; + border-left: 0; + } + &:after { + top: -5px; + right: -5px; + border-top: 0; + border-right: 0; + } + } + &.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example { + &:before { + left: auto; + right: 0; + } + &:after { + right: auto; + left: 0; + } + } + .kss-modifier__example-footer { + clear: both; + } + &.kss-guides-mode .kss-modifier__example-footer { + &:before { + bottom: -5px; + left: -5px; + border-bottom: 0; + border-left: 0; + } + &:after { + bottom: -5px; + right: -5px; + border-right: 0; + border-bottom: 0; + } + } + &.kss-guides-mode.kss-fullscreen-mode .kss-modifier__example-footer { + &:before { + left: auto; + right: 0; + } + &:after { + right: auto; + left: 0; + } + } + + .kss-markup { + margin: $kss-vertical-rhythm 0; + border: 1px solid #ccc; + + &[open] summary { + border-bottom: 1px solid #ccc; + margin-bottom: 3px; + } + + summary { + padding-left: 10px; + } + + pre { + margin: 0; + } + } + + .kss-source { + font-size: 80%; + } + + .kss-github { + display:none; + + @media screen and (min-width: 501px) { + display: block; + position: absolute; + top: 0; + right: 0; + } + + img { + border: 0; + } + } + + // ------------------------------------------------------------------------------ + // prettify.js styles + // ------------------------------------------------------------------------------ + + /* SPAN elements with the classes below are added by prettyprint. */ + .pln { color: #000 } /* plain text */ + + .str { color: #080 } /* string content */ + .kwd { color: #008 } /* a keyword */ + .com { color: #800 } /* a comment */ + .typ { color: #606 } /* a type name */ + .lit { color: #066 } /* a literal value */ + /* punctuation, lisp open bracket, lisp close bracket */ + .pun, .opn, .clo { color: #660 } + .tag { color: #008 } /* a markup tag name */ + .atn { color: #606 } /* a markup attribute name */ + .atv { color: #080 } /* a markup attribute value */ + .dec, .var { color: #606 } /* a declaration; a variable name */ + .fun { color: red } /* a function name */ + + /* Use higher contrast and text-weight for printable form. */ + @media print, projection { + .str { color: #060 } + .kwd { color: #006; font-weight: bold } + .com { color: #600; font-style: italic } + .typ { color: #404; font-weight: bold } + .lit { color: #044 } + .pun, .opn, .clo { color: #440 } + .tag { color: #006; font-weight: bold } + .atn { color: #404 } + .atv { color: #060 } + } + + /* Specify class=linenums on a pre to get line numbering */ + ol.linenums { + margin: 0; + padding: 0 0 3px 0; + list-style-type: none; + + li { + min-height: $kss-vertical-rhythm; + border-bottom: 1px solid #eee; + padding: 0 10px; + background: #fff; + + &:first-child { + padding-top: 3px; + } + } + /* Alternate shading for lines */ + li.L0, + li.L2, + li.L4, + li.L6, + li.L8 { + background: #fcfcfc; + } + } +} diff --git a/styleguide/kss-assets/noise-low.png b/styleguide/kss-assets/noise-low.png new file mode 100644 index 0000000000000000000000000000000000000000..105bee165dac3e8bdfd39138fe2121078bee65d8 GIT binary patch literal 5154 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

o0}d5G-n9-nqA^ zz?2&Ko-v)FmX%n@*qf?WVBQoVbi3T3!^RWMocC_t%r!K&7TOGNfdCzg<94}fDLUE& znr;r_C%PWs;u$x3QP`z4UUt{Z8a6^>8H)xC1gPsK%XTu}h7M3vW-Zd0Fh(#*GDtNB zlnUBewxKE6BNi@9zp+6}J;Lrif$%e&P+huLrge|Dwt$LE#YD z1z`c2XAUClgCc1B)pv39$%CT=k8(OK^OP$pn;Cry?H)KnnZh=^8bSx2 z`Ev!B9Ra<>u&%me6b6ZW_N+32vDy_{8)viwDp`2xb-tdCA1W-bVbFJ1v?2~LY`Y&X z(4TRN6jG)F$Rwf50r9*iwsusGM(gtYpBff(Z)4(Hl_$N7%F#`O$Kj%DP{*7vV0Vb7 z4isn@X1410Ku75mFU~rvYw)#D(yp&Au7s@|YZ;R?G{LAd{`%(ZT>vQ!@+l}Q6Exa8 zcXy=p?MMkFq-NM}^Y(LV7}h*POhNN(mS}|hjZczGyyM7F;zR*6ZSE+WRT@C!Y|MgZ z#?F(=3Bfq0E}qV$X$_Uc5)iC5LlgU~kb2!UMFW-#Pfhw(aDSCMa`sx6V8o`WUn5wdom8Sspgl%50 zWk)}s0!02<#-r$e{Z})9O{9|0@dsL`t5r6^2)uKhZlE)Y#a1)j=5sR1p^owh~O{RN8&v z8joTBvYU+@YFb=0Q&v*}T(mu`M6FqPuURsAlkX2O{1>56+A)_6e2L3iRuu*9eAHiSwH`KO?73a$2zf{95S%8Y&8=#=`RMZA}Saw568dpxkpp zSh#Jul0nMzgIO+_V_-1=ZEY?s5>WL3BIJ8}!S**Xil^SWgpnYga>{%~S*lHO9xGx4 zJz%U}Uw|P{o^RP}00|ELN9E_tXtr2CnkO@_8XSmLs(D+c=4A)|9&@-#E$*VPWP}B) z(ecqZA3&Vf&J5Je#DX43+6t zE@-dLi{WWvC{@e$1caW#bo;{4u2pZp=yR06!&`RnKy&JtY<6+vd!p}~6+~ee`1SQ| z8c=O*oM{Ru zK;Lu|dWsbVb)jVLod@IDQm=rmDZT*ImvX%T?_4BncQ+Tn#DWEw&GbfREuyM@c)h>L zOCgYB(TlO3TWhwoyppCvmqO#Oaxk4Kfbt88IC~Gi`t5zs!P?DY249lzO+F9lxX%@I zoZ+r3(t#^MwZ6Ajm7*I1atUbUAMbr6Q&uoNj!l9b^RbH%@?I`qEgxhBv6})(H>;1L zDo5;p%I#)RdiDZXiCF)n6c4KGH>=f3*mIDR{gg61yWFRqAy)nV=;%>{$XFVLST|&2 zmL>Icw*}zg|jqc&Xs$c6$FfB83R9CfJ5<@9=i> z6XYMATZ-10$|p_Un@8OPGKvs0T*eZ!kEc_ z2Qf(uCsegc;)-1VL~Be2jCbrG{{j2*KtcdKz0$^asRMhJ;iC=QQO)R>8lavYp?O-U z4vrwI_ + * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  // We use things that coerce to strings to make them compact when minified
    +  // and to defeat aggressive optimizers that fold large string constants.
    +  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
    +  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," +
    +      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
    +      "static,struct,switch,typedef,union,unsigned,void,volatile"];
    +  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
    +      "new,operator,private,protected,public,this,throw,true,try,typeof"];
    +  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
    +      "concept,concept_map,const_cast,constexpr,decltype," +
    +      "dynamic_cast,explicit,export,friend,inline,late_check," +
    +      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
    +      "template,typeid,typename,using,virtual,where"];
    +  var JAVA_KEYWORDS = [COMMON_KEYWORDS,
    +      "abstract,boolean,byte,extends,final,finally,implements,import," +
    +      "instanceof,null,native,package,strictfp,super,synchronized,throws," +
    +      "transient"];
    +  var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
    +      "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
    +      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock," +
    +      "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed," +
    +      "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];
    +  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
    +      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
    +      "true,try,unless,until,when,while,yes";
    +  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
    +      "debugger,eval,export,function,get,null,set,undefined,var,with," +
    +      "Infinity,NaN"];
    +  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
    +      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
    +      "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
    +  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
    +      "elif,except,exec,finally,from,global,import,in,is,lambda," +
    +      "nonlocal,not,or,pass,print,raise,try,with,yield," +
    +      "False,True,None"];
    +  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
    +      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
    +      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
    +      "BEGIN,END"];
    +  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
    +      "function,in,local,set,then,until"];
    +  var ALL_KEYWORDS = [
    +      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
    +      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
    +  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
    +
    +  // token style names.  correspond to css classes
    +  /**
    +   * token style for a string literal
    +   * @const
    +   */
    +  var PR_STRING = 'str';
    +  /**
    +   * token style for a keyword
    +   * @const
    +   */
    +  var PR_KEYWORD = 'kwd';
    +  /**
    +   * token style for a comment
    +   * @const
    +   */
    +  var PR_COMMENT = 'com';
    +  /**
    +   * token style for a type
    +   * @const
    +   */
    +  var PR_TYPE = 'typ';
    +  /**
    +   * token style for a literal value.  e.g. 1, null, true.
    +   * @const
    +   */
    +  var PR_LITERAL = 'lit';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PUNCTUATION = 'pun';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PLAIN = 'pln';
    +
    +  /**
    +   * token style for an sgml tag.
    +   * @const
    +   */
    +  var PR_TAG = 'tag';
    +  /**
    +   * token style for a markup declaration such as a DOCTYPE.
    +   * @const
    +   */
    +  var PR_DECLARATION = 'dec';
    +  /**
    +   * token style for embedded source.
    +   * @const
    +   */
    +  var PR_SOURCE = 'src';
    +  /**
    +   * token style for an sgml attribute name.
    +   * @const
    +   */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /**
    +   * token style for an sgml attribute value.
    +   * @const
    +   */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   * @const
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +
    +
    +/**
    + * A set of tokens that can precede a regular expression literal in
    + * javascript
    + * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
    + * has the full list, but I've removed ones that might be problematic when
    + * seen in languages that don't support regular expression literals.
    + *
    + * <p>Specifically, I've removed any keywords that can't precede a regexp
    + * literal in a syntactically legal javascript program, and I've removed the
    + * "in" keyword since it's not a keyword in many languages, and might be used
    + * as a count of inches.
    + *
    + * <p>The link a above does not accurately describe EcmaScript rules since
    + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    + * very well in practice.
    + *
    + * @private
    + * @const
    + */
    +var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
    +
    +// CAVEAT: this does not properly handle the case where a regular
    +// expression immediately follows another since a regular expression may
    +// have flags for case-sensitivity and the like.  Having regexp tokens
    +// adjacent is not valid in any language I'm aware of, so I'm punting.
    +// TODO: maybe style special characters inside a regexp as punctuation.
    +
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +
    +    var escapeCharToCodeUnit = {
    +      'b': 8,
    +      't': 9,
    +      'n': 0xa,
    +      'v': 0xb,
    +      'f': 0xc,
    +      'r': 0xd
    +    };
    +
    +    function decodeEscape(charsetPart) {
    +      var cc0 = charsetPart.charCodeAt(0);
    +      if (cc0 !== 92 /* \\ */) {
    +        return cc0;
    +      }
    +      var c1 = charsetPart.charAt(1);
    +      cc0 = escapeCharToCodeUnit[c1];
    +      if (cc0) {
    +        return cc0;
    +      } else if ('0' <= c1 && c1 <= '7') {
    +        return parseInt(charsetPart.substring(1), 8);
    +      } else if (c1 === 'u' || c1 === 'x') {
    +        return parseInt(charsetPart.substring(2), 16);
    +      } else {
    +        return charsetPart.charCodeAt(1);
    +      }
    +    }
    +
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups.
    +          groups.push(p);
    +        } else {
    +          var start = decodeEscape(p);
    +          var end;
    +          if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +            end = decodeEscape(charsetParts[i + 2]);
    +            i += 2;
    +          } else {
    +            end = start;
    +          }
    +          ranges.push([start, end]);
    +          // If the range might intersect letters, then expand it.
    +          // This case handling is too simplistic.
    +          // It does not deal with non-latin case folding.
    +          // It works for latin source code identifiers though.
    +          if (!(end < 65 || start > 122)) {
    +            if (!(end < 65 || start > 90)) {
    +              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +            }
    +            if (!(end < 97 || start > 122)) {
    +              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +            }
    +          }
    +        }
    +      }
    +
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +
    +      return parts.join('');
    +    }
    +
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   sourceCode: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +
    +    walk(node);
    +
    +    return {
    +      sourceCode: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      sourceCode: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  var notWs = /\S/;
    +
    +  /**
    +   * Given an element, if it contains only one child element and any text nodes
    +   * it contains contain only space characters, return the sole child element.
    +   * Otherwise returns undefined.
    +   * <p>
    +   * This is meant to return the CODE element in {@code <pre><code ...>} when
    +   * there is a single child element that contains all the non-space textual
    +   * content, but not to return anything where there are multiple child elements
    +   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
    +   * is textual content.
    +   */
    +  function childContentWrapper(element) {
    +    var wrapper = undefined;
    +    for (var c = element.firstChild; c; c = c.nextSibling) {
    +      var type = c.nodeType;
    +      wrapper = (type === 1)  // Element Node
    +          ? (wrapper ? element : c)
    +          : (type === 3)  // Text Node
    +          ? (notWs.test(c.nodeValue) ? element : wrapper)
    +          : wrapper;
    +    }
    +    return wrapper === element ? undefined : wrapper;
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +
    +    /**
    +     * Lexes job.sourceCode and produces an output array job.decorations of
    +     * style classes preceded by the position at which they start in
    +     * job.sourceCode in order.
    +     *
    +     * @param {Object} job an object like <pre>{
    +     *    sourceCode: {string} sourceText plain text,
    +     *    basePos: {int} position of job.sourceCode in the larger chunk of
    +     *        sourceCode.
    +     * }</pre>
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.sourceCode, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      /**
    +       * @const
    +       */
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var types = options['types'];
    +    if (types) {
    +      fallthroughStylePatterns.push([PR_TYPE, types]);
    +    }
    +
    +    var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
    +           null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +
    +    var document = node.ownerDocument;
    +
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.sourceCode} around style boundaries in
    +   * {@code job.decorations} and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    sourceCode: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.sourceCode in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +
    +    var source = job.sourceCode;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before
    +    // sourceIndex.
    +    var decorationIndex = 0;
    +
    +    // Remove all zero-length decorations.
    +    decorations[nDecorations] = sourceLength;
    +    var decPos, i;
    +    for (i = decPos = 0; i < nDecorations;) {
    +      if (decorations[i] !== decorations[i + 2]) {
    +        decorations[decPos++] = decorations[i++];
    +        decorations[decPos++] = decorations[i++];
    +      } else {
    +        i += 2;
    +      }
    +    }
    +    nDecorations = decPos;
    +
    +    // Simplify decorations.
    +    for (i = decPos = 0; i < nDecorations;) {
    +      var startPos = decorations[i];
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[i + 1];
    +      var end = i + 2;
    +      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +
    +    nDecorations = decorations.length = decPos;
    +
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +
    +      var end = Math.min(spanEnd, decEnd);
    +
    +      var textNode = spans[spanIndex + 1];
    +      var styledText;
    +      if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
    +          // Don't introduce spans around empty text nodes.
    +          && (styledText = source.substring(sourceIndex, end))) {
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +
    +      sourceIndex = end;
    +
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        sourceCode: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.sourceCode in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if (window['console']) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'types': C_TYPES
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null,true,false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true,
    +          'types': C_TYPES
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.sourceCode;
    +      job.sourceCode = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return +(new Date); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
    +    var prettyPrintRe = /\bprettyprint\b/;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock['now']() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock['now']() < endTime; k++) {
    +        var cs = elements[k];
    +        var className = cs.className;
    +        if (className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          // HTML5 recommends that a language be specified using "language-"
    +          // as the prefix instead.  Google Code Prettify supports both.
    +          // http://dev.w3.org/html5/spec-author-view/the-code-element.html
    +          var langExtension = className.match(langExtensionRe);
    +          // Support <pre class="prettyprint"><code class="language-c">
    +          var wrapper;
    +          if (!langExtension && (wrapper = childContentWrapper(cs))
    +              && "CODE" === wrapper.tagName) {
    +            langExtension = wrapper.className.match(langExtensionRe);
    +          }
    +
    +          if (langExtension) {
    +            langExtension = langExtension[1];
    +          }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +   /**
    +    * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +    * {@code class=prettyprint} and prettify them.
    +    *
    +    * @param {Function?} opt_whenDone if specified, called when the last entry
    +    *     has been finished.
    +    */
    +  window['prettyPrintOne'] = prettyPrintOne;
    +   /**
    +    * Pretty print a chunk of code.
    +    *
    +    * @param {string} sourceCodeHtml code as html
    +    * @return {string} code as html, but prettier
    +    */
    +  window['prettyPrint'] = prettyPrint;
    +   /**
    +    * Contains functions for creating and registering new language handlers.
    +    * @type {Object}
    +    */
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/styleguide/kss-assets/sample-inline.png b/styleguide/kss-assets/sample-inline.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..30494c6d956306872707eebd2b006639093d2e7f
    GIT binary patch
    literal 1155
    zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3C<R_&n
    zc;+Uirv{}arc@T5OtoQPU{=Wti71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL
    zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ
    zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#1Knf;GeZS46Fox{
    z14|Q29R(u;Lj!$7BYgvNT|)yaQ*$c=Lj@>M0@_xTl4cd;;s&(~$g@?-C@Cqh($_C9
    zFV`zK*2^zS*Eh7ZwA42+(l;{F1**_3uFNY*tkBIXR)(42l3JWxlvz-cnV+WsGBGhJ
    zzqG_w3FuOY7jg^W#^x16g9#X5`W1-<`i6Q2ATPlb`ugHmnwtw(U0f2Bif}JhgNs8d
    z3sUuiQj7CTi;{s6m!=G|s=&&*C^fMpzbGU>KL-|y0U7xv`NbLe1q#l=rh0}7zKO}1
    zc_0z64qsm@&%EN2#JuEGPZwJypc#6ZnJHF=E^g+Q28M1<#wG@ahOQ=-7S7JjPG*kA
    zZU#oK#x9mHy)OC5rManjB{01yaJ@zbIQ4=OLv8`kW|!2W%(B!Jx1#)91+b^BGI6`b
    z1*dsXy(u`|V(5xfuRhQ*`k<&qifWh;F#Uj-@PrHGz>|Jz9x%NZ0TZ@be7GJkQ+)Mw
    zaSW-r<uhTU7jq)d@yWYq>$vV%8o;7yQTkT+2ZLXp9_#dPj9(ak@%ZVnzN{#D_2?1z
    z6u(D{PUrePQYz6@{Ws~owaJ9v>O242pA@f+wC|YNxr(cC#)+w2e6CL~3LC7M^q(!#
    zSImXEhV!LBDU0ihe{b66i&yy8JfB?CRsOY)`<UN>!m#g~Gu-}1d%Qm)FM3dKwZDmO
    z36Fv0`H1G;{(BFmm((sUcr)$%56)sfJJD&=?mUXG(A+p}Y9Zt1e7PG(l51kr=9hK{
    z-##9`_4?bGC94azhh)4oYA^P^AO0!0X3D!6Wj`6;E3Uuv(D`3ahS$BSZ`ubKQg{1b
    U(Fi^e4k{KrUHx3vIVCg!0Cum9`v3p{
    
    literal 0
    HcmV?d00001
    
    diff --git a/styleguide/kss-assets/sample-inline.svg b/styleguide/kss-assets/sample-inline.svg
    new file mode 100644
    index 000000000..d581ae59a
    --- /dev/null
    +++ b/styleguide/kss-assets/sample-inline.svg
    @@ -0,0 +1,3 @@
    +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" width="10px" height="10px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
    +<polygon fill="#bdad94" stroke="#bdad94" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="  259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08   29.274,197.007 188.165,173.919 "/>
    +</svg>
    diff --git a/styleguide/kss-assets/sample.png b/styleguide/kss-assets/sample.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..56a579d7503d36cefe01a0aa81303cccd0b45ba6
    GIT binary patch
    literal 65497
    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
    XB>29OxU;HY00000NkvXXu0mjf42T|t
    
    literal 0
    HcmV?d00001
    
    diff --git a/styleguide/kss-assets/sample.svg b/styleguide/kss-assets/sample.svg
    new file mode 100644
    index 000000000..878030be2
    --- /dev/null
    +++ b/styleguide/kss-assets/sample.svg
    @@ -0,0 +1,3 @@
    +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" width="300px" height="300px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
    +<polygon fill="#bdad94" stroke="#bdad94" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="  259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08   29.274,197.007 188.165,173.919 "/>
    +</svg>
    diff --git a/styleguide/kss-assets/scrollspy.js b/styleguide/kss-assets/scrollspy.js
    new file mode 100644
    index 000000000..0cff71f27
    --- /dev/null
    +++ b/styleguide/kss-assets/scrollspy.js
    @@ -0,0 +1,147 @@
    +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
    +function ScrollSpy (wrapper, opt) {
    +
    +  this.doc = document;
    +  this.wrapper = (typeof wrapper === 'string') ? this.doc.querySelector(wrapper) : wrapper;
    +  this.nav = this.wrapper.querySelectorAll(opt.nav);
    +
    +  this.contents = [];
    +  this.win = window;
    +
    +  this.winH = this.win.innerHeight;
    +
    +  this.className = opt.className;
    +
    +  this.callback = opt.callback;
    +
    +  this.init();
    +}
    +
    +ScrollSpy.prototype.init = function () {
    +  this.contents = this.getContents();
    +  this.attachEvent();
    +};
    +
    +ScrollSpy.prototype.getContents = function () {
    +  var targetList = [];
    +
    +  for (var i = 0, max = this.nav.length; i < max; i++) {
    +    var href = this.nav[i].href;
    +
    +    targetList.push(this.doc.getElementById(href.split('#')[1]));
    +  }
    +
    +  return targetList;
    +};
    +
    +ScrollSpy.prototype.attachEvent = function () {
    +  this.win.addEventListener('load', (function () {
    +    this.spy(this.callback);
    +  }).bind(this));
    +
    +
    +  var scrollingTimer;
    +
    +  this.win.addEventListener('scroll', (function () {
    +    if (scrollingTimer) {
    +      clearTimeout(scrollingTimer);
    +    }
    +
    +    var _this = this;
    +
    +    scrollingTimer = setTimeout(function () {
    +      _this.spy(_this.callback);
    +    }, 10);
    +  }).bind(this));
    +
    +
    +  var resizingTimer;
    +
    +  this.win.addEventListener('resize', (function () {
    +    if (resizingTimer) {
    +      clearTimeout(resizingTimer);
    +    }
    +
    +    var _this = this;
    +
    +    resizingTimer = setTimeout(function () {
    +      _this.spy(_this.callback);
    +    }, 10);
    +  }).bind(this));
    +};
    +
    +ScrollSpy.prototype.spy = function (cb) {
    +  var elems = this.getElemsViewState();
    +
    +  this.markNav(elems);
    +
    +  if (typeof cb === 'function') {
    +    cb(elems);
    +  }
    +};
    +
    +ScrollSpy.prototype.getElemsViewState = function () {
    +  var elemsInView = [],
    +    elemsOutView = [],
    +    viewStatusList = [];
    +
    +  for (var i = 0, max = this.contents.length; i < max; i++) {
    +    var currentContent = this.contents[i],
    +      isInView = this.isInView(currentContent);
    +
    +    if (isInView) {
    +      elemsInView.push(currentContent);
    +    } else {
    +      elemsOutView.push(currentContent);
    +    }
    +    viewStatusList.push(isInView);
    +  }
    +
    +  return {
    +    inView: elemsInView,
    +    outView: elemsOutView,
    +    viewStatusList: viewStatusList
    +  };
    +};
    +
    +ScrollSpy.prototype.isInView = function (el) {
    +  var winH = this.winH,
    +    scrollTop = this.doc.documentElement.scrollTop || this.doc.body.scrollTop,
    +    scrollBottom = scrollTop + winH,
    +    rect = el.getBoundingClientRect(),
    +    elTop = rect.top + scrollTop,
    +    elBottom = elTop + el.offsetHeight;
    +
    +  return (elTop < scrollBottom) && (elBottom > scrollTop);
    +};
    +
    +ScrollSpy.prototype.markNav = function (elems) {
    +  var navItems = this.nav,
    +    isAlreadyMarked = false;
    +
    +  for (var i = 0, max = navItems.length; i < max; i++) {
    +    if (elems.viewStatusList[i] && !isAlreadyMarked) {
    +      isAlreadyMarked = true;
    +      navItems[i].classList.add(this.className);
    +    } else {
    +      navItems[i].classList.remove(this.className);
    +    }
    +  }
    +};
    +
    +
    +module.exports = ScrollSpy;
    +
    +},{}],2:[function(require,module,exports){
    +(function (global){
    +/**
    + * ScrollSpy
    + *
    + */
    +
    +var ScrollSpy = require('./modules/scrollspy');
    +
    +global.ScrollSpy = module.exports = ScrollSpy;
    +
    +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
    +},{"./modules/scrollspy":1}]},{},[2]);
    diff --git a/styleguide/section-components.html b/styleguide/section-components.html
    new file mode 100644
    index 000000000..443a0a3de
    --- /dev/null
    +++ b/styleguide/section-components.html
    @@ -0,0 +1,488 @@
    +<!DOCTYPE html>
    +<html class="no-js" lang="en">
    +<head>
    +  <meta charset="utf-8">
    +  <title>Decanter Style Guide</title>
    +
    +  <meta name="description" content="">
    +  <meta name="generator" content="kss-node">
    +  <meta name="viewport" content="width=device-width">
    +
    +  <link rel="stylesheet" href="kss-assets/kss.css">
    +  <link rel="stylesheet" href="../css/decanter.css">
    +
    +</head>
    +<body id="kss-node" >
    +
    +<div class="kss-sidebar kss-style">
    +  <header class="kss-header">
    +    <h1 class="kss-doc-title">Decanter Style Guide</h1>
    +  </header>
    +  <nav class="kss-nav">
    +    <ul class="kss-nav__menu">
    +      <li class="kss-nav__menu-item">
    +        <a class="kss-nav__menu-link" href="./">
    +          <span class="kss-nav__ref">0</span
    +          ><span class="kss-nav__name">Overview</span>
    +        </a>
    +      </li>
    +          <li class="kss-nav__menu-item">
    +        <a class="kss-nav__menu-link" href="section-components.html">
    +          <span class="kss-nav__ref">1</span><span class="kss-nav__name">Components</span>
    +        </a>
    +                  <ul class="kss-nav__menu-child">
    +                      <li class="kss-nav__menu-item">
    +              <a class="kss-nav__menu-link" href="section-components.html#kssref-components-atoms">
    +                <span class="kss-nav__ref ">1.1</span
    +                ><span class="kss-nav__name">Atoms</span>
    +              </a>
    +            </li>
    +                      <li class="kss-nav__menu-item">
    +              <a class="kss-nav__menu-link" href="section-components.html#kssref-components-molecules">
    +                <span class="kss-nav__ref ">1.2</span
    +                ><span class="kss-nav__name">Molecules</span>
    +              </a>
    +            </li>
    +                      <li class="kss-nav__menu-item">
    +              <a class="kss-nav__menu-link" href="section-components.html#kssref-components-organisims">
    +                <span class="kss-nav__ref ">1.3</span
    +                ><span class="kss-nav__name">Organisims</span>
    +              </a>
    +            </li>
    +                      <li class="kss-nav__menu-item">
    +              <a class="kss-nav__menu-link" href="section-components.html#kssref-components-organisims-alerts">
    +                <span class="kss-nav__ref kss-nav__ref-child">1.3.1</span
    +                ><span class="kss-nav__name">Alerts</span>
    +              </a>
    +            </li>
    +                    </ul>
    +              </li>
    +        </ul>
    +  </nav>
    +</div>
    +<article role="main" class="kss-main">
    +
    +  
    +          <div id="kssref-components" class="kss-section kss-section--depth-1 ">
    +      <div class="kss-style">
    +                <h1 class="kss-title kss-title--level-1">
    +          <a class="kss-title__permalink" href="#kssref-components">
    +            <span class="kss-title__ref">
    +              1
    +              <span class="kss-title__permalink-hash">
    +                Components
    +              </span>
    +            </span>
    +            Components
    +          </a>
    +        </h1>
    +
    +        
    +        
    +              </div>
    +
    +      
    +          </div>
    +          <section id="kssref-components-atoms" class="kss-section kss-section--depth-2 ">
    +      <div class="kss-style">
    +                <h2 class="kss-title kss-title--level-2">
    +          <a class="kss-title__permalink" href="#kssref-components-atoms">
    +            <span class="kss-title__ref">
    +              1.1
    +              <span class="kss-title__permalink-hash">
    +                Components.Atoms
    +              </span>
    +            </span>
    +            Atoms
    +          </a>
    +        </h2>
    +
    +        
    +        
    +              </div>
    +
    +      
    +              <div class="kss-source kss-style">
    +          Source: <code>components/index.scss</code>, line 7
    +        </div>
    +          </section>
    +          <section id="kssref-components-molecules" class="kss-section kss-section--depth-2 ">
    +      <div class="kss-style">
    +                <h2 class="kss-title kss-title--level-2">
    +          <a class="kss-title__permalink" href="#kssref-components-molecules">
    +            <span class="kss-title__ref">
    +              1.2
    +              <span class="kss-title__permalink-hash">
    +                Components.Molecules
    +              </span>
    +            </span>
    +            Molecules
    +          </a>
    +        </h2>
    +
    +        
    +        
    +              </div>
    +
    +      
    +              <div class="kss-source kss-style">
    +          Source: <code>components/index.scss</code>, line 11
    +        </div>
    +          </section>
    +          <section id="kssref-components-organisims" class="kss-section kss-section--depth-2 ">
    +      <div class="kss-style">
    +                <h2 class="kss-title kss-title--level-2">
    +          <a class="kss-title__permalink" href="#kssref-components-organisims">
    +            <span class="kss-title__ref">
    +              1.3
    +              <span class="kss-title__permalink-hash">
    +                Components.Organisims
    +              </span>
    +            </span>
    +            Organisims
    +          </a>
    +        </h2>
    +
    +        
    +        
    +              </div>
    +
    +      
    +              <div class="kss-source kss-style">
    +          Source: <code>components/index.scss</code>, line 15
    +        </div>
    +          </section>
    +          <section id="kssref-components-organisims-alerts" class="kss-section kss-section--depth-3 ">
    +      <div class="kss-style">
    +                <h3 class="kss-title kss-title--level-3">
    +          <a class="kss-title__permalink" href="#kssref-components-organisims-alerts">
    +            <span class="kss-title__ref">
    +              1.3.1
    +              <span class="kss-title__permalink-hash">
    +                Components.Organisims.Alerts
    +              </span>
    +            </span>
    +            Alerts
    +          </a>
    +        </h3>
    +
    +                  <p class="kss-toolbar">
    +                          <a href="#kssref-components-organisims-alerts" data-kss-fullscreen="kssref-components-organisims-alerts">
    +                <span class="kss-toolbar__tooltip">Toggle full screen</span>
    +                <svg class="off" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
    +                  <path class="kss-toolbar__icon-fill" d="M64 0v26l-10-10-12 12-6-6 12-12-10-10zM28 42l-12 12 10 10h-26v-26l10 10 12-12z"></path>
    +                </svg>
    +                <svg class="on" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
    +                  <path class="kss-toolbar__icon-fill" d="M28 36v26l-10-10-12 12-6-6 12-12-10-10zM64 6l-12 12 10 10h-26v-26l10 10 12-12z"></path>
    +                </svg>
    +              </a>
    +              <a href="item-components-organisims-alerts.html" target="_blank">
    +                <span class="kss-toolbar__tooltip">Open in new window</span>
    +                <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
    +                  <rect x="0" y="20" width="40" height="44" fill="#fff"/>
    +                  <path class="kss-toolbar__icon-fill" d="M40,64l-40,0l0,-44l40,0l0,44Zm-36,-40l0,36l32,0l0,-36l-32,0Z"/>
    +                  <rect class="kss-toolbar__icon-fill" x="0" y="20" width="40" height="10"/>
    +                  <rect x="24" y="0" width="40" height="44" fill="#fff"/>
    +                  <path class="kss-toolbar__icon-fill" d="M64,44l-40,0l0,-44l40,0l0,44Zm-36,-40l0,36l32,0l0,-36l-32,0Z"/>
    +                  <rect class="kss-toolbar__icon-fill" x="24" y="0" width="40" height="10"/>
    +                </svg>
    +              </a>
    +                        <a href="#kssref-components-organisims-alerts" data-kss-guides="true">
    +              <span class="kss-toolbar__tooltip">Toggle example guides</span>
    +              <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
    +                <rect class="kss-toolbar__icon-fill" x="5" y="35" width="5" height="9"/>
    +                <rect class="kss-toolbar__icon-fill" x="54" y="21" width="5" height="9"/>
    +                <rect class="kss-toolbar__icon-fill" x="54" y="35" width="5" height="9"/>
    +                <rect class="kss-toolbar__icon-fill" x="5" y="21" width="5" height="9"/>
    +                <rect class="kss-toolbar__icon-fill" x="5" y="0" width="5" height="15"/>
    +                <rect class="kss-toolbar__icon-fill" x="35" y="5" width="9" height="5"/>
    +                <rect class="kss-toolbar__icon-fill" x="20" y="5" width="9" height="5"/>
    +                <rect class="kss-toolbar__icon-fill" x="0" y="5" width="15" height="5"/>
    +                <rect class="kss-toolbar__icon-fill" x="54" y="0" width="5" height="15"/>
    +                <rect class="kss-toolbar__icon-fill" x="49" y="5" width="15" height="5"/>
    +                <rect class="kss-toolbar__icon-fill" x="54" y="49" width="5" height="15"/>
    +                <rect class="kss-toolbar__icon-fill" x="49" y="54" width="15" height="5"/>
    +                <rect class="kss-toolbar__icon-fill" x="5" y="49" width="5" height="15"/>
    +                <rect class="kss-toolbar__icon-fill" x="0" y="54" width="15" height="5"/>
    +                <rect class="kss-toolbar__icon-fill" x="35" y="54" width="9" height="5"/>
    +                <rect class="kss-toolbar__icon-fill" x="20" y="54" width="9" height="5"/>
    +              </svg>
    +            </a>
    +            <a href="#kssref-components-organisims-alerts" data-kss-markup="true">
    +              <span class="kss-toolbar__tooltip">Toggle HTML markup</span>
    +              <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 64 64">
    +                <path class="kss-toolbar__icon-fill" d="M37.555,46.239l6.103,6.103l20.342,-20.342l-20.342,-20.342l-6.103,6.103l14.24,14.239l-14.24,14.239Z"/>
    +                <path class="kss-toolbar__icon-fill" d="M26.445,17.761l-6.103,-6.103l-20.342,20.342l20.342,20.342l6.103,-6.103l-14.24,-14.239l14.24,-14.239Z"/>
    +              </svg>
    +            </a>
    +          </p>
    +        
    +                  <div class="kss-description">
    +            <p>The alert types. Use these for the Drupal messages.</p>
    +
    +          </div>
    +        
    +              </div>
    +
    +              <div class="kss-modifier__wrapper">
    +          <div class="kss-modifier__heading kss-style">
    +            Examples          </div>
    +
    +                      <div class="kss-modifier__default-name kss-style">
    +              Default styling
    +            </div>
    +          
    +          <div class="kss-modifier__example">
    +            <div class="decanter-alert decanter-alert-success">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Success Alert</h3>
    +    <p class="decanter-alert__text">This is a success alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-warning">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Warning Alert</h3>
    +    <p class="decanter-alert__text">This is a warning alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-error" role="alert">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Error Alert</h3>
    +    <p class="decanter-alert__text">This is a error alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-info">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Information Alert</h3>
    +    <p class="decanter-alert__text">This is an information alert.</p>
    +  </div>
    +</div>
    +
    +            <div class="kss-modifier__example-footer"></div>
    +          </div>
    +
    +                      <div class="kss-modifier__name kss-style">
    +              .decanter-alert-success
    +            </div>
    +            <div class="kss-modifier__description kss-style">
    +              Successful Transaction Message
    +            </div>
    +            <div class="kss-modifier__example">
    +              <div class="decanter-alert decanter-alert-success">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Success Alert</h3>
    +    <p class="decanter-alert__text">This is a success alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-warning">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Warning Alert</h3>
    +    <p class="decanter-alert__text">This is a warning alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-error" role="alert">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Error Alert</h3>
    +    <p class="decanter-alert__text">This is a error alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-info">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Information Alert</h3>
    +    <p class="decanter-alert__text">This is an information alert.</p>
    +  </div>
    +</div>
    +
    +              <div class="kss-modifier__example-footer"></div>
    +            </div>
    +                      <div class="kss-modifier__name kss-style">
    +              .decanter-alert-warning
    +            </div>
    +            <div class="kss-modifier__description kss-style">
    +              Warning Message
    +            </div>
    +            <div class="kss-modifier__example">
    +              <div class="decanter-alert decanter-alert-success">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Success Alert</h3>
    +    <p class="decanter-alert__text">This is a success alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-warning">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Warning Alert</h3>
    +    <p class="decanter-alert__text">This is a warning alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-error" role="alert">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Error Alert</h3>
    +    <p class="decanter-alert__text">This is a error alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-info">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Information Alert</h3>
    +    <p class="decanter-alert__text">This is an information alert.</p>
    +  </div>
    +</div>
    +
    +              <div class="kss-modifier__example-footer"></div>
    +            </div>
    +                      <div class="kss-modifier__name kss-style">
    +              .decanter-alert-error
    +            </div>
    +            <div class="kss-modifier__description kss-style">
    +              Error Message
    +            </div>
    +            <div class="kss-modifier__example">
    +              <div class="decanter-alert decanter-alert-success">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Success Alert</h3>
    +    <p class="decanter-alert__text">This is a success alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-warning">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Warning Alert</h3>
    +    <p class="decanter-alert__text">This is a warning alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-error" role="alert">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Error Alert</h3>
    +    <p class="decanter-alert__text">This is a error alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-info">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Information Alert</h3>
    +    <p class="decanter-alert__text">This is an information alert.</p>
    +  </div>
    +</div>
    +
    +              <div class="kss-modifier__example-footer"></div>
    +            </div>
    +                      <div class="kss-modifier__name kss-style">
    +              .decanter-alert-info
    +            </div>
    +            <div class="kss-modifier__description kss-style">
    +              Informative Message
    +            </div>
    +            <div class="kss-modifier__example">
    +              <div class="decanter-alert decanter-alert-success">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Success Alert</h3>
    +    <p class="decanter-alert__text">This is a success alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-warning">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Warning Alert</h3>
    +    <p class="decanter-alert__text">This is a warning alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-error" role="alert">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Error Alert</h3>
    +    <p class="decanter-alert__text">This is a error alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-info">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Information Alert</h3>
    +    <p class="decanter-alert__text">This is an information alert.</p>
    +  </div>
    +</div>
    +
    +              <div class="kss-modifier__example-footer"></div>
    +            </div>
    +                  </div>
    +                  <details class="kss-markup kss-style">
    +            <summary>
    +                              Markup: <code>../templates/components/molecules/alerts/alerts.html.twig</code>
    +                          </summary>
    +            <pre class="prettyprint linenums lang-html"><code data-language="html">&lt;div class=&quot;decanter-alert decanter-alert-success&quot;&gt;
    +  &lt;div class=&quot;decanter-alert__body&quot;&gt;
    +    &lt;h3 class=&quot;decanter-alert__heading&quot;&gt;Success Alert&lt;/h3&gt;
    +    &lt;p class=&quot;decanter-alert__text&quot;&gt;This is a success alert.&lt;/p&gt;
    +  &lt;/div&gt;
    +&lt;/div&gt;
    +
    +&lt;div class=&quot;decanter-alert decanter-alert-warning&quot;&gt;
    +  &lt;div class=&quot;decanter-alert__body&quot;&gt;
    +    &lt;h3 class=&quot;decanter-alert__heading&quot;&gt;Warning Alert&lt;/h3&gt;
    +    &lt;p class=&quot;decanter-alert__text&quot;&gt;This is a warning alert.&lt;/p&gt;
    +  &lt;/div&gt;
    +&lt;/div&gt;
    +
    +&lt;div class=&quot;decanter-alert decanter-alert-error&quot; role=&quot;alert&quot;&gt;
    +  &lt;div class=&quot;decanter-alert__body&quot;&gt;
    +    &lt;h3 class=&quot;decanter-alert__heading&quot;&gt;Error Alert&lt;/h3&gt;
    +    &lt;p class=&quot;decanter-alert__text&quot;&gt;This is a error alert.&lt;/p&gt;
    +  &lt;/div&gt;
    +&lt;/div&gt;
    +
    +&lt;div class=&quot;decanter-alert decanter-alert-info&quot;&gt;
    +  &lt;div class=&quot;decanter-alert__body&quot;&gt;
    +    &lt;h3 class=&quot;decanter-alert__heading&quot;&gt;Information Alert&lt;/h3&gt;
    +    &lt;p class=&quot;decanter-alert__text&quot;&gt;This is an information alert.&lt;/p&gt;
    +  &lt;/div&gt;
    +&lt;/div&gt;
    +</code></pre>
    +          </details>
    +              
    +              <div class="kss-source kss-style">
    +          Source: <code>components/molecules/_alerts.scss</code>, line 12
    +        </div>
    +          </section>
    +  </article>
    +
    +<!-- SCRIPTS -->
    +<script src="kss-assets/kss.js"></script>
    +<script src="kss-assets/scrollspy.js"></script>
    +<script src="kss-assets/prettify.js"></script>
    +<script src="kss-assets/kss-fullscreen.js"></script>
    +<script src="kss-assets/kss-guides.js"></script>
    +<script src="kss-assets/kss-markup.js"></script>
    +<script>
    +  prettyPrint();
    +  var spy = new ScrollSpy('#kss-node', {
    +    nav: '.kss-nav__menu-child > li > a',
    +    className: 'is-in-viewport'
    +  });
    +  var kssFullScreen = new KssFullScreen({
    +    idPrefix: 'kss-fullscreen-',
    +    bodyClass: 'kss-fullscreen-mode',
    +    elementClass: 'is-fullscreen'
    +  });
    +  var kssGuides = new KssGuides({
    +    bodyClass: 'kss-guides-mode'
    +  });
    +  var kssMarkup = new KssMarkup({
    +    bodyClass: 'kss-markup-mode',
    +    detailsClass: 'kss-markup'
    +  });
    +</script>
    +
    +
    +
    +
    +<!-- Automatically built using <a href="https://github.com/kss-node/kss-node">kss-node</a>. -->
    +</body>
    +</html>
    diff --git a/templates/components/molecules/alerts.html b/templates/components/molecules/alerts.html
    deleted file mode 100644
    index c780fc9fc..000000000
    --- a/templates/components/molecules/alerts.html
    +++ /dev/null
    @@ -1,58 +0,0 @@
    -<!DOCTYPE html>
    -<html lang="en">
    -
    -<head>
    -  <meta charset="utf-8">
    -  <meta http-equiv="X-UA-Compatible" content="IE=edge">
    -  <meta name="viewport" content="width=device-width, initial-scale=1">
    -  <title>Decanter Components | Alerts</title>
    -  <!-- Stylesheet -->
    -  <link rel="stylesheet" href="../../../css/decanter.css">
    -  <!-- Example Component Styles -->
    -  <style>
    -    .grid-example {
    -      margin-bottom: 2em;
    -    }
    -
    -    .grid-example [class*="decanter-grid"]>* {
    -      margin-top: 0.5em;
    -      margin-bottom: 0.5em;
    -    }
    -  </style>
    -</head>
    -
    -<body>
    -  <div class="grid-example">
    -    <div class="decanter-grid">
    -      <h1>Alerts</h1>
    -      <div class="decanter-alert decanter-alert-success">
    -        <div class="decanter-alert__body">
    -          <h3 class="decanter-alert__heading">Success Alert</h3>
    -          <p class="decanter-alert__text">This is a success alert.</p>
    -        </div>
    -      </div>
    -      <div class="decanter-alert decanter-alert-warning">
    -        <div class="decanter-alert__body">
    -          <h3 class="decanter-alert__heading">Warning Alert</h3>
    -          <p class="decanter-alert__text">This is a warning alert.</p>
    -        </div>
    -      </div>
    -      <div class="decanter-alert decanter-alert-error" role="alert">
    -        <div class="decanter-alert__body">
    -          <h3 class="decanter-alert__heading">Error Alert</h3>
    -          <p class="decanter-alert__text">This is a error alert.</p>
    -        </div>
    -      </div>
    -      <div class="decanter-alert decanter-alert-info">
    -        <div class="decanter-alert__body">
    -          <h3 class="decanter-alert__heading">Information Alert</h3>
    -          <p class="decanter-alert__text">This is an information alert.</p>
    -        </div>
    -      </div>
    -    </div>
    -  </div>
    -  <!-- Script -->
    -  <script src="../../js/decanter.min.js"></script>
    -</body>
    -
    -</html>
    diff --git a/templates/components/molecules/alerts/alerts.html.twig b/templates/components/molecules/alerts/alerts.html.twig
    new file mode 100644
    index 000000000..8be090e48
    --- /dev/null
    +++ b/templates/components/molecules/alerts/alerts.html.twig
    @@ -0,0 +1,27 @@
    +<div class="decanter-alert decanter-alert-success">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Success Alert</h3>
    +    <p class="decanter-alert__text">This is a success alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-warning">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Warning Alert</h3>
    +    <p class="decanter-alert__text">This is a warning alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-error" role="alert">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Error Alert</h3>
    +    <p class="decanter-alert__text">This is a error alert.</p>
    +  </div>
    +</div>
    +
    +<div class="decanter-alert decanter-alert-info">
    +  <div class="decanter-alert__body">
    +    <h3 class="decanter-alert__heading">Information Alert</h3>
    +    <p class="decanter-alert__text">This is an information alert.</p>
    +  </div>
    +</div>
    diff --git a/templates/components/molecules/icon-grid.html b/templates/components/organisms/icon-grid/icon-grid.html
    similarity index 100%
    rename from templates/components/molecules/icon-grid.html
    rename to templates/components/organisms/icon-grid/icon-grid.html
    diff --git a/templates/components/molecules/main-menu.html b/templates/components/organisms/main-menu/main-menu.html
    similarity index 100%
    rename from templates/components/molecules/main-menu.html
    rename to templates/components/organisms/main-menu/main-menu.html
    diff --git a/templates/components/molecules/mega-menu.html b/templates/components/organisms/mega-menu/mega-menu.html
    similarity index 100%
    rename from templates/components/molecules/mega-menu.html
    rename to templates/components/organisms/mega-menu/mega-menu.html
    diff --git a/templates/components/molecules/sidenav.html b/templates/components/organisms/sidenav/sidenav.html
    similarity index 100%
    rename from templates/components/molecules/sidenav.html
    rename to templates/components/organisms/sidenav/sidenav.html