",{text:b})}}},functionAttributes:["beforeOpen","afterOpen","beforeContent","afterContent","beforeClose","afterClose"],readElementConfig:function(b,c){var d=this,e=new RegExp("^data-"+c+"-(.*)"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=a.parseJSON(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;"object"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f=d.namespace||e.defaults.namespace,g=a.extend({},e.defaults,e.readElementConfig(b[0],f),d);return b.on(g.openTrigger+"."+g.namespace,g.filter,function(f){var h=a.extend({$source:b,$currentTarget:a(this)},e.readElementConfig(b[0],g.namespace),e.readElementConfig(this,g.namespace),d);new e(c,h).open(f)}),b},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return d(),a.grep(c,function(a){return a instanceof b})},close:function(){var a=this.current();return a?a.close():void 0},_onReady:function(){var b=this;b.autoBind&&(b.attach(a(document),{filter:b.autoBind}),a(b.autoBind).filter("[data-featherlight-filter]").each(function(){b.attach(a(this))}))},_callbackChain:{onKeyUp:function(a,b){return 27===b.keyCode?(this.closeOnEsc&&this.$instance.find("."+this.namespace+"-close:first").click(),!1):a(b)},onResize:function(a,b){if(this.$content.naturalWidth){var c=this.$content.naturalWidth,d=this.$content.naturalHeight;this.$content.css("width","").css("height","");var e=Math.max(c/parseInt(this.$content.parent().css("width"),10),d/parseInt(this.$content.parent().css("height"),10));e>1&&this.$content.css("width",""+c/e+"px").css("height",""+d/e+"px")}return a(b)},afterContent:function(a,b){var c=a(b);return this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c)},a(document).ready(function(){b._onReady()})}(jQuery);
\ No newline at end of file
diff --git a/docs/themes/learn2/js/html5shiv-printshiv.min.js b/docs/themes/learn2/js/html5shiv-printshiv.min.js
new file mode 100644
index 00000000..9c78ee3c
--- /dev/null
+++ b/docs/themes/learn2/js/html5shiv-printshiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=x.elements;return"string"==typeof a?a.split(" "):a}function e(a){var b=w[a[u]];return b||(b={},v++,a[u]=v,w[v]=b),b}function f(a,c,d){if(c||(c=b),p)return c.createElement(a);d||(d=e(c));var f;return f=d.cache[a]?d.cache[a].cloneNode():t.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!f.canHaveChildren||s.test(a)||f.tagUrn?f:d.frag.appendChild(f)}function g(a,c){if(a||(a=b),p)return a.createDocumentFragment();c=c||e(a);for(var f=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)f.createElement(h[g]);return f}function h(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return x.shivMethods?f(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(x,b.frag)}function i(a){a||(a=b);var d=e(a);return!x.shivCSS||o||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),p||h(a,d),a}function j(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(k(b)));return g}function k(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(z+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function l(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+z+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function m(a){for(var b=a.length;b--;)a[b].removeNode()}function n(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,f,g=e(a),h=a.namespaces,i=a.parentWindow;return!A||a.printShived?a:("undefined"==typeof h[z]&&h.add(z),i.attachEvent("onbeforeprint",function(){b();for(var e,g,h,i=a.styleSheets,k=[],m=i.length,n=Array(m);m--;)n[m]=i[m];for(;h=n.pop();)if(!h.disabled&&y.test(h.media)){try{e=h.imports,g=e.length}catch(o){g=0}for(m=0;g>m;m++)n.push(e[m]);try{k.push(h.cssText)}catch(o){}}k=l(k.reverse().join("")),f=j(a),d=c(a,k)}),i.attachEvent("onafterprint",function(){m(f),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var o,p,q="3.7.0",r=a.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,t=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,u="_html5shiv",v=0,w={};!function(){try{var a=b.createElement("a");a.innerHTML="
",o="hidden"in a,p=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){o=!0,p=!0}}();var x={elements:r.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:q,shivCSS:r.shivCSS!==!1,supportsUnknownElements:p,shivMethods:r.shivMethods!==!1,type:"default",shivDocument:i,createElement:f,createDocumentFragment:g};a.html5=x,i(b);var y=/^$|\b(?:all|print)\b/,z="html5shiv",A=!p&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();x.type+=" print",x.shivPrint=n,n(b)}(this,document);
\ No newline at end of file
diff --git a/docs/themes/learn2/js/jquery.scrollbar.min.js b/docs/themes/learn2/js/jquery.scrollbar.min.js
new file mode 100644
index 00000000..ed3455a7
--- /dev/null
+++ b/docs/themes/learn2/js/jquery.scrollbar.min.js
@@ -0,0 +1,16 @@
+/**
+ * jQuery CSS Customizable Scrollbar
+ *
+ * Copyright 2015, Yuriy Khabarov
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * If you found bug, please contact me via email <13real008@gmail.com>
+ *
+ * Compressed by http://jscompress.com/
+ *
+ * @author Yuriy Khabarov aka Gromo
+ * @version 0.2.9
+ * @url https://github.com/gromo/jquery.scrollbar/
+ *
+ */
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("
").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','
','
','
','"," "].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&r.css(s.is("textarea")||h>d?{height:h+t.scroll.height+"px","max-height":"none"}:{"max-height":h+t.scroll.height+"px"}),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
diff --git a/docs/themes/learn2/js/learn.js b/docs/themes/learn2/js/learn.js
new file mode 100644
index 00000000..73bd8606
--- /dev/null
+++ b/docs/themes/learn2/js/learn.js
@@ -0,0 +1,342 @@
+// Scrollbar Width function
+function getScrollBarWidth() {
+ var inner = document.createElement('p');
+ inner.style.width = "100%";
+ inner.style.height = "200px";
+
+ var outer = document.createElement('div');
+ outer.style.position = "absolute";
+ outer.style.top = "0px";
+ outer.style.left = "0px";
+ outer.style.visibility = "hidden";
+ outer.style.width = "200px";
+ outer.style.height = "150px";
+ outer.style.overflow = "hidden";
+ outer.appendChild(inner);
+
+ document.body.appendChild(outer);
+ var w1 = inner.offsetWidth;
+ outer.style.overflow = 'scroll';
+ var w2 = inner.offsetWidth;
+ if (w1 == w2) w2 = outer.clientWidth;
+
+ document.body.removeChild(outer);
+
+ return (w1 - w2);
+};
+
+function setMenuHeight() {
+ $('#sidebar .highlightable').height($('#sidebar').innerHeight() - $('#header-wrapper').height() - 40);
+}
+
+function fallbackMessage(action) {
+ var actionMsg = '';
+ var actionKey = (action === 'cut' ? 'X' : 'C');
+
+ if (/iPhone|iPad/i.test(navigator.userAgent)) {
+ actionMsg = 'No support :(';
+ }
+ else if (/Mac/i.test(navigator.userAgent)) {
+ actionMsg = 'Press ⌘-' + actionKey + ' to ' + action;
+ }
+ else {
+ actionMsg = 'Press Ctrl-' + actionKey + ' to ' + action;
+ }
+
+ return actionMsg;
+}
+
+// for the window resize
+$(window).resize(function() {
+ setMenuHeight();
+});
+
+// debouncing function from John Hann
+// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
+(function($, sr) {
+
+ var debounce = function(func, threshold, execAsap) {
+ var timeout;
+
+ return function debounced() {
+ var obj = this, args = arguments;
+
+ function delayed() {
+ if (!execAsap)
+ func.apply(obj, args);
+ timeout = null;
+ };
+
+ if (timeout)
+ clearTimeout(timeout);
+ else if (execAsap)
+ func.apply(obj, args);
+
+ timeout = setTimeout(delayed, threshold || 100);
+ };
+ }
+ // smartresize
+ jQuery.fn[sr] = function(fn) { return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
+
+})(jQuery, 'smartresize');
+
+
+jQuery(document).ready(function() {
+ var sidebarStatus = searchStatus = 'open';
+
+ // set the menu height
+ setMenuHeight();
+
+ jQuery('#overlay').on('click', function() {
+ jQuery(document.body).toggleClass('sidebar-hidden');
+ sidebarStatus = (jQuery(document.body).hasClass('sidebar-hidden') ? 'closed' : 'open');
+
+ return false;
+ });
+
+ jQuery('.scrollbar-inner').scrollbar();
+
+ jQuery('[data-sidebar-toggle]').on('click', function() {
+ jQuery(document.body).toggleClass('sidebar-hidden');
+ sidebarStatus = (jQuery(document.body).hasClass('sidebar-hidden') ? 'closed' : 'open');
+
+ return false;
+ });
+ jQuery('[data-clear-history-toggle]').on('click', function() {
+ sessionStorage.clear();
+ location.reload();
+ return false;
+ });
+ jQuery('[data-search-toggle]').on('click', function() {
+ if (sidebarStatus == 'closed') {
+ jQuery('[data-sidebar-toggle]').trigger('click');
+ jQuery(document.body).removeClass('searchbox-hidden');
+ searchStatus = 'open';
+
+ return false;
+ }
+
+ jQuery(document.body).toggleClass('searchbox-hidden');
+ searchStatus = (jQuery(document.body).hasClass('searchbox-hidden') ? 'closed' : 'open');
+
+ return false;
+ });
+
+ var ajax;
+ jQuery('[data-search-input]').on('input', function() {
+ var input = jQuery(this),
+ value = input.val(),
+ items = jQuery('[data-nav-id]');
+
+ items.removeClass('search-match');
+ if (!value.length) {
+ $('ul.topics').removeClass('searched');
+ items.css('display', 'block');
+ sessionStorage.removeItem('search-value');
+ $(".highlightable").unhighlight({ element: 'mark' })
+ return;
+ }
+
+ sessionStorage.setItem('search-value', value);
+ $(".highlightable").unhighlight({ element: 'mark' }).highlight(value, { element: 'mark' });
+
+ if (ajax && ajax.abort) ajax.abort();
+ ajax = jQuery.ajax({
+ url: input.data('search-input') + ':' + value
+ }).done(function(data) {
+ if (data && data.results && data.results.length) {
+ items.css('display', 'none');
+ $('ul.topics').addClass('searched');
+ data.results.forEach(function(navitem) {
+ jQuery('[data-nav-id="' + navitem + '"]').css('display', 'block').addClass('search-match');
+ jQuery('[data-nav-id="' + navitem + '"]').parents('li').css('display', 'block');
+ });
+ }
+ ;
+
+ });
+ jQuery('[data-search-clear]').on('click', function() {
+ jQuery('[data-search-input]').val('').trigger('input');
+ sessionStorage.removeItem('search-input');
+ $(".highlightable").unhighlight({ element: 'mark' })
+ });
+ });
+
+ if (sessionStorage.getItem('search-value')) {
+ jQuery(document.body).removeClass('searchbox-hidden');
+ jQuery('[data-search-input]').val(sessionStorage.getItem('search-value'));
+ jQuery('[data-search-input]').trigger('input');
+ }
+
+ // clipboard
+ var clipInit = false;
+ $('code').each(function() {
+ var code = $(this),
+ text = code.text();
+
+ if (text.length > 5) {
+ if (!clipInit) {
+ var text, clip = new Clipboard('.copy-to-clipboard', {
+ text: function(trigger) {
+ text = $(trigger).prev('code').text();
+ return text.replace(/^\$\s/gm, '');
+ }
+ });
+
+ var inPre;
+ clip.on('success', function(e) {
+ e.clearSelection();
+ inPre = $(e.trigger).parent().prop('tagName') == 'PRE';
+ $(e.trigger).attr('aria-label', 'Copied to clipboard!').addClass('tooltipped tooltipped-' + (inPre ? 'w' : 's'));
+ });
+
+ clip.on('error', function(e) {
+ inPre = $(e.trigger).parent().prop('tagName') == 'PRE';
+ $(e.trigger).attr('aria-label', fallbackMessage(e.action)).addClass('tooltipped tooltipped-' + (inPre ? 'w' : 's'));
+ $(document).one('copy', function(){
+ $(e.trigger).attr('aria-label', 'Copied to clipboard!').addClass('tooltipped tooltipped-' + (inPre ? 'w' : 's'));
+ });
+ });
+
+ clipInit = true;
+ }
+
+ code.after(' ');
+ code.next('.copy-to-clipboard').on('mouseleave', function() {
+ $(this).attr('aria-label', null).removeClass('tooltipped tooltipped-s tooltipped-w');
+ });
+ }
+ });
+
+ // allow keyboard control for prev/next links
+ jQuery(function() {
+ jQuery('.nav-prev').click(function(){
+ location.href = jQuery(this).attr('href');
+ });
+ jQuery('.nav-next').click(function() {
+ location.href = jQuery(this).attr('href');
+ });
+ });
+
+ jQuery(document).keydown(function(e) {
+ // prev links - left arrow key
+ if(e.which == '37') {
+ jQuery('.nav.nav-prev').click();
+ }
+
+ // next links - right arrow key
+ if(e.which == '39') {
+ jQuery('.nav.nav-next').click();
+ }
+ });
+
+});
+
+jQuery(window).on('load', function() {
+
+ function adjustForScrollbar() {
+ if ((parseInt(jQuery('#body-inner').height()) + 83) >= jQuery('#body').height()) {
+ jQuery('.nav.nav-next').css({ 'margin-right': getScrollBarWidth() });
+ } else {
+ jQuery('.nav.nav-next').css({ 'margin-right': 0 });
+ }
+ }
+
+ // adjust sidebar for scrollbar
+ adjustForScrollbar();
+
+ jQuery(window).smartresize(function() {
+ adjustForScrollbar();
+ });
+
+ // store this page in session
+ sessionStorage.setItem(jQuery('body').data('url'), 1);
+
+ // loop through the sessionStorage and see if something should be marked as visited
+ for (var url in sessionStorage) {
+ if (sessionStorage.getItem(url) == 1) jQuery('[data-nav-id="' + url + '"]').addClass('visited');
+ }
+
+
+ $(".highlightable").highlight(sessionStorage.getItem('search-value'), { element: 'mark' });
+});
+
+$(function() {
+ $('a[rel="lightbox"]').featherlight({
+ root: 'section#body'
+ });
+});
+
+jQuery.extend({
+ highlight: function(node, re, nodeName, className) {
+ if (node.nodeType === 3) {
+ var match = node.data.match(re);
+ if (match) {
+ var highlight = document.createElement(nodeName || 'span');
+ highlight.className = className || 'highlight';
+ var wordNode = node.splitText(match.index);
+ wordNode.splitText(match[0].length);
+ var wordClone = wordNode.cloneNode(true);
+ highlight.appendChild(wordClone);
+ wordNode.parentNode.replaceChild(highlight, wordNode);
+ return 1; //skip added node in parent
+ }
+ } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
+ !/(script|style)/i.test(node.tagName) && // ignore script and style nodes
+ !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
+ for (var i = 0; i < node.childNodes.length; i++) {
+ i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
+ }
+ }
+ return 0;
+ }
+});
+
+jQuery.fn.unhighlight = function(options) {
+ var settings = {
+ className: 'highlight',
+ element: 'span'
+ };
+ jQuery.extend(settings, options);
+
+ return this.find(settings.element + "." + settings.className).each(function() {
+ var parent = this.parentNode;
+ parent.replaceChild(this.firstChild, this);
+ parent.normalize();
+ }).end();
+};
+
+jQuery.fn.highlight = function(words, options) {
+ var settings = {
+ className: 'highlight',
+ element: 'span',
+ caseSensitive: false,
+ wordsOnly: false
+ };
+ jQuery.extend(settings, options);
+
+ if (!words) { return; }
+
+ if (words.constructor === String) {
+ words = [words];
+ }
+ words = jQuery.grep(words, function(word, i) {
+ return word != '';
+ });
+ words = jQuery.map(words, function(word, i) {
+ return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+ });
+ if (words.length == 0) { return this; }
+ ;
+
+ var flag = settings.caseSensitive ? "" : "i";
+ var pattern = "(" + words.join("|") + ")";
+ if (settings.wordsOnly) {
+ pattern = "\\b" + pattern + "\\b";
+ }
+ var re = new RegExp(pattern, flag);
+
+ return this.each(function() {
+ jQuery.highlight(this, re, settings.element, settings.className);
+ });
+};
diff --git a/docs/themes/learn2/js/modernizr.custom.71422.js b/docs/themes/learn2/js/modernizr.custom.71422.js
new file mode 100644
index 00000000..63cc6c20
--- /dev/null
+++ b/docs/themes/learn2/js/modernizr.custom.71422.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.7.1 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-csstransforms3d-shiv-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load
+ */
+;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.7.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;fGrav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Search Documentation
+cn:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: 编辑此页
+ THEME_LEARN2_GITHUB_NOTE: 发现错误?请帮忙改进,谢谢!
+ THEME_LEARN2_CLEAR_HISTORY: 清除历史
+ THEME_LEARN2_BUILT_WITH_GRAV: Built with Grav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: 搜索文档
+cs:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: Upravte tuto stránku
+ THEME_LEARN2_GITHUB_NOTE: Našli jste chybu? Myslíte, že můžete vylepšit tuto dokumentaci?
+ THEME_LEARN2_CLEAR_HISTORY: Smazat historii
+ THEME_LEARN2_BUILT_WITH_GRAV: Postaveno na Grav - Moderní správce obsahu pomocí souborů prostých textů
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Vyhledat v dokumentaci
+de:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: diese Seite bearbeiten
+ THEME_LEARN2_GITHUB_NOTE: Fehler gefunden? Möchten Sie diese Seite verbessern?
+ THEME_LEARN2_CLEAR_HISTORY: Verlauf löschen
+ THEME_LEARN2_BUILT_WITH_GRAV: Seite erstellt mit Grav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Dokumentation durchsuchen
+es:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: editar esta página
+ THEME_LEARN2_GITHUB_NOTE: ¿Encontraste errores? ¿Crees que puedes mejorar esta documentación?
+ THEME_LEARN2_CLEAR_HISTORY: Limpiar historial
+ THEME_LEARN2_BUILT_WITH_GRAV: Hecho con Grav - El CMS moderno de archivos planos
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Buscar en la documentación
+fr:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: modifier cette page
+ THEME_LEARN2_GITHUB_NOTE: Vous avez découvert des erreurs ? Vous pensez pouvoir améliorer cette documentation ?
+ THEME_LEARN2_CLEAR_HISTORY: Effacer l'historique
+ THEME_LEARN2_BUILT_WITH_GRAV: Créé avec Grav - Le CMS moderne sans base de données
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Rechercher dans la documentation
+it:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: modifica pagina
+ THEME_LEARN2_GITHUB_NOTE: Hai trovato degli errori? Pensi di poter migliorare questa documentazione?
+ THEME_LEARN2_CLEAR_HISTORY: Cancella Cronologia
+ THEME_LEARN2_BUILT_WITH_GRAV: Built with Grav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Cerca nella Documentatione
+ru:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: редактировать эту страницу
+ THEME_LEARN2_GITHUB_NOTE: Нашли ошибки? Думаете, что можете улучшить документацию?
+ THEME_LEARN2_CLEAR_HISTORY: Очистить историю
+ THEME_LEARN2_BUILT_WITH_GRAV: Сделано на Grav — современной файловой CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Поиск по документации
diff --git a/docs/themes/learn2/learn2.php b/docs/themes/learn2/learn2.php
new file mode 100644
index 00000000..ff3e3a03
--- /dev/null
+++ b/docs/themes/learn2/learn2.php
@@ -0,0 +1,9 @@
+ i {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+ }
+
+ @include breakpoint(desktop-only) {
+ display: table-cell;
+ position: static;
+ top: auto;
+ width: 50%;
+ text-align: center;
+ height: 100px;
+ line-height: 100px;
+ padding-top: 0;
+ > i {
+ display: inline-block;
+ }
+ }
+
+
+ &:hover {
+ background: $navbar-bg;
+ }
+
+ &.nav-pref {
+ left: 0;
+ }
+
+ &.nav-next {
+ right: 0;
+ }
+ }
+}
+
+#body-inner {
+ margin-bottom: 5rem;
+}
+
+// Chapter title
+#chapter {
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ padding: 2rem 0;
+
+ #body-inner {
+ padding-bottom: 3rem;
+ max-width: 80%;
+ }
+
+ h3 {
+ font-family: $font-family-default;
+ font-weight: $font-weight-regular;
+ text-align: center;
+ }
+
+ h1 {
+ font-size: 5rem;
+ border-bottom: 4px solid $rule-color;
+ }
+
+ p {
+ text-align: center;
+ font-size: 1.2rem;
+ }
+}
+
+#footer {
+ padding: 3rem 1rem;
+ color: darken($sidebar-link, 10%);
+ font-size: 13px;
+
+ p {
+ margin: 0;
+ }
+}
diff --git a/docs/themes/learn2/scss/theme/_nav.scss b/docs/themes/learn2/scss/theme/_nav.scss
new file mode 100644
index 00000000..e83ce6c1
--- /dev/null
+++ b/docs/themes/learn2/scss/theme/_nav.scss
@@ -0,0 +1,212 @@
+#sidebar-toggle {
+ display: none;
+
+ @include breakpoint(mobile-only) {
+ display: inline-block;
+ }
+
+}
+
+#sidebar {
+ @extend .default-animation;
+ background-color: $sidebar-bg;
+ position: fixed;
+ top: 0;
+ width: $sidebar-width;
+ bottom: 0;
+ left: 0;
+ font-weight: $font-weight-medium;
+ font-size: 15px;
+
+ a {
+ color: $sidebar-link;
+ &:hover {
+ color: lighten($sidebar-link, 10%);
+ }
+ &.subtitle {
+ color: rgba($sidebar-link, 0.6);
+ }
+ }
+
+ hr {
+ border-bottom: 1px solid darken($sidebar-bg, 3%);
+ }
+
+ a.padding {
+ padding: 0 1rem;
+ }
+
+ h5 {
+ margin: 2rem 0 0;
+ position: relative;
+ line-height: 2;
+
+ a {
+ display: block;
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+
+ i {
+ color: rgba($sidebar-link, 0.6);
+ position: absolute;
+ right: 0.6rem;
+ top: 0.7rem;
+ font-size: 80%;
+ }
+
+ &.parent {
+ a {
+ background: darken($sidebar-bg, 7%);
+ color: lighten($sidebar-link, 5%) !important;
+ }
+ }
+
+ &.active {
+ a {
+ background: $white;
+ color: $core-text !important;
+ }
+
+ i {
+ color: $core-text !important;
+ }
+ }
+
+
+ }
+
+ h5 + ul.topics {
+ display: none;
+ margin-top: 0;
+ }
+
+ h5.parent, h5.active {
+ + ul.topics {
+ display: block;
+ }
+ }
+
+
+ ul {
+ @extend .default-animation;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+
+ &.searched {
+ a {
+ color: darken($sidebar-link, 20%);
+ }
+
+ .search-match {
+ a {
+ color: lighten($sidebar-link, 10%);
+ &:hover {
+ color: lighten($sidebar-link, 20%);
+ }
+ }
+ }
+ }
+
+ &.topics {
+ margin: 0 1rem;
+
+ &.searched {
+ ul {
+ display: block;
+ }
+ }
+
+ ul {
+ display: none;
+ padding-bottom: 1rem;
+
+ ul {
+ padding-bottom: 0;
+ }
+ }
+
+ li.parent ul, > li.active ul {
+ display: block;
+ }
+
+ > li {
+ > a {
+ line-height: 2rem;
+ font-size: 1.1rem;
+
+ b {
+ opacity: 0.5;
+ font-weight: normal;
+ }
+
+ .fa {
+ margin-top: 9px;
+ }
+ }
+
+ &.parent, &.active {
+ background: darken($sidebar-bg, 5%);
+ margin-left: -1rem;
+ margin-right: -1rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+ }
+ }
+
+ li.active > a {
+ background: $white;
+ color: $core-text !important;
+ margin-left: -1rem;
+ margin-right: -1rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+
+ li {
+ padding: 0;
+ &.visited + span {
+ margin-right: 16px;
+ }
+ a {
+ display: block;
+ padding: 2px 0;
+ span {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ display: block;
+ }
+ }
+ > a {
+ padding: 4px 0;
+ }
+
+ .fa {
+ display: none;
+ float: right;
+ font-size: 13px;
+ min-width: 16px;
+ margin: 4px 0 0 0;
+ text-align: right;
+ }
+
+ &.visited {
+ > a .read-icon {
+ color: $core-accent;
+ display: inline;
+ }
+ }
+
+ li {
+ padding-left: 1rem;
+ text-indent: 0.2rem;
+ }
+ }
+
+ }
+}
diff --git a/docs/themes/learn2/scss/theme/_scrollbar.scss b/docs/themes/learn2/scss/theme/_scrollbar.scss
new file mode 100644
index 00000000..00c9cfc9
--- /dev/null
+++ b/docs/themes/learn2/scss/theme/_scrollbar.scss
@@ -0,0 +1,139 @@
+/*************** SCROLLBAR BASE CSS ***************/
+
+.highlightable {
+ padding: 25px 0 15px;
+}
+
+.scroll-wrapper {
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: relative;
+}
+
+.scroll-wrapper > .scroll-content {
+ border: none !important;
+ box-sizing: content-box !important;
+ height: auto;
+ left: 0;
+ margin: 0;
+ max-height: none;
+ max-width: none !important;
+ overflow: scroll !important;
+ padding: 0;
+ position: relative !important;
+ top: 0;
+ width: auto !important;
+}
+
+.scroll-wrapper > .scroll-content::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+}
+
+.scroll-element {
+ display: none;
+}
+.scroll-element, .scroll-element div {
+ box-sizing: content-box;
+}
+
+.scroll-element.scroll-x.scroll-scrollx_visible,
+.scroll-element.scroll-y.scroll-scrolly_visible {
+ display: block;
+}
+
+.scroll-element .scroll-bar,
+.scroll-element .scroll-arrow {
+ cursor: default;
+}
+
+.scroll-textarea {
+
+}
+.scroll-textarea > .scroll-content {
+ overflow: hidden !important;
+}
+.scroll-textarea > .scroll-content > textarea {
+ border: none !important;
+ box-sizing: border-box;
+ height: 100% !important;
+ margin: 0;
+ max-height: none !important;
+ max-width: none !important;
+ overflow: scroll !important;
+ outline: none;
+ padding: 2px;
+ position: relative !important;
+ top: 0;
+ width: 100% !important;
+}
+.scroll-textarea > .scroll-content > textarea::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+}
+
+
+
+
+/*************** SIMPLE INNER SCROLLBAR ***************/
+
+.scrollbar-inner > .scroll-element,
+.scrollbar-inner > .scroll-element div
+{
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-inner > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-inner > .scroll-element.scroll-x {
+ bottom: 2px;
+ height: 8px;
+ left: 0;
+ width: 100%;
+}
+
+.scrollbar-inner > .scroll-element.scroll-y {
+ height: 100%;
+ right: 2px;
+ top: 0;
+ width: 8px;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_outer {
+ overflow: hidden;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_outer,
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+ filter: alpha(opacity=30);
+ opacity: 0.3;
+}
+
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -12px; }
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -12px; }
+
+
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -12px; }
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -12px; }
diff --git a/docs/themes/learn2/scss/theme/_tables.scss b/docs/themes/learn2/scss/theme/_tables.scss
new file mode 100644
index 00000000..923eb7f4
--- /dev/null
+++ b/docs/themes/learn2/scss/theme/_tables.scss
@@ -0,0 +1,15 @@
+table {
+ border: 1px solid lighten($core-border-color,5%);
+ table-layout: auto;
+}
+
+th {
+ @extend strong;
+ background: lighten($core-border-color,10%);
+ padding: 0.5rem;
+}
+
+td {
+ padding: 0.5rem;
+ border: 1px solid lighten($core-border-color,5%);
+}
diff --git a/docs/themes/learn2/scss/theme/_tooltips.scss b/docs/themes/learn2/scss/theme/_tooltips.scss
new file mode 100644
index 00000000..9ec8ef8f
--- /dev/null
+++ b/docs/themes/learn2/scss/theme/_tooltips.scss
@@ -0,0 +1,157 @@
+$multiline-max-width: 250px;
+$tooltip-background-color: rgba(0, 0, 0, 0.8);
+$tooltip-text-color: #fff;
+
+.tooltipped {
+ position: relative;
+}
+
+// This is the tooltip bubble
+.tooltipped:after {
+ position: absolute;
+ z-index: 1000000;
+ display: none;
+ padding: 5px 8px;
+ font: normal normal 11px/1.5 $font-family-default;
+ color: $tooltip-text-color;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-wrap: break-word;
+ white-space: pre;
+ pointer-events: none;
+ content: attr(aria-label);
+ background: $tooltip-background-color;
+ border-radius: 3px;
+ -webkit-font-smoothing: subpixel-antialiased;
+}
+
+// This is the tooltip arrow
+.tooltipped:before {
+ position: absolute;
+ z-index: 1000001;
+ display: none;
+ width: 0;
+ height: 0;
+ color: $tooltip-background-color;
+ pointer-events: none;
+ content: "";
+ border: 5px solid transparent;
+}
+
+// This will indicate when we'll activate the tooltip
+.tooltipped:hover,
+.tooltipped:active,
+.tooltipped:focus {
+ &:before,
+ &:after {
+ display: inline-block;
+ text-decoration: none;
+ }
+}
+
+// Tooltipped south
+.tooltipped-s,
+.tooltipped-se,
+.tooltipped-sw {
+ &:after {
+ top: 100%;
+ right: 50%;
+ margin-top: 5px;
+ }
+
+ &:before {
+ top: auto;
+ right: 50%;
+ bottom: -5px;
+ margin-right: -5px;
+ border-bottom-color: $tooltip-background-color;
+ }
+}
+
+.tooltipped-se {
+ &:after {
+ right: auto;
+ left: 50%;
+ margin-left: -15px;
+ }
+}
+
+.tooltipped-sw:after {
+ margin-right: -15px;
+}
+
+// Tooltips above the object
+.tooltipped-n,
+.tooltipped-ne,
+.tooltipped-nw {
+ &:after {
+ right: 50%;
+ bottom: 100%;
+ margin-bottom: 5px;
+ }
+
+ &:before {
+ top: -5px;
+ right: 50%;
+ bottom: auto;
+ margin-right: -5px;
+ border-top-color: $tooltip-background-color;
+ }
+}
+
+.tooltipped-ne {
+ &:after {
+ right: auto;
+ left: 50%;
+ margin-left: -15px;
+ }
+}
+
+.tooltipped-nw:after {
+ margin-right: -15px;
+}
+
+// Move the tooltip body to the center of the object.
+.tooltipped-s:after,
+.tooltipped-n:after {
+ transform: translateX(50%);
+}
+
+// Tooltipped to the left
+.tooltipped-w {
+ &:after {
+ right: 100%;
+ bottom: 50%;
+ margin-right: 5px;
+ transform: translateY(50%);
+ }
+
+ &:before {
+ top: 50%;
+ bottom: 50%;
+ left: -5px;
+ margin-top: -5px;
+ border-left-color: $tooltip-background-color;
+ }
+}
+
+// tooltipped to the right
+.tooltipped-e {
+ &:after {
+ bottom: 50%;
+ left: 100%;
+ margin-left: 5px;
+ transform: translateY(50%);
+ }
+
+ &:before {
+ top: 50%;
+ right: -5px;
+ bottom: 50%;
+ margin-top: -5px;
+ border-right-color: $tooltip-background-color;
+ }
+}
diff --git a/docs/themes/learn2/scss/theme/_typography.scss b/docs/themes/learn2/scss/theme/_typography.scss
new file mode 100644
index 00000000..631a8c3a
--- /dev/null
+++ b/docs/themes/learn2/scss/theme/_typography.scss
@@ -0,0 +1,181 @@
+// Body Base
+body {
+ font-family: $font-family-default;
+ letter-spacing: -0.03rem;
+ font-weight: 400;
+}
+
+// Headings
+h1, h2, h3, h4, h5, h6 {
+ font-family: $font-family-header;
+ font-weight: 400;
+ text-rendering: optimizeLegibility;
+ line-height: 150%;
+ letter-spacing: -0px;
+}
+
+h1 {
+ text-align: center;
+ letter-spacing: -3px;
+}
+
+h2 {
+ letter-spacing: -2px;
+}
+
+h3 {
+ letter-spacing: -1px;
+}
+
+// Blockquote
+blockquote {
+ border-left: 10px solid $rule-color;
+ p {
+ font-size: 1.1rem;
+ color: #999;
+ }
+ cite {
+ display: block;
+ text-align: right;
+ color: #666;
+ font-size: 1.2rem;
+ }
+}
+
+// NOTES!!!!
+blockquote {
+ position: relative;
+}
+
+blockquote blockquote {
+ position: static;
+}
+
+blockquote > blockquote > blockquote {
+
+ margin: 0;
+
+ p {
+ padding: 15px;
+ display: block;
+ font-size: 1rem;
+ margin-top: 0rem;
+ margin-bottom: 0rem;
+ color: #666;
+
+ &:first-child {
+ &:before {
+ position: absolute;
+ top: 2px;
+ color: $white;
+ font-family: FontAwesome;
+ content: '';
+ left: 10px;
+ }
+ &:after {
+ position: absolute;
+ top: 2px;
+ color: $white;
+ left: 2rem;
+ font-weight: bold;
+ content: 'Info';
+ }
+ }
+ }
+
+ > p {
+ // Yellow
+ margin-left: -71px;
+ border-top: 30px solid #F0B37E;
+ background: #FFF2DB;
+ }
+
+ > blockquote > p {
+ // Red
+ margin-left: -94px;
+ border-top: 30px solid rgba(#D9534F, 0.8);
+ background: #FAE2E2;
+ &:first-child:after {
+ content: 'Warning';
+ }
+ }
+
+ > blockquote > blockquote > p {
+ // Blue
+ margin-left: -118px;
+ border-top: 30px solid #6AB0DE;
+ background: #E7F2FA;
+ &:first-child:after {
+ content: 'Note';
+ }
+ }
+
+ > blockquote > blockquote > blockquote > p {
+ // Green
+ margin-left: -142px;
+ border-top: 30px solid rgba(#5CB85C, 0.8);
+ background: #E6F9E6;
+ &:first-child:after {
+ content: 'Tip';
+ }
+ }
+
+}
+
+// Inline and Code
+code,
+kbd,
+pre,
+samp {
+ font-family: $font-family-mono;
+}
+
+code {
+ background: $code-bg;
+ color: darken($code-text,10%);
+ padding: .2rem .4rem;
+ border-radius: 3px;
+}
+
+pre {
+ padding: 1rem;
+ margin: 2rem 0;
+ background: $pre-bg;
+ border: 1px solid $core-border-color;
+ border-radius: 2px;
+ line-height: 1.15;
+ font-size: 1rem;
+
+ code {
+ color: $pre-text;
+ background: inherit;
+ font-size: 1rem;
+ }
+}
+
+// Extras
+hr {
+ border-bottom: 4px solid $rule-color;
+}
+
+// Page Title
+.page-title {
+ margin-top: -25px;
+ padding: 25px;
+ float: left;
+ clear: both;
+ background: $core-accent;
+ color: $white;
+}
+
+// Anchor links
+#body {
+ a.anchor-link { color: #ccc; }
+ a.anchor-link:hover { color: $core-accent; }
+}
+
+// Scrollbar
+.scrollbar-inner > .scroll-element .scroll-element_track { background-color: rgba($white, 0.3); }
+.scrollbar-inner > .scroll-element .scroll-bar { background-color: lighten(#A1C4E5, 5%); }
+.scrollbar-inner > .scroll-element:hover .scroll-bar { background-color: #ccc; }
+.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar { background-color: #ccc; }
diff --git a/docs/themes/learn2/scss/theme/modules/_base.scss b/docs/themes/learn2/scss/theme/modules/_base.scss
new file mode 100644
index 00000000..1de274b4
--- /dev/null
+++ b/docs/themes/learn2/scss/theme/modules/_base.scss
@@ -0,0 +1,2 @@
+// Buttons
+@import "buttons";
diff --git a/docs/themes/learn2/scss/theme/modules/_buttons.scss b/docs/themes/learn2/scss/theme/modules/_buttons.scss
new file mode 100644
index 00000000..88d03409
--- /dev/null
+++ b/docs/themes/learn2/scss/theme/modules/_buttons.scss
@@ -0,0 +1,21 @@
+%button {
+ display: inline-block;
+ padding: 7px 12px;
+ &:active {
+ margin: 2px 0 -2px 0;
+ }
+}
+
+@mixin button-color($color) {
+ background: $color;
+ color: $white;
+ box-shadow: 0 3px 0 darken($color, 6%);
+ &:hover {
+ background: darken($color, 6%);
+ box-shadow: 0 3px 0 darken($color, 12%);
+ color: $white;
+ }
+ &:active {
+ box-shadow: 0 1px 0 darken($color, 12%);
+ }
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss b/docs/themes/learn2/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss
new file mode 100644
index 00000000..f946b3b4
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss
@@ -0,0 +1,8 @@
+//************************************************************************//
+// These mixins/functions are deprecated
+// They will be removed in the next MAJOR version release
+//************************************************************************//
+@mixin inline-block {
+ display: inline-block;
+ @warn "inline-block mixin is deprecated and will be removed in the next major version release";
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/_bourbon.scss b/docs/themes/learn2/scss/vendor/bourbon/_bourbon.scss
new file mode 100644
index 00000000..64cb6ea8
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/_bourbon.scss
@@ -0,0 +1,77 @@
+// Settings
+@import "settings/prefixer";
+@import "settings/px-to-em";
+
+// Custom Helpers
+@import "helpers/convert-units";
+@import "helpers/gradient-positions-parser";
+@import "helpers/is-num";
+@import "helpers/linear-angle-parser";
+@import "helpers/linear-gradient-parser";
+@import "helpers/linear-positions-parser";
+@import "helpers/linear-side-corner-parser";
+@import "helpers/radial-arg-parser";
+@import "helpers/radial-positions-parser";
+@import "helpers/radial-gradient-parser";
+@import "helpers/render-gradients";
+@import "helpers/shape-size-stripper";
+@import "helpers/str-to-num";
+
+// Custom Functions
+@import "functions/assign";
+@import "functions/color-lightness";
+@import "functions/flex-grid";
+@import "functions/golden-ratio";
+@import "functions/grid-width";
+@import "functions/modular-scale";
+@import "functions/px-to-em";
+@import "functions/px-to-rem";
+@import "functions/strip-units";
+@import "functions/tint-shade";
+@import "functions/transition-property-name";
+@import "functions/unpack";
+
+// CSS3 Mixins
+@import "css3/animation";
+@import "css3/appearance";
+@import "css3/backface-visibility";
+@import "css3/background";
+@import "css3/background-image";
+@import "css3/border-image";
+@import "css3/border-radius";
+@import "css3/box-sizing";
+@import "css3/calc";
+@import "css3/columns";
+@import "css3/filter";
+@import "css3/flex-box";
+@import "css3/font-face";
+@import "css3/hyphens";
+@import "css3/hidpi-media-query";
+@import "css3/image-rendering";
+@import "css3/keyframes";
+@import "css3/linear-gradient";
+@import "css3/perspective";
+@import "css3/radial-gradient";
+@import "css3/transform";
+@import "css3/transition";
+@import "css3/user-select";
+@import "css3/placeholder";
+
+// Addons & other mixins
+@import "addons/button";
+@import "addons/clearfix";
+@import "addons/directional-values";
+@import "addons/ellipsis";
+@import "addons/font-family";
+@import "addons/hide-text";
+@import "addons/html5-input-types";
+@import "addons/position";
+@import "addons/prefixer";
+@import "addons/retina-image";
+@import "addons/size";
+@import "addons/timing-functions";
+@import "addons/triangle";
+@import "addons/word-wrap";
+
+// Soon to be deprecated Mixins
+@import "bourbon-deprecated-upcoming";
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_button.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_button.scss
new file mode 100644
index 00000000..14a89e48
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_button.scss
@@ -0,0 +1,374 @@
+@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) {
+
+ @if type-of($style) == string and type-of($base-color) == color {
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == string and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: #4294f0;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == color {
+ $base-color: $style;
+ $style: simple;
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: $style;
+ $style: simple;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == number {
+ $padding: $base-color;
+ $text-size: $style;
+ $base-color: #4294f0;
+ $style: simple;
+
+ @if $padding == #4294f0 {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+}
+
+
+// Selector Style Button
+//************************************************************************//
+@mixin buttonstyle($type, $b-color, $t-size, $pad) {
+ // Grayscale button
+ @if $type == simple and $b-color == grayscale($b-color) {
+ @include simple($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == shiny and $b-color == grayscale($b-color) {
+ @include shiny($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == pill and $b-color == grayscale($b-color) {
+ @include pill($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == flat and $b-color == grayscale($b-color) {
+ @include flat($b-color, true, $t-size, $pad);
+ }
+
+ // Colored button
+ @if $type == simple {
+ @include simple($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == shiny {
+ @include shiny($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == pill {
+ @include pill($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == flat {
+ @include flat($b-color, false, $t-size, $pad);
+ }
+}
+
+
+// Simple Button
+//************************************************************************//
+@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%);
+ $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%);
+ $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border;
+ border-radius: 3px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-decoration: none;
+ text-shadow: 0 1px 0 $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%);
+ $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ }
+
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);
+
+ @if $grayscale == true {
+ $border-active: grayscale($border-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ border: 1px solid $border-active;
+ box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active;
+ }
+}
+
+
+// Shiny Button
+//************************************************************************//
+@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81);
+ $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);
+ $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46);
+ $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12);
+ $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33);
+ $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114);
+ $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $border-bottom: grayscale($border-bottom);
+ $fourth-stop: grayscale($fourth-stop);
+ $inset-shadow: grayscale($inset-shadow);
+ $second-stop: grayscale($second-stop);
+ $text-shadow: grayscale($text-shadow);
+ $third-stop: grayscale($third-stop);
+ }
+
+ border: 1px solid $border;
+ border-bottom: 1px solid $border-bottom;
+ border-radius: 5px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+
+ &:hover:not(:disabled) {
+ $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18);
+ $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);
+ $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66);
+ $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);
+
+ @if $grayscale == true {
+ $first-stop-hover: grayscale($first-stop-hover);
+ $second-stop-hover: grayscale($second-stop-hover);
+ $third-stop-hover: grayscale($third-stop-hover);
+ $fourth-stop-hover: grayscale($fourth-stop-hover);
+ }
+
+ cursor: pointer;
+ @include linear-gradient(top, $first-stop-hover 0%,
+ $second-stop-hover 50%,
+ $third-stop-hover 50%,
+ $fourth-stop-hover 100%);
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);
+
+ @if $grayscale == true {
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ box-shadow: inset 0 0 20px 0 $inset-shadow-active;
+ }
+}
+
+
+// Pill Button
+//************************************************************************//
+@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);
+ $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%);
+ $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%);
+ $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ border-radius: 16px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: normal;
+ line-height: 1;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $lightness: -4.5%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%);
+ $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%);
+ $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ $text-shadow-hover: grayscale($text-shadow-hover);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ text-shadow: 0 -1px 1px $text-shadow-hover;
+ background-clip: padding-box;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%);
+ $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%);
+ $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%);
+ $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%);
+ $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%);
+
+ @if $grayscale == true {
+ $active-color: grayscale($active-color);
+ $border-active: grayscale($border-active);
+ $border-bottom-active: grayscale($border-bottom-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ $text-shadow-active: grayscale($text-shadow-active);
+ }
+
+ background: $active-color;
+ border: 1px solid $border-active;
+ border-bottom: 1px solid $border-bottom-active;
+ box-shadow: inset 0 0 6px 3px $inset-shadow-active;
+ text-shadow: 0 -1px 1px $text-shadow-active;
+ }
+}
+
+
+
+// Flat Button
+//************************************************************************//
+@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ }
+
+ background-color: $base-color;
+ border-radius: 3px;
+ border: none;
+ color: $color;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: bold;
+ padding: 7px 18px;
+ text-decoration: none;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled){
+ $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ }
+
+ background-color: $base-color-hover;
+ cursor: pointer;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+
+ @if $grayscale == true {
+ $base-color-active: grayscale($base-color-active);
+ }
+
+ background-color: $base-color-active;
+ cursor: pointer;
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_clearfix.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_clearfix.scss
new file mode 100644
index 00000000..783cfbc7
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_clearfix.scss
@@ -0,0 +1,23 @@
+// Modern micro clearfix provides an easy way to contain floats without adding additional markup.
+//
+// Example usage:
+//
+// // Contain all floats within .wrapper
+// .wrapper {
+// @include clearfix;
+// .content,
+// .sidebar {
+// float : left;
+// }
+// }
+
+@mixin clearfix {
+ &:after {
+ content:"";
+ display:table;
+ clear:both;
+ }
+}
+
+// Acknowledgements
+// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_directional-values.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_directional-values.scss
new file mode 100644
index 00000000..742f1031
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_directional-values.scss
@@ -0,0 +1,111 @@
+// directional-property mixins are shorthands
+// for writing properties like the following
+//
+// @include margin(null 0 10px);
+// ------
+// margin-right: 0;
+// margin-bottom: 10px;
+// margin-left: 0;
+//
+// - or -
+//
+// @include border-style(dotted null);
+// ------
+// border-top-style: dotted;
+// border-bottom-style: dotted;
+//
+// ------
+//
+// Note: You can also use false instead of null
+
+@function collapse-directionals($vals) {
+ $output: null;
+
+ $A: nth( $vals, 1 );
+ $B: if( length($vals) < 2, $A, nth($vals, 2));
+ $C: if( length($vals) < 3, $A, nth($vals, 3));
+ $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) ));
+
+ @if $A == 0 { $A: 0 }
+ @if $B == 0 { $B: 0 }
+ @if $C == 0 { $C: 0 }
+ @if $D == 0 { $D: 0 }
+
+ @if $A == $B and $A == $C and $A == $D { $output: $A }
+ @else if $A == $C and $B == $D { $output: $A $B }
+ @else if $B == $D { $output: $A $B $C }
+ @else { $output: $A $B $C $D }
+
+ @return $output;
+}
+
+@function contains-falsy($list) {
+ @each $item in $list {
+ @if not $item {
+ @return true;
+ }
+ }
+
+ @return false;
+}
+
+@mixin directional-property($pre, $suf, $vals) {
+ // Property Names
+ $top: $pre + "-top" + if($suf, "-#{$suf}", "");
+ $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", "");
+ $left: $pre + "-left" + if($suf, "-#{$suf}", "");
+ $right: $pre + "-right" + if($suf, "-#{$suf}", "");
+ $all: $pre + if($suf, "-#{$suf}", "");
+
+ $vals: collapse-directionals($vals);
+
+ @if contains-falsy($vals) {
+ @if nth($vals, 1) { #{$top}: nth($vals, 1); }
+
+ @if length($vals) == 1 {
+ @if nth($vals, 1) { #{$right}: nth($vals, 1); }
+ } @else {
+ @if nth($vals, 2) { #{$right}: nth($vals, 2); }
+ }
+
+ // prop: top/bottom right/left
+ @if length($vals) == 2 {
+ @if nth($vals, 1) { #{$bottom}: nth($vals, 1); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right/left bottom
+ } @else if length($vals) == 3 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right bottom left
+ } @else if length($vals) == 4 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 4) { #{$left}: nth($vals, 4); }
+ }
+
+ // prop: top/right/bottom/left
+ } @else {
+ #{$all}: $vals;
+ }
+}
+
+@mixin margin($vals...) {
+ @include directional-property(margin, false, $vals...);
+}
+
+@mixin padding($vals...) {
+ @include directional-property(padding, false, $vals...);
+}
+
+@mixin border-style($vals...) {
+ @include directional-property(border, style, $vals...);
+}
+
+@mixin border-color($vals...) {
+ @include directional-property(border, color, $vals...);
+}
+
+@mixin border-width($vals...) {
+ @include directional-property(border, width, $vals...);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_ellipsis.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_ellipsis.scss
new file mode 100644
index 00000000..a8ea2a4a
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_ellipsis.scss
@@ -0,0 +1,7 @@
+@mixin ellipsis($width: 100%) {
+ display: inline-block;
+ max-width: $width;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_font-family.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_font-family.scss
new file mode 100644
index 00000000..31f5d9ca
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_font-family.scss
@@ -0,0 +1,5 @@
+$georgia: Georgia, Cambria, "Times New Roman", Times, serif;
+$helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;
+$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif;
+$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace;
+$verdana: Verdana, Geneva, sans-serif;
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_hide-text.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_hide-text.scss
new file mode 100644
index 00000000..fc794381
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_hide-text.scss
@@ -0,0 +1,10 @@
+@mixin hide-text {
+ overflow: hidden;
+
+ &:before {
+ content: "";
+ display: block;
+ width: 0;
+ height: 100%;
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_html5-input-types.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_html5-input-types.scss
new file mode 100644
index 00000000..9e9324ae
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_html5-input-types.scss
@@ -0,0 +1,86 @@
+//************************************************************************//
+// Generate a variable ($all-text-inputs) with a list of all html5
+// input types that have a text-based input, excluding textarea.
+// http://diveintohtml5.org/forms.html
+//************************************************************************//
+$inputs-list: 'input[type="email"]',
+ 'input[type="number"]',
+ 'input[type="password"]',
+ 'input[type="search"]',
+ 'input[type="tel"]',
+ 'input[type="text"]',
+ 'input[type="url"]',
+
+ // Webkit & Gecko may change the display of these in the future
+ 'input[type="color"]',
+ 'input[type="date"]',
+ 'input[type="datetime"]',
+ 'input[type="datetime-local"]',
+ 'input[type="month"]',
+ 'input[type="time"]',
+ 'input[type="week"]';
+
+// Bare inputs
+//************************************************************************//
+$all-text-inputs: assign-inputs($inputs-list);
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-text-inputs-hover: assign-inputs($inputs-list, hover);
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-text-inputs-focus: assign-inputs($inputs-list, focus);
+
+
+
+// You must use interpolation on the variable:
+// #{$all-text-inputs}
+// #{$all-text-inputs-hover}
+// #{$all-text-inputs-focus}
+
+// Example
+//************************************************************************//
+// #{$all-text-inputs}, textarea {
+// border: 1px solid red;
+// }
+
+
+
+//************************************************************************//
+// Generate a variable ($all-button-inputs) with a list of all html5
+// input types that have a button-based input, excluding button.
+//************************************************************************//
+$inputs-button-list: 'input[type="button"]',
+ 'input[type="reset"]',
+ 'input[type="submit"]';
+
+// Bare inputs
+//************************************************************************//
+$all-button-inputs: assign-inputs($inputs-button-list);
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-button-inputs-hover: assign-inputs($inputs-button-list, hover);
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-button-inputs-focus: assign-inputs($inputs-button-list, focus);
+
+// Active Pseudo-class
+//************************************************************************//
+$all-button-inputs-active: assign-inputs($inputs-button-list, active);
+
+
+
+// You must use interpolation on the variable:
+// #{$all-button-inputs}
+// #{$all-button-inputs-hover}
+// #{$all-button-inputs-focus}
+// #{$all-button-inputs-active}
+
+// Example
+//************************************************************************//
+// #{$all-button-inputs}, button {
+// border: 1px solid red;
+// }
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_position.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_position.scss
new file mode 100644
index 00000000..7de75182
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_position.scss
@@ -0,0 +1,32 @@
+@mixin position ($position: relative, $coordinates: null null null null) {
+
+ @if type-of($position) == list {
+ $coordinates: $position;
+ $position: relative;
+ }
+
+ $coordinates: unpack($coordinates);
+
+ $top: nth($coordinates, 1);
+ $right: nth($coordinates, 2);
+ $bottom: nth($coordinates, 3);
+ $left: nth($coordinates, 4);
+
+ position: $position;
+
+ @if ($top and $top == auto) or (type-of($top) == number) {
+ top: $top;
+ }
+
+ @if ($right and $right == auto) or (type-of($right) == number) {
+ right: $right;
+ }
+
+ @if ($bottom and $bottom == auto) or (type-of($bottom) == number) {
+ bottom: $bottom;
+ }
+
+ @if ($left and $left == auto) or (type-of($left) == number) {
+ left: $left;
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_prefixer.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_prefixer.scss
new file mode 100644
index 00000000..c32f5027
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_prefixer.scss
@@ -0,0 +1,45 @@
+//************************************************************************//
+// Example: @include prefixer(border-radius, $radii, webkit ms spec);
+//************************************************************************//
+// Variables located in /settings/_prefixer.scss
+
+@mixin prefixer ($property, $value, $prefixes) {
+ @each $prefix in $prefixes {
+ @if $prefix == webkit {
+ @if $prefix-for-webkit {
+ -webkit-#{$property}: $value;
+ }
+ }
+ @else if $prefix == moz {
+ @if $prefix-for-mozilla {
+ -moz-#{$property}: $value;
+ }
+ }
+ @else if $prefix == ms {
+ @if $prefix-for-microsoft {
+ -ms-#{$property}: $value;
+ }
+ }
+ @else if $prefix == o {
+ @if $prefix-for-opera {
+ -o-#{$property}: $value;
+ }
+ }
+ @else if $prefix == spec {
+ @if $prefix-for-spec {
+ #{$property}: $value;
+ }
+ }
+ @else {
+ @warn "Unrecognized prefix: #{$prefix}";
+ }
+ }
+}
+
+@mixin disable-prefix-for-all() {
+ $prefix-for-webkit: false !global;
+ $prefix-for-mozilla: false !global;
+ $prefix-for-microsoft: false !global;
+ $prefix-for-opera: false !global;
+ $prefix-for-spec: false !global;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_rem.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_rem.scss
new file mode 100644
index 00000000..ddd7022b
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_rem.scss
@@ -0,0 +1,33 @@
+@mixin rem($property, $size, $base: $em-base) {
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+
+ $unitless_values: ();
+ @each $num in $size {
+ @if not unitless($num) {
+ @if unit($num) == "em" {
+ $num: $num * $base;
+ }
+
+ $num: strip-units($num);
+ }
+
+ $unitless_values: append($unitless_values, $num);
+ }
+ $size: $unitless_values;
+
+ $pixel_values: ();
+ $rem_values: ();
+ @each $value in $pxval {
+ $pixel_value: $value * 1px;
+ $pixel_values: append($pixel_values, $pixel_value);
+
+ $rem_value: ($value / $base) * 1rem;
+ $rem_values: append($rem_values, $rem_value);
+ }
+
+ #{$property}: $pixel_values;
+ #{$property}: $rem_values;
+}
+
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_retina-image.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_retina-image.scss
new file mode 100644
index 00000000..7931bd13
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_retina-image.scss
@@ -0,0 +1,31 @@
+@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: false) {
+ @if $asset-pipeline {
+ background-image: image-url("#{$filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}.#{$extension}");
+ }
+
+ @include hidpi {
+ @if $asset-pipeline {
+ @if $retina-filename {
+ background-image: image-url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ @else {
+ @if $retina-filename {
+ background-image: url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ background-size: $background-size;
+
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_size.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_size.scss
new file mode 100644
index 00000000..ac705e26
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_size.scss
@@ -0,0 +1,16 @@
+@mixin size($size) {
+ $height: nth($size, 1);
+ $width: $height;
+
+ @if length($size) > 1 {
+ $height: nth($size, 2);
+ }
+
+ @if $height == auto or (type-of($height) == number and not unitless($height)) {
+ height: $height;
+ }
+
+ @if $width == auto or (type-of($height) == number and not unitless($width)) {
+ width: $width;
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_timing-functions.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_timing-functions.scss
new file mode 100644
index 00000000..51b24109
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_timing-functions.scss
@@ -0,0 +1,32 @@
+// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)
+// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html
+
+// EASE IN
+$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);
+$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);
+$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);
+$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);
+$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);
+$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);
+
+// EASE OUT
+$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);
+$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);
+$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);
+$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);
+$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);
+$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);
+$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);
+
+// EASE IN OUT
+$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);
+$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);
+$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);
+$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);
+$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);
+$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);
+$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_triangle.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_triangle.scss
new file mode 100644
index 00000000..573954e4
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_triangle.scss
@@ -0,0 +1,83 @@
+@mixin triangle ($size, $color, $direction) {
+ height: 0;
+ width: 0;
+
+ $width: nth($size, 1);
+ $height: nth($size, length($size));
+
+ $foreground-color: nth($color, 1);
+ $background-color: if(length($color) == 2, nth($color, 2), transparent);
+
+ @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
+
+ $width: $width / 2;
+ $height: if(length($size) > 1, $height, $height/2);
+
+ @if $direction == up {
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ border-bottom: $height solid $foreground-color;
+
+ } @else if $direction == right {
+ border-top: $width solid $background-color;
+ border-bottom: $width solid $background-color;
+ border-left: $height solid $foreground-color;
+
+ } @else if $direction == down {
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ border-top: $height solid $foreground-color;
+
+ } @else if $direction == left {
+ border-top: $width solid $background-color;
+ border-bottom: $width solid $background-color;
+ border-right: $height solid $foreground-color;
+ }
+ }
+
+ @else if ($direction == up-right) or ($direction == up-left) {
+ border-top: $height solid $foreground-color;
+
+ @if $direction == up-right {
+ border-left: $width solid $background-color;
+
+ } @else if $direction == up-left {
+ border-right: $width solid $background-color;
+ }
+ }
+
+ @else if ($direction == down-right) or ($direction == down-left) {
+ border-bottom: $height solid $foreground-color;
+
+ @if $direction == down-right {
+ border-left: $width solid $background-color;
+
+ } @else if $direction == down-left {
+ border-right: $width solid $background-color;
+ }
+ }
+
+ @else if ($direction == inset-up) {
+ border-width: $height $width;
+ border-style: solid;
+ border-color: $background-color $background-color $foreground-color;
+ }
+
+ @else if ($direction == inset-down) {
+ border-width: $height $width;
+ border-style: solid;
+ border-color: $foreground-color $background-color $background-color;
+ }
+
+ @else if ($direction == inset-right) {
+ border-width: $width $height;
+ border-style: solid;
+ border-color: $background-color $background-color $background-color $foreground-color;
+ }
+
+ @else if ($direction == inset-left) {
+ border-width: $width $height;
+ border-style: solid;
+ border-color: $background-color $foreground-color $background-color $background-color;
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/addons/_word-wrap.scss b/docs/themes/learn2/scss/vendor/bourbon/addons/_word-wrap.scss
new file mode 100644
index 00000000..9734a597
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/addons/_word-wrap.scss
@@ -0,0 +1,8 @@
+@mixin word-wrap($wrap: break-word) {
+ word-wrap: $wrap;
+
+ @if $wrap == break-word {
+ overflow-wrap: break-word;
+ word-break: break-all;
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_animation.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_animation.scss
new file mode 100644
index 00000000..08c3dbf1
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_animation.scss
@@ -0,0 +1,52 @@
+// http://www.w3.org/TR/css3-animations/#the-animation-name-property-
+// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.
+
+// Official animation shorthand property.
+@mixin animation ($animations...) {
+ @include prefixer(animation, $animations, webkit moz spec);
+}
+
+// Individual Animation Properties
+@mixin animation-name ($names...) {
+ @include prefixer(animation-name, $names, webkit moz spec);
+}
+
+
+@mixin animation-duration ($times...) {
+ @include prefixer(animation-duration, $times, webkit moz spec);
+}
+
+
+@mixin animation-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out
+ @include prefixer(animation-timing-function, $motions, webkit moz spec);
+}
+
+
+@mixin animation-iteration-count ($values...) {
+// infinite |
+ @include prefixer(animation-iteration-count, $values, webkit moz spec);
+}
+
+
+@mixin animation-direction ($directions...) {
+// normal | alternate
+ @include prefixer(animation-direction, $directions, webkit moz spec);
+}
+
+
+@mixin animation-play-state ($states...) {
+// running | paused
+ @include prefixer(animation-play-state, $states, webkit moz spec);
+}
+
+
+@mixin animation-delay ($times...) {
+ @include prefixer(animation-delay, $times, webkit moz spec);
+}
+
+
+@mixin animation-fill-mode ($modes...) {
+// none | forwards | backwards | both
+ @include prefixer(animation-fill-mode, $modes, webkit moz spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_appearance.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_appearance.scss
new file mode 100644
index 00000000..3eb16e45
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_appearance.scss
@@ -0,0 +1,3 @@
+@mixin appearance ($value) {
+ @include prefixer(appearance, $value, webkit moz ms o spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_backface-visibility.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_backface-visibility.scss
new file mode 100644
index 00000000..1161fe60
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_backface-visibility.scss
@@ -0,0 +1,6 @@
+//************************************************************************//
+// Backface-visibility mixin
+//************************************************************************//
+@mixin backface-visibility($visibility) {
+ @include prefixer(backface-visibility, $visibility, webkit spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_background-image.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_background-image.scss
new file mode 100644
index 00000000..6abe88be
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_background-image.scss
@@ -0,0 +1,42 @@
+//************************************************************************//
+// Background-image property for adding multiple background images with
+// gradients, or for stringing multiple gradients together.
+//************************************************************************//
+
+@mixin background-image($images...) {
+ $webkit-images: ();
+ $spec-images: ();
+
+ @each $image in $images {
+ $webkit-image: ();
+ $spec-image: ();
+
+ @if (type-of($image) == string) {
+ $url-str: str-slice($image, 0, 3);
+ $gradient-type: str-slice($image, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-image: $image;
+ $spec-image: $image;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+ }
+
+ $webkit-images: append($webkit-images, $webkit-image, comma);
+ $spec-images: append($spec-images, $spec-image, comma);
+ }
+
+ background-image: $webkit-images;
+ background-image: $spec-images;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_background.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_background.scss
new file mode 100644
index 00000000..9bce9308
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_background.scss
@@ -0,0 +1,55 @@
+//************************************************************************//
+// Background property for adding multiple backgrounds using shorthand
+// notation.
+//************************************************************************//
+
+@mixin background($backgrounds...) {
+ $webkit-backgrounds: ();
+ $spec-backgrounds: ();
+
+ @each $background in $backgrounds {
+ $webkit-background: ();
+ $spec-background: ();
+ $background-type: type-of($background);
+
+ @if $background-type == string or list {
+ $background-str: if($background-type == list, nth($background, 1), $background);
+
+ $url-str: str-slice($background-str, 0, 3);
+ $gradient-type: str-slice($background-str, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma);
+ $spec-backgrounds: append($spec-backgrounds, $spec-background, comma);
+ }
+
+ background: $webkit-backgrounds;
+ background: $spec-backgrounds;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_border-image.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_border-image.scss
new file mode 100644
index 00000000..e338c2dc
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_border-image.scss
@@ -0,0 +1,59 @@
+@mixin border-image($borders...) {
+ $webkit-borders: ();
+ $spec-borders: ();
+
+ @each $border in $borders {
+ $webkit-border: ();
+ $spec-border: ();
+ $border-type: type-of($border);
+
+ @if $border-type == string or list {
+ $border-str: if($border-type == list, nth($border, 1), $border);
+
+ $url-str: str-slice($border-str, 0, 3);
+ $gradient-type: str-slice($border-str, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ $webkit-borders: append($webkit-borders, $webkit-border, comma);
+ $spec-borders: append($spec-borders, $spec-border, comma);
+ }
+
+ -webkit-border-image: $webkit-borders;
+ border-image: $spec-borders;
+ border-style: solid;
+}
+
+//Examples:
+// @include border-image(url("image.png"));
+// @include border-image(url("image.png") 20 stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow));
+// @include border-image(linear-gradient(45deg, orange, yellow) stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);
+// @include border-image(radial-gradient(top, cover, orange, yellow, orange));
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_border-radius.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_border-radius.scss
new file mode 100644
index 00000000..7c171901
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_border-radius.scss
@@ -0,0 +1,22 @@
+//************************************************************************//
+// Shorthand Border-radius mixins
+//************************************************************************//
+@mixin border-top-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-top-right-radius, $radii, spec);
+}
+
+@mixin border-bottom-radius($radii) {
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
+
+@mixin border-left-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+}
+
+@mixin border-right-radius($radii) {
+ @include prefixer(border-top-right-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_box-sizing.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_box-sizing.scss
new file mode 100644
index 00000000..f07e1d41
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_box-sizing.scss
@@ -0,0 +1,4 @@
+@mixin box-sizing ($box) {
+// content-box | border-box | inherit
+ @include prefixer(box-sizing, $box, webkit moz spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_calc.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_calc.scss
new file mode 100644
index 00000000..94d7e4ce
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_calc.scss
@@ -0,0 +1,4 @@
+@mixin calc($property, $value) {
+ #{$property}: -webkit-calc(#{$value});
+ #{$property}: calc(#{$value});
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_columns.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_columns.scss
new file mode 100644
index 00000000..96f601c1
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_columns.scss
@@ -0,0 +1,47 @@
+@mixin columns($arg: auto) {
+// ||
+ @include prefixer(columns, $arg, webkit moz spec);
+}
+
+@mixin column-count($int: auto) {
+// auto || integer
+ @include prefixer(column-count, $int, webkit moz spec);
+}
+
+@mixin column-gap($length: normal) {
+// normal || length
+ @include prefixer(column-gap, $length, webkit moz spec);
+}
+
+@mixin column-fill($arg: auto) {
+// auto || length
+ @include prefixer(column-fill, $arg, webkit moz spec);
+}
+
+@mixin column-rule($arg) {
+// || ||
+ @include prefixer(column-rule, $arg, webkit moz spec);
+}
+
+@mixin column-rule-color($color) {
+ @include prefixer(column-rule-color, $color, webkit moz spec);
+}
+
+@mixin column-rule-style($style: none) {
+// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid
+ @include prefixer(column-rule-style, $style, webkit moz spec);
+}
+
+@mixin column-rule-width ($width: none) {
+ @include prefixer(column-rule-width, $width, webkit moz spec);
+}
+
+@mixin column-span($arg: none) {
+// none || all
+ @include prefixer(column-span, $arg, webkit moz spec);
+}
+
+@mixin column-width($length: auto) {
+// auto || length
+ @include prefixer(column-width, $length, webkit moz spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_filter.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_filter.scss
new file mode 100644
index 00000000..8560d776
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_filter.scss
@@ -0,0 +1,5 @@
+@mixin filter($function: none) {
+ // [
+ @include prefixer(perspective, $depth, webkit moz spec);
+}
+
+@mixin perspective-origin($value: 50% 50%) {
+ @include prefixer(perspective-origin, $value, webkit moz spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_placeholder.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_placeholder.scss
new file mode 100644
index 00000000..5682fd09
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_placeholder.scss
@@ -0,0 +1,8 @@
+@mixin placeholder {
+ $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input";
+ @each $placeholder in $placeholders {
+ &:#{$placeholder}-placeholder {
+ @content;
+ }
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_radial-gradient.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_radial-gradient.scss
new file mode 100644
index 00000000..7a8c3765
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_radial-gradient.scss
@@ -0,0 +1,39 @@
+// Requires Sass 3.1+
+@mixin radial-gradient($G1, $G2,
+ $G3: null, $G4: null,
+ $G5: null, $G6: null,
+ $G7: null, $G8: null,
+ $G9: null, $G10: null,
+ $pos: null,
+ $shape-size: null,
+ $fallback: null) {
+
+ $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
+ $G1: nth($data, 1);
+ $G2: nth($data, 2);
+ $pos: nth($data, 3);
+ $shape-size: nth($data, 4);
+
+ $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
+
+ // Strip deprecated cover/contain for spec
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ // Set $G1 as the default fallback color
+ $first-color: nth($full, 1);
+ $fallback-color: nth($first-color, 1);
+
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+
+ // Add Commas and spaces
+ $shape-size: if($shape-size, '#{$shape-size}, ', null);
+ $pos: if($pos, '#{$pos}, ', null);
+ $pos-spec: if($pos, 'at #{$pos}', null);
+ $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');
+
+ background-color: $fallback-color;
+ background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));
+ background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})");
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_transform.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_transform.scss
new file mode 100644
index 00000000..8cc35963
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_transform.scss
@@ -0,0 +1,15 @@
+@mixin transform($property: none) {
+// none |
+ @include prefixer(transform, $property, webkit moz ms o spec);
+}
+
+@mixin transform-origin($axes: 50%) {
+// x-axis - left | center | right | length | %
+// y-axis - top | center | bottom | length | %
+// z-axis - length
+ @include prefixer(transform-origin, $axes, webkit moz ms o spec);
+}
+
+@mixin transform-style ($style: flat) {
+ @include prefixer(transform-style, $style, webkit moz ms o spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_transition.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_transition.scss
new file mode 100644
index 00000000..5ad4c0ae
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_transition.scss
@@ -0,0 +1,77 @@
+// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
+// Example: @include transition (all 2s ease-in-out);
+// @include transition (opacity 1s ease-in 2s, width 2s ease-out);
+// @include transition-property (transform, opacity);
+
+@mixin transition ($properties...) {
+ // Fix for vendor-prefix transform property
+ $needs-prefixes: false;
+ $webkit: ();
+ $moz: ();
+ $spec: ();
+
+ // Create lists for vendor-prefixed transform
+ @each $list in $properties {
+ @if nth($list, 1) == "transform" {
+ $needs-prefixes: true;
+ $list1: -webkit-transform;
+ $list2: -moz-transform;
+ $list3: ();
+
+ @each $var in $list {
+ $list3: join($list3, $var);
+
+ @if $var != "transform" {
+ $list1: join($list1, $var);
+ $list2: join($list2, $var);
+ }
+ }
+
+ $webkit: append($webkit, $list1);
+ $moz: append($moz, $list2);
+ $spec: append($spec, $list3);
+ }
+
+ // Create lists for non-prefixed transition properties
+ @else {
+ $webkit: append($webkit, $list, comma);
+ $moz: append($moz, $list, comma);
+ $spec: append($spec, $list, comma);
+ }
+ }
+
+ @if $needs-prefixes {
+ -webkit-transition: $webkit;
+ -moz-transition: $moz;
+ transition: $spec;
+ }
+ @else {
+ @if length($properties) >= 1 {
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+
+ @else {
+ $properties: all 0.15s ease-out 0s;
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+ }
+}
+
+@mixin transition-property ($properties...) {
+ -webkit-transition-property: transition-property-names($properties, 'webkit');
+ -moz-transition-property: transition-property-names($properties, 'moz');
+ transition-property: transition-property-names($properties, false);
+}
+
+@mixin transition-duration ($times...) {
+ @include prefixer(transition-duration, $times, webkit moz spec);
+}
+
+@mixin transition-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
+ @include prefixer(transition-timing-function, $motions, webkit moz spec);
+}
+
+@mixin transition-delay ($times...) {
+ @include prefixer(transition-delay, $times, webkit moz spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/css3/_user-select.scss b/docs/themes/learn2/scss/vendor/bourbon/css3/_user-select.scss
new file mode 100644
index 00000000..1380aa8b
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/css3/_user-select.scss
@@ -0,0 +1,3 @@
+@mixin user-select($arg: none) {
+ @include prefixer(user-select, $arg, webkit moz ms spec);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_assign.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_assign.scss
new file mode 100644
index 00000000..9a1db93e
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_assign.scss
@@ -0,0 +1,11 @@
+@function assign-inputs($inputs, $pseudo: null) {
+ $list : ();
+
+ @each $input in $inputs {
+ $input: unquote($input);
+ $input: if($pseudo, $input + ":" + $pseudo, $input);
+ $list: append($list, $input, comma);
+ }
+
+ @return $list;
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_color-lightness.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_color-lightness.scss
new file mode 100644
index 00000000..8c6df4e2
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_color-lightness.scss
@@ -0,0 +1,13 @@
+// Programatically determines whether a color is light or dark
+// Returns a boolean
+// More details here http://robots.thoughtbot.com/closer-look-color-lightness
+
+@function is-light($hex-color) {
+ $-local-red: red(rgba($hex-color, 1.0));
+ $-local-green: green(rgba($hex-color, 1.0));
+ $-local-blue: blue(rgba($hex-color, 1.0));
+
+ $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255;
+
+ @return $-local-lightness > .6;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_flex-grid.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_flex-grid.scss
new file mode 100644
index 00000000..3bbd8665
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_flex-grid.scss
@@ -0,0 +1,39 @@
+// Flexible grid
+@function flex-grid($columns, $container-columns: $fg-max-columns) {
+ $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($width / $container-width);
+}
+
+// Flexible gutter
+@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($gutter / $container-width);
+}
+
+// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.
+// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.
+//
+// The calculation presumes that your column structure will be missing the last gutter:
+//
+// -- column -- gutter -- column -- gutter -- column
+//
+// $fg-column: 60px; // Column Width
+// $fg-gutter: 25px; // Gutter Width
+// $fg-max-columns: 12; // Total Columns For Main Container
+//
+// div {
+// width: flex-grid(4); // returns (315px / 995px) = 31.65829%;
+// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;
+//
+// p {
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// float: left;
+// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%;
+// }
+//
+// blockquote {
+// float: left;
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// }
+// }
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_golden-ratio.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_golden-ratio.scss
new file mode 100644
index 00000000..463d14a0
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_golden-ratio.scss
@@ -0,0 +1,3 @@
+@function golden-ratio($value, $increment) {
+ @return modular-scale($value, $increment, $golden)
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_grid-width.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_grid-width.scss
new file mode 100644
index 00000000..8e63d83d
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_grid-width.scss
@@ -0,0 +1,13 @@
+@function grid-width($n) {
+ @return $n * $gw-column + ($n - 1) * $gw-gutter;
+}
+
+// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.
+//
+// $gw-column: 100px; // Column Width
+// $gw-gutter: 40px; // Gutter Width
+//
+// div {
+// width: grid-width(4); // returns 520px;
+// margin-left: $gw-gutter; // returns 40px;
+// }
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_modular-scale.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_modular-scale.scss
new file mode 100644
index 00000000..afc59eb9
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_modular-scale.scss
@@ -0,0 +1,66 @@
+// Scaling Variables
+$golden: 1.618;
+$minor-second: 1.067;
+$major-second: 1.125;
+$minor-third: 1.2;
+$major-third: 1.25;
+$perfect-fourth: 1.333;
+$augmented-fourth: 1.414;
+$perfect-fifth: 1.5;
+$minor-sixth: 1.6;
+$major-sixth: 1.667;
+$minor-seventh: 1.778;
+$major-seventh: 1.875;
+$octave: 2;
+$major-tenth: 2.5;
+$major-eleventh: 2.667;
+$major-twelfth: 3;
+$double-octave: 4;
+
+@function modular-scale($value, $increment, $ratio) {
+ $v1: nth($value, 1);
+ $v2: nth($value, length($value));
+ $value: $v1;
+
+ // scale $v2 to just above $v1
+ @while $v2 > $v1 {
+ $v2: ($v2 / $ratio); // will be off-by-1
+ }
+ @while $v2 < $v1 {
+ $v2: ($v2 * $ratio); // will fix off-by-1
+ }
+
+ // check AFTER scaling $v2 to prevent double-counting corner-case
+ $double-stranded: $v2 > $v1;
+
+ @if $increment > 0 {
+ @for $i from 1 through $increment {
+ @if $double-stranded and ($v1 * $ratio) > $v2 {
+ $value: $v2;
+ $v2: ($v2 * $ratio);
+ } @else {
+ $v1: ($v1 * $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @if $increment < 0 {
+ // adjust $v2 to just below $v1
+ @if $double-stranded {
+ $v2: ($v2 / $ratio);
+ }
+
+ @for $i from $increment through -1 {
+ @if $double-stranded and ($v1 / $ratio) < $v2 {
+ $value: $v2;
+ $v2: ($v2 / $ratio);
+ } @else {
+ $v1: ($v1 / $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @return $value;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_px-to-em.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_px-to-em.scss
new file mode 100644
index 00000000..4832245e
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_px-to-em.scss
@@ -0,0 +1,13 @@
+// Convert pixels to ems
+// eg. for a relational value of 12px write em(12) when the parent is 16px
+// if the parent is another value say 24px write em(12, 24)
+
+@function em($pxval, $base: $em-base) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1em;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_px-to-rem.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_px-to-rem.scss
new file mode 100644
index 00000000..96b244e4
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_px-to-rem.scss
@@ -0,0 +1,15 @@
+// Convert pixels to rems
+// eg. for a relational value of 12px write rem(12)
+// Assumes $em-base is the font-size of
+
+@function rem($pxval) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+
+ $base: $em-base;
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1rem;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_strip-units.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_strip-units.scss
new file mode 100644
index 00000000..6afc6e60
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_strip-units.scss
@@ -0,0 +1,5 @@
+// Srtips the units from a value. e.g. 12px -> 12
+
+@function strip-units($val) {
+ @return ($val / ($val * 0 + 1));
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_tint-shade.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_tint-shade.scss
new file mode 100644
index 00000000..f7172004
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_tint-shade.scss
@@ -0,0 +1,9 @@
+// Add percentage of white to a color
+@function tint($color, $percent){
+ @return mix(white, $color, $percent);
+}
+
+// Add percentage of black to a color
+@function shade($color, $percent){
+ @return mix(black, $color, $percent);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_transition-property-name.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_transition-property-name.scss
new file mode 100644
index 00000000..54cd4228
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_transition-property-name.scss
@@ -0,0 +1,22 @@
+// Return vendor-prefixed property names if appropriate
+// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background
+//************************************************************************//
+@function transition-property-names($props, $vendor: false) {
+ $new-props: ();
+
+ @each $prop in $props {
+ $new-props: append($new-props, transition-property-name($prop, $vendor), comma);
+ }
+
+ @return $new-props;
+}
+
+@function transition-property-name($prop, $vendor: false) {
+ // put other properties that need to be prefixed here aswell
+ @if $vendor and $prop == transform {
+ @return unquote('-'+$vendor+'-'+$prop);
+ }
+ @else {
+ @return $prop;
+ }
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/bourbon/functions/_unpack.scss b/docs/themes/learn2/scss/vendor/bourbon/functions/_unpack.scss
new file mode 100644
index 00000000..37759636
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/functions/_unpack.scss
@@ -0,0 +1,17 @@
+// Convert shorthand to the 4-value syntax
+
+@function unpack($shorthand) {
+ @if length($shorthand) == 1 {
+ @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);
+ }
+ @else if length($shorthand) == 2 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);
+ }
+ @else if length($shorthand) == 3 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);
+ }
+ @else {
+ @return $shorthand;
+ }
+}
+
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_convert-units.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_convert-units.scss
new file mode 100644
index 00000000..3443db39
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_convert-units.scss
@@ -0,0 +1,15 @@
+//************************************************************************//
+// Helper function for str-to-num fn.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _convert-units($number, $unit) {
+ $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn';
+ $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn;
+ $index: index($strings, $unit);
+
+ @if not $index {
+ @warn "Unknown unit `#{$unit}`.";
+ @return false;
+ }
+ @return $number * nth($units, $index);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss
new file mode 100644
index 00000000..07d30b6c
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss
@@ -0,0 +1,13 @@
+@function _gradient-positions-parser($gradient-type, $gradient-positions) {
+ @if $gradient-positions
+ and ($gradient-type == linear)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _linear-positions-parser($gradient-positions);
+ }
+ @else if $gradient-positions
+ and ($gradient-type == radial)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _radial-positions-parser($gradient-positions);
+ }
+ @return $gradient-positions;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_is-num.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_is-num.scss
new file mode 100644
index 00000000..71459e14
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_is-num.scss
@@ -0,0 +1,8 @@
+//************************************************************************//
+// Helper for linear-gradient-parser
+//************************************************************************//
+@function _is-num($char) {
+ $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9;
+ $index: index($values, $char);
+ @return if($index, true, false);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-angle-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-angle-parser.scss
new file mode 100644
index 00000000..e0401ed8
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-angle-parser.scss
@@ -0,0 +1,25 @@
+// Private function for linear-gradient-parser
+@function _linear-angle-parser($image, $first-val, $prefix, $suffix) {
+ $offset: null;
+ $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val));
+ $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val));
+
+ @if ($unit-long == "grad") or
+ ($unit-long == "turn") {
+ $offset: if($unit-long == "grad", -100grad * 3, -0.75turn);
+ }
+
+ @else if ($unit-short == "deg") or
+ ($unit-short == "rad") {
+ $offset: if($unit-short == "deg", -90 * 3, 1.6rad);
+ }
+
+ @if $offset {
+ $num: _str-to-num($first-val);
+
+ @return (
+ webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix,
+ spec-image: $image
+ );
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss
new file mode 100644
index 00000000..12bcdcda
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss
@@ -0,0 +1,41 @@
+@function _linear-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 0, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $has-multiple-vals: str-index($first-val, " ");
+ $has-single-position: unquote(_position-flipper($first-val) + "");
+ $has-angle: _is-num(str-slice($first-val, 0, 0));
+
+ @if $has-multiple-vals {
+ $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals);
+ }
+
+ @else if $has-single-position != "" {
+ $pos: unquote($has-single-position + "");
+
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+
+ @else if $has-angle {
+ // Rotate degree for webkit
+ $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix);
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ );
+ }
+
+ @return $gradients;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-positions-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-positions-parser.scss
new file mode 100644
index 00000000..d26383ed
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-positions-parser.scss
@@ -0,0 +1,61 @@
+@function _linear-positions-parser($pos) {
+ $type: type-of(nth($pos, 1));
+ $spec: null;
+ $degree: null;
+ $side: null;
+ $corner: null;
+ $length: length($pos);
+ // Parse Side and corner positions
+ @if ($length > 1) {
+ @if nth($pos, 1) == "to" { // Newer syntax
+ $side: nth($pos, 2);
+
+ @if $length == 2 { // eg. to top
+ // Swap for backwards compatability
+ $degree: _position-flipper(nth($pos, 2));
+ }
+ @else if $length == 3 { // eg. to top left
+ $corner: nth($pos, 3);
+ }
+ }
+ @else if $length == 2 { // Older syntax ("top left")
+ $side: _position-flipper(nth($pos, 1));
+ $corner: _position-flipper(nth($pos, 2));
+ }
+
+ @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ $spec: to $side $corner;
+ }
+ @else if $length == 1 {
+ // Swap for backwards compatability
+ @if $type == string {
+ $degree: $pos;
+ $spec: to _position-flipper($pos);
+ }
+ @else {
+ $degree: -270 - $pos; //rotate the gradient opposite from spec
+ $spec: $pos;
+ }
+ }
+ $degree: unquote($degree + ",");
+ $spec: unquote($spec + ",");
+ @return $degree $spec;
+}
+
+@function _position-flipper($pos) {
+ @return if($pos == left, right, null)
+ if($pos == right, left, null)
+ if($pos == top, bottom, null)
+ if($pos == bottom, top, null);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss
new file mode 100644
index 00000000..86ad88fb
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss
@@ -0,0 +1,31 @@
+// Private function for linear-gradient-parser
+@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) {
+ $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 );
+ $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val));
+ $val-3: null;
+ $has-val-3: str-index($val-2, " ");
+
+ @if $has-val-3 {
+ $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2));
+ $val-2: str-slice($val-2, 0, $has-val-3 - 1);
+ }
+
+ $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3);
+ $pos: unquote($pos + "");
+
+ // Use old spec for webkit
+ @if $val-1 == "to" {
+ @return (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ );
+ }
+
+ // Bring the code up to spec
+ @else {
+ @return (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-arg-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-arg-parser.scss
new file mode 100644
index 00000000..a3a3704a
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-arg-parser.scss
@@ -0,0 +1,69 @@
+@function _radial-arg-parser($G1, $G2, $pos, $shape-size) {
+ @each $value in $G1, $G2 {
+ $first-val: nth($value, 1);
+ $pos-type: type-of($first-val);
+ $spec-at-index: null;
+
+ // Determine if spec was passed to mixin
+ @if type-of($value) == list {
+ $spec-at-index: if(index($value, at), index($value, at), false);
+ }
+ @if $spec-at-index {
+ @if $spec-at-index > 1 {
+ @for $i from 1 through ($spec-at-index - 1) {
+ $shape-size: $shape-size nth($value, $i);
+ }
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ @else if $spec-at-index == 1 {
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ $G1: null;
+ }
+
+ // If not spec calculate correct values
+ @else {
+ @if ($pos-type != color) or ($first-val != "transparent") {
+ @if ($pos-type == number)
+ or ($first-val == "center")
+ or ($first-val == "top")
+ or ($first-val == "right")
+ or ($first-val == "bottom")
+ or ($first-val == "left") {
+
+ $pos: $value;
+
+ @if $pos == $G1 {
+ $G1: null;
+ }
+ }
+
+ @else if
+ ($first-val == "ellipse")
+ or ($first-val == "circle")
+ or ($first-val == "closest-side")
+ or ($first-val == "closest-corner")
+ or ($first-val == "farthest-side")
+ or ($first-val == "farthest-corner")
+ or ($first-val == "contain")
+ or ($first-val == "cover") {
+
+ $shape-size: $value;
+
+ @if $value == $G1 {
+ $G1: null;
+ }
+
+ @else if $value == $G2 {
+ $G2: null;
+ }
+ }
+ }
+ }
+ }
+ @return $G1, $G2, $pos, $shape-size;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss
new file mode 100644
index 00000000..6dde50f0
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss
@@ -0,0 +1,50 @@
+@function _radial-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 0, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $is-spec-syntax: str-index($first-val, "at");
+
+ @if $is-spec-syntax and $is-spec-syntax > 1 {
+ $keyword: str-slice($first-val, 1, $is-spec-syntax - 2);
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+ $pos: append($pos, $keyword, comma);
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ )
+ }
+
+ @else if $is-spec-syntax == 1 {
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ )
+ }
+
+ @else if str-index($image, "cover") or str-index($image, "contain") {
+ @warn "Radial-gradient needs to be updated to conform to latest spec.";
+
+ $gradients: (
+ webkit-image: null,
+ spec-image: $image
+ )
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ )
+ }
+
+ @return $gradients;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-positions-parser.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-positions-parser.scss
new file mode 100644
index 00000000..6a5b4777
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_radial-positions-parser.scss
@@ -0,0 +1,18 @@
+@function _radial-positions-parser($gradient-pos) {
+ $shape-size: nth($gradient-pos, 1);
+ $pos: nth($gradient-pos, 2);
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ $pre-spec: unquote(if($pos, "#{$pos}, ", null))
+ unquote(if($shape-size, "#{$shape-size},", null));
+ $pos-spec: if($pos, "at #{$pos}", null);
+
+ $spec: "#{$shape-size-spec} #{$pos-spec}";
+
+ // Add comma
+ @if ($spec != ' ') {
+ $spec: "#{$spec},"
+ }
+
+ @return $pre-spec $spec;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_render-gradients.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_render-gradients.scss
new file mode 100644
index 00000000..57656768
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_render-gradients.scss
@@ -0,0 +1,26 @@
+// User for linear and radial gradients within background-image or border-image properties
+
+@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {
+ $pre-spec: null;
+ $spec: null;
+ $vendor-gradients: null;
+ @if $gradient-type == linear {
+ @if $gradient-positions {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+ }
+ @else if $gradient-type == radial {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+
+ @if $vendor {
+ $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);
+ }
+ @else if $vendor == false {
+ $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})";
+ $vendor-gradients: unquote($vendor-gradients);
+ }
+ @return $vendor-gradients;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_shape-size-stripper.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_shape-size-stripper.scss
new file mode 100644
index 00000000..ee5eda42
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_shape-size-stripper.scss
@@ -0,0 +1,10 @@
+@function _shape-size-stripper($shape-size) {
+ $shape-size-spec: null;
+ @each $value in $shape-size {
+ @if ($value == "cover") or ($value == "contain") {
+ $value: null;
+ }
+ $shape-size-spec: "#{$shape-size-spec} #{$value}";
+ }
+ @return $shape-size-spec;
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/helpers/_str-to-num.scss b/docs/themes/learn2/scss/vendor/bourbon/helpers/_str-to-num.scss
new file mode 100644
index 00000000..b3d61682
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/helpers/_str-to-num.scss
@@ -0,0 +1,50 @@
+//************************************************************************//
+// Helper function for linear/radial-gradient-parsers.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _str-to-num($string) {
+ // Matrices
+ $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
+ $numbers: 0 1 2 3 4 5 6 7 8 9;
+
+ // Result
+ $result: 0;
+ $divider: 0;
+ $minus: false;
+
+ // Looping through all characters
+ @for $i from 1 through str-length($string) {
+ $character: str-slice($string, $i, $i);
+ $index: index($strings, $character);
+
+ @if $character == '-' {
+ $minus: true;
+ }
+
+ @else if $character == '.' {
+ $divider: 1;
+ }
+
+ @else {
+ @if not $index {
+ $result: if($minus, $result * -1, $result);
+ @return _convert-units($result, str-slice($string, $i));
+ }
+
+ $number: nth($numbers, $index);
+
+ @if $divider == 0 {
+ $result: $result * 10;
+ }
+
+ @else {
+ // Move the decimal dot to the left
+ $divider: $divider * 10;
+ $number: $number / $divider;
+ }
+
+ $result: $result + $number;
+ }
+ }
+ @return if($minus, $result * -1, $result);
+}
diff --git a/docs/themes/learn2/scss/vendor/bourbon/settings/_prefixer.scss b/docs/themes/learn2/scss/vendor/bourbon/settings/_prefixer.scss
new file mode 100644
index 00000000..ecab49fb
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/settings/_prefixer.scss
@@ -0,0 +1,6 @@
+// Variable settings for /addons/prefixer.scss
+$prefix-for-webkit: true !default;
+$prefix-for-mozilla: true !default;
+$prefix-for-microsoft: true !default;
+$prefix-for-opera: true !default;
+$prefix-for-spec: true !default; // required for keyframe mixin
diff --git a/docs/themes/learn2/scss/vendor/bourbon/settings/_px-to-em.scss b/docs/themes/learn2/scss/vendor/bourbon/settings/_px-to-em.scss
new file mode 100644
index 00000000..f2f9a3e8
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/bourbon/settings/_px-to-em.scss
@@ -0,0 +1 @@
+$em-base: 16px !default;
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/_color-schemer.scss b/docs/themes/learn2/scss/vendor/color-schemer/_color-schemer.scss
new file mode 100644
index 00000000..469c697e
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/_color-schemer.scss
@@ -0,0 +1,31 @@
+@import "blend-modes";
+
+// Defaults
+$cs-primary : #f00 !default;
+$cs-scheme : mono !default; // mono, complement, triad, tetrad, analogic, accented-analogic
+$cs-hue-offset : 30 !default;
+$cs-brightness-offset : false !default;
+$cs-color-model : rgb !default; // rgb, ryb
+$cs-colorblind : normal !default;
+$cs-harmonize-mode : null !default;
+$cs-harmonize-color : $cs-primary !default;
+$cs-harmonize-amount : 10% !default;
+
+// Partials
+@import "color-schemer/interpolation";
+@import "color-schemer/cmyk";
+@import "color-schemer/ryb";
+@import "color-schemer/colorblind";
+@import "color-schemer/equalize";
+@import "color-schemer/mix";
+@import "color-schemer/tint-shade";
+@import "color-schemer/color-adjustments";
+@import "color-schemer/harmonize";
+@import "color-schemer/color-schemer";
+
+@import "color-schemer/comparison";
+
+@import "color-schemer/mixins";
+
+// Tell other files that this is loaded.
+$color-schemer-loaded : true;
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_cmyk.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_cmyk.scss
new file mode 100644
index 00000000..847115e0
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_cmyk.scss
@@ -0,0 +1,14 @@
+@function cmyk($cyan, $magenta, $yellow, $black) {
+
+ // Get the color values out of white
+ $cyan : mix(cyan , white, $cyan );
+ $magenta : mix(magenta, white, $magenta);
+ $yellow : mix(yellow , white, $yellow );
+ $black : mix(black , white, $black );
+
+ // Subtract the colors from white
+ $color: white - invert($cyan) - invert($magenta) - invert($yellow) - invert($black);
+
+
+ @return $color;
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss
new file mode 100644
index 00000000..6028b494
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss
@@ -0,0 +1,30 @@
+// RGB functions
+@function set-red($color, $red) {
+ @return rgba($red, green($color), blue($color), alpha($color));
+}
+
+@function set-green($color, $green) {
+ @return rgba(red($color), $green, blue($color), alpha($color));
+}
+
+@function set-blue($color, $blue) {
+ @return rgba(red($color), green($color), $blue, alpha($color));
+}
+
+
+// HSL Functions
+@function set-hue($color, $hue) {
+ @return hsla($hue, saturation($color), lightness($color), alpha($color));
+}
+
+@function set-saturation($color, $saturation) {
+ @return hsla(hue($color), $saturation, lightness($color), alpha($color));
+}
+
+@function set-lightness($color, $lightness) {
+ @return hsla(hue($color), saturation($color), $lightness, alpha($color));
+}
+
+@function set-alpha($color, $alpha) {
+ @return hsla(hue($color), saturation($color), lightness($color), $alpha);
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-schemer.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-schemer.scss
new file mode 100644
index 00000000..c0927348
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-schemer.scss
@@ -0,0 +1,208 @@
+// brightness and hue offsets are based on the lightness and saturation of the color
+// unless defined otherwise.
+@function cs-brightness-offset($cs-brightness-offset) {
+ @if $cs-brightness-offset == false {
+ // find the difference between lightness
+ @return lightness($cs-primary) - lightness(invert($cs-primary));
+ }
+ @else {
+ @return $cs-brightness-offset;
+ }
+}
+
+// Harmonized or Unaltered Color
+@function clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount) {
+ @if $cs-harmonize-mode != null {
+ @return cs-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ } @else {
+ @return $color;
+ }
+}
+
+// Primary color
+@function cs-primary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ @return clean-or-harmonize($cs-primary, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+}
+
+// Secondary color scheme
+@function cs-secondary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ $cs-brightness-offset: cs-brightness-offset($cs-brightness-offset);
+
+ // mono
+ @if $cs-scheme == mono {
+ @if $cs-brightness-offset < 0 {
+ $color: lighten($cs-primary, abs($cs-brightness-offset));
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: darken($cs-primary, abs($cs-brightness-offset));
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // complement
+ @if $cs-scheme == complement {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // triad
+ @if $cs-scheme == triad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue(ryb-complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue(complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // tetrad
+ @if $cs-scheme == tetrad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // analogic
+ @if $cs-scheme == analogic or $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+}
+
+// Tertiary color scheme
+@function cs-tertiary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ $cs-brightness-offset: cs-brightness-offset($cs-brightness-offset);
+
+ // mono
+ @if $cs-scheme == mono {
+ $color: mix(cs-primary(), cs-secondary());
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // complement
+ @if $cs-scheme == complement {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // triad
+ @if $cs-scheme == triad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue(ryb-complement($cs-primary), $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue(complement($cs-primary), $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // tetrad
+ @if $cs-scheme == tetrad {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // analogic
+ @if $cs-scheme == analogic or $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue($cs-primary, $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue($cs-primary, $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // accented-analogic
+ @if $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+}
+
+// Quadrary color scheme
+@function cs-quadrary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ $cs-brightness-offset: cs-brightness-offset($cs-brightness-offset);
+
+ // mono
+ @if $cs-scheme == mono {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // complement
+ @if $cs-scheme == complement {
+ $color: equalize(ryb-complement($cs-primary));
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // triad
+ @if $cs-scheme == triad {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // tetrad
+ @if $cs-scheme == tetrad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue(ryb-complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue(complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // analogic
+ @if $cs-scheme == analogic {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // accented-analogic
+ @if $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_colorblind.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_colorblind.scss
new file mode 100644
index 00000000..b509183e
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_colorblind.scss
@@ -0,0 +1,29 @@
+@function cs-colorblind($color, $mode: $cs-colorblind) {
+
+ // Refrence: http://www.w3.org/TR/AERT#color-contrast
+
+ // Deuteranopia
+ @if $mode == deuteranopia {
+ @return $color;
+ }
+
+ // Protanopia
+ @if $mode == protanopia {
+ @return $color;
+ }
+
+ // Tritanopia
+ @if $mode == tritanopia {
+ @return $color;
+ }
+
+
+ // Return color if no color blind mode.
+ @else {
+ @return $color;
+ }
+}
+
+@function cs-cb($color, $mode: $cs-colorblind) {
+ @return cs-colorblind($color, $mode);
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_comparison.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_comparison.scss
new file mode 100644
index 00000000..84ed6650
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_comparison.scss
@@ -0,0 +1,15 @@
+//////////////////////////////
+// Color Is Dark
+//
+// Checks to see if the input color is a dark color taking into account both lightness and hue.
+// Suitable for determining, for instance, if a background should have a dark or light text color.
+// @return true/false (boolean)
+//////////////////////////////
+
+@function cs-is-dark($color) {
+ @if (lightness($color) < 60% and (hue($color) >= 210 or hue($color) <= 27)) or (lightness($color) <= 32%) {
+ @return true;
+ } @else {
+ @return false;
+ }
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_equalize.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_equalize.scss
new file mode 100644
index 00000000..d043bc8f
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_equalize.scss
@@ -0,0 +1,5 @@
+// Color equalize credit to Mason Wendell:
+// https://github.com/canarymason/The-Coding-Designers-Survival-Kit/blob/master/sass/partials/lib/variables/_color_schemes.sass
+@function equalize($color) {
+ @return hsl(hue($color), 100%, 50%);
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_harmonize.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_harmonize.scss
new file mode 100644
index 00000000..719b43d9
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_harmonize.scss
@@ -0,0 +1,59 @@
+@function cs-harmonize($background, $foreground: $cs-harmonize-color, $mode: $cs-harmonize-mode, $amount: $cs-harmonize-amount) {
+ $blend: null;
+ @if ($mode == normal) {
+ $blend: blend-normal($foreground, $background); }
+ @else if ($mode == multiply) {
+ $blend: blend-multiply($foreground, $background); }
+ @else if ($mode == lighten) {
+ $blend: blend-lighten($foreground, $background); }
+ @else if ($mode == darken) {
+ $blend: blend-darken($foreground, $background); }
+ @else if ($mode == darkercolor) {
+ $blend: blend-darkercolor($foreground, $background); }
+ @else if ($mode == lightercolor) {
+ $blend: blend-lightercolor($foreground, $background); }
+ @else if ($mode == lineardodge) {
+ $blend: blend-lineardodge($foreground, $background); }
+ @else if ($mode == linearburn) {
+ $blend: blend-linearburn($foreground, $background); }
+ @else if ($mode == difference) {
+ $blend: blend-difference($foreground, $background); }
+ @else if ($mode == screen) {
+ $blend: blend-screen($foreground, $background); }
+ @else if ($mode == exclusion) {
+ $blend: blend-exclusion($foreground, $background); }
+ @else if ($mode == overlay) {
+ $blend: blend-overlay($foreground, $background); }
+ @else if ($mode == softlight) {
+ $blend: blend-softlight($foreground, $background); }
+ @else if ($mode == hardlight) {
+ $blend: blend-hardlight($foreground, $background); }
+ @else if ($mode == colordodge) {
+ $blend: blend-colordodge($foreground, $background); }
+ @else if ($mode == colorburn) {
+ $blend: blend-colorburn($foreground, $background); }
+ @else if ($mode == linearlight) {
+ $blend: blend-linearlight($foreground, $background); }
+ @else if ($mode == vividlight) {
+ $blend: blend-vividlight($foreground, $background); }
+ @else if ($mode == pinlight) {
+ $blend: blend-pinlight($foreground, $background); }
+ @else if ($mode == hardmix) {
+ $blend: blend-hardmix($foreground, $background); }
+ @else if ($mode == colorblend) {
+ $blend: blend-colorblend($foreground, $background); }
+ @else if ($mode == dissolve) {
+ $blend: blend-dissolve($foreground, $background); }
+ @else if ($mode == divide) {
+ $blend: blend-divide($foreground, $background); }
+ @else if ($mode == hue) {
+ $blend: blend-hue($foreground, $background); }
+ @else if ($mode == luminosity) {
+ $blend: blend-luminosity($foreground, $background); }
+ @else if ($mode == saturation) {
+ $blend: blend-saturation($foreground, $background); }
+ @else if ($mode == subtract) {
+ $blend: blend-subtract($foreground, $background); }
+ $mixed: mix($blend, $background, $amount);
+ @return $mixed;
+}
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_interpolation.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_interpolation.scss
new file mode 100644
index 00000000..2ec182eb
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_interpolation.scss
@@ -0,0 +1,34 @@
+@function cs-interpolate($value, $units: 360, $stops: $ryb-interpolation) {
+
+ // Loop numbers out of scale back into the scale.
+ @while $value >= 360 {
+ $value: $value - 360;
+ }
+ @while $value < 0 {
+ $value: $value + 360;
+ }
+
+ // Find out how many units in each stop
+ $cs-color-deg: $units / length($stops);
+
+ // Count through stops
+ $cs-deg-count: $cs-color-deg;
+ $cs-stop-count: 1;
+
+ // Add the first stop to the end so it will be
+ // interpolated with the last stop.
+ $stops: append($stops, nth($stops, 1));
+
+ // Start interpolating
+ @for $i from 0 through length($stops) {
+ @if $value < $cs-deg-count {
+ @return cs-mix(nth($stops, $cs-stop-count + 1), nth($stops, $cs-stop-count), abs(percentage(($cs-deg-count - $value) / $cs-color-deg) - 100 ), $model: rgb);
+ }
+
+ // If the value is not in this stop, loop up to another stop.
+ @else {
+ $cs-deg-count: $cs-deg-count + $cs-color-deg;
+ $cs-stop-count: $cs-stop-count + 1
+ }
+ }
+}
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_mix.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_mix.scss
new file mode 100644
index 00000000..4d3a68f2
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_mix.scss
@@ -0,0 +1,40 @@
+@function cs-mix($color1, $color2, $percent: 50%, $model: $cs-color-model) {
+
+ $decimal : abs($percent - 100%) / 100%;
+ $hue-offset : ();
+
+ @if $model == rgb {
+ $hue-offset : (hue($color1) - hue($color2)) * $decimal;
+ @if (hue($color1) - hue($color2)) * .5 < -90deg {
+ $hue-offset : (hue($color1) + 360deg - hue($color2)) * $decimal;
+ }
+ @if (hue($color1) - hue($color2)) * .5 > 90deg {
+ $hue-offset : (hue($color1) - 360deg - hue($color2)) * $decimal;
+ }
+ }
+
+ @if $model == ryb {
+ $hue-offset : (ryb-hue($color1) - ryb-hue($color2)) * $decimal;
+ @if (ryb-hue($color1) - ryb-hue($color2)) * .5 < -90deg {
+ $hue-offset : (ryb-hue($color1) + 360deg - ryb-hue($color2)) * $decimal;
+ }
+ @if (ryb-hue($color1) - ryb-hue($color2)) * .5 > 90deg {
+ $hue-offset : (ryb-hue($color1) - 360deg - ryb-hue($color2)) * $decimal;
+ }
+ }
+
+ $saturation-offset : (saturation($color1) - saturation($color2)) * $decimal;
+ $lightness-offset : (lightness($color1) - lightness($color2)) * $decimal;
+
+ @if $model == ryb {
+ $color1: ryb-adjust-hue($color1, $hue-offset * -1);
+ }
+ @else {
+ $color1: adjust-hue($color1, $hue-offset * -1);
+ }
+
+ $color1: set-saturation($color1, saturation($color1) - $saturation-offset);
+ $color1: set-lightness($color1, lightness($color1) - $lightness-offset);
+
+ @return $color1;
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_mixins.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_mixins.scss
new file mode 100644
index 00000000..7e3a8f41
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_mixins.scss
@@ -0,0 +1,29 @@
+////////////////////////////////////////////
+// From Jina Bolton and Eric Meyer -- http://codepen.io/jina/pen/iosjp
+@function cs-stripes($position, $colors) {
+ $colors: if(type-of($colors) != 'list', compact($colors), $colors);
+ $gradient: ();
+ $width: 100% / length($colors);
+
+ @for $i from 1 through length($colors) {
+ $pop: nth($colors,$i);
+ $new: $pop ($width * ($i - 1)), $pop ($width * $i);
+ $gradient: join($gradient, $new, comma);
+ }
+
+ @return linear-gradient($position, $gradient);
+}
+
+////////////////////////////////////////////
+// Color tester
+
+@mixin cs-test($colors, $height: 2em, $element: "body:before") {
+ #{$element} {
+ content: "";
+ display: block;
+ height: $height;
+ @include background(cs-stripes(left, ($colors)));
+ position: relative;
+ z-index: 999999999999;
+ }
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_ryb.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_ryb.scss
new file mode 100644
index 00000000..1a6de0e0
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_ryb.scss
@@ -0,0 +1,76 @@
+$ryb-interpolation: #FF0000 #FF4900 #FF7400 #FF9200 #FFAA00 #FFBF00 #FFD300 #FFE800 #FFFF00 #CCF600 #9FEE00 #67E300 #00CC00 #00AF64 #009999 #0B61A4 #1240AB #1B1BB3 #3914AF #530FAD #7109AA #A600A6 #CD0074 #E40045;
+
+// RYB color interpolation
+@function find-ryb($hue) {
+
+ // remove units on $hue
+ @if unit($hue) == deg { $hue: $hue / 1deg; }
+
+ // return an interpolated hue
+ @return hue(cs-interpolate($hue));
+}
+
+// Find the RYB hue instead of RGB hue of a color.
+
+// map of the RYB offset
+$ryb-offset: 0 1 2 3 5 6 7 8 9 10 11 13 14 15 16 17 18 19 19 20 21 21 22 23 23 24 25 25 26 27 27 28 28 29 29 30 30 31 31 32 32 32 33 33 34 34 35 35 35 36 36 37 37 37 38 38 38 39 39 40 40 40 41 41 41 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 47 47 47 47 48 48 48 49 49 49 50 50 50 51 51 51 52 52 52 53 53 53 54 54 54 55 55 55 56 56 56 57 57 57 58 58 59 59 59 60 60 61 61 62 63 63 64 65 65 66 67 68 68 69 70 70 71 72 72 73 73 74 75 75 76 77 77 78 79 79 80 81 82 82 83 84 85 86 87 88 88 89 90 91 92 93 95 96 98 100 102 104 105 107 109 111 113 115 116 118 120 122 125 127 129 131 134 136 138 141 143 145 147 150 152 154 156 158 159 161 163 165 166 168 170 171 173 175 177 178 180 182 184 185 187 189 191 192 194 196 198 199 201 203 205 206 207 208 209 210 212 213 214 215 216 217 218 219 220 221 222 223 224 226 227 228 229 230 232 233 234 235 236 238 239 240 241 242 243 244 245 246 247 248 249 250 251 251 252 253 254 255 256 257 257 258 259 260 260 261 262 263 264 264 265 266 267 268 268 269 270 271 272 273 274 274 275 276 277 278 279 280 282 283 284 286 287 289 290 292 293 294 296 297 299 300 302 303 305 307 309 310 312 314 316 317 319 321 323 324 326 327 328 329 330 331 332 333 334 336 337 338 339 340 341 342 343 344 345 347 348 349 350 352 353 354 355 356 358 359 360;
+
+// loop through the map to find the matching hue.
+@function ryb-hue($color) {
+ @for $i from 1 through length($ryb-offset) {
+ @if nth($ryb-offset, $i) > hue($color) {
+ @return $i - 2deg;
+ }
+ }
+}
+
+// Changes the hue of a color.
+@function ryb-adjust-hue($color, $degrees) {
+
+ // Convert precentag to degrees.
+ @if unit($degrees) == "%" {
+ $degrees: 360 * ($degrees / 100%);
+ }
+
+ // Start at the current hue and loop in the adjustment.
+ $hue-adjust: (ryb-hue($color) + $degrees) / 1deg;
+
+ @return hsl(hue(cs-interpolate($hue-adjust)), saturation($color), lightness($color));
+}
+
+@function ryba($red, $yellow, $blue, $alpha) {
+ $hue: 0;
+ $saturation: 0;
+ $lightness: percentage(($red + $yellow + $blue) / (255 * 3));
+ @if $red == $yellow and $yellow == $blue {
+ @return hsla(0, 0, $lightness, $alpha);
+ }
+ @if $red >= $yellow and $red >= $blue {
+ $hue: 0;
+ }
+ @elseif $yellow >= $red and $yellow >= $blue {
+ $hue: 360 / 3;
+ }
+ @elseif $blue >= $red and $blue >= $yellow {
+ $hue: 360 / 3 * 2;
+ }
+ @return hsla(hue(cs-interpolate($hue)), 100%, 50%, 1);
+}
+
+@function ryb($red, $yellow, $blue) {
+ @return ryba($red, $yellow, $blue, 1);
+}
+
+@function set-ryb-hue($color, $hue) {
+ @return hsla(hue(cs-interpolate($hue)), saturation($color), lightness($color), alpha($color));
+}
+
+// Returns the complement of a color.
+@function ryb-complement($color) {
+ @return ryb-adjust-hue($color, 180deg);
+}
+
+// Returns the inverse of a color.
+@function ryb-invert($color) {
+ @return ryb-adjust-hue(hsl(hue($color), saturation(invert($color)), lightness(invert($color))), 180deg);
+}
\ No newline at end of file
diff --git a/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_tint-shade.scss b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_tint-shade.scss
new file mode 100644
index 00000000..d1198d03
--- /dev/null
+++ b/docs/themes/learn2/scss/vendor/color-schemer/color-schemer/_tint-shade.scss
@@ -0,0 +1,9 @@
+// Add percentage of white to a color
+@function tint($color, $percent) {
+ @return mix(white, $color, $percent);
+}
+
+// Add percentage of black to a color
+@function shade($color, $percent) {
+ @return mix(black, $color, $percent);
+}
diff --git a/docs/themes/learn2/templates/chapter.html.twig b/docs/themes/learn2/templates/chapter.html.twig
new file mode 100644
index 00000000..998045c0
--- /dev/null
+++ b/docs/themes/learn2/templates/chapter.html.twig
@@ -0,0 +1,11 @@
+{% extends 'docs.html.twig' %}
+
+{% block content %}
+
+
+
+ {{ page.content }}
+
+
+
+{% endblock %}
diff --git a/docs/themes/learn2/templates/default.html.twig b/docs/themes/learn2/templates/default.html.twig
new file mode 100644
index 00000000..124ce3d0
--- /dev/null
+++ b/docs/themes/learn2/templates/default.html.twig
@@ -0,0 +1,5 @@
+{% extends 'partials/base.html.twig' %}
+
+{% block content %}
+ {% include 'partials/page.html.twig' %}
+{% endblock %}
diff --git a/docs/themes/learn2/templates/docs.html.twig b/docs/themes/learn2/templates/docs.html.twig
new file mode 100644
index 00000000..62c52922
--- /dev/null
+++ b/docs/themes/learn2/templates/docs.html.twig
@@ -0,0 +1,23 @@
+{% extends 'partials/base.html.twig' %}
+{% set tags = page.taxonomy.tag %}
+{% if tags %}
+ {% set progress = page.collection({'items':{'@taxonomy':{'category': 'docs', 'tag': tags}},'order': {'by': 'default', 'dir': 'asc'}}) %}
+{% else %}
+ {% set progress = page.collection({'items':{'@taxonomy':{'category': 'docs'}},'order': {'by': 'default', 'dir': 'asc'}}) %}
+{% endif %}
+
+{% block navigation %}
+
+ {% if not progress.isFirst(page.path) %}
+
+ {% endif %}
+
+ {% if not progress.isLast(page.path) %}
+
+ {% endif %}
+
+{% endblock %}
+
+{% block content %}
+ {% include 'partials/page.html.twig' %}
+{% endblock %}
diff --git a/docs/themes/learn2/templates/error.html.twig b/docs/themes/learn2/templates/error.html.twig
new file mode 100644
index 00000000..0fa5337e
--- /dev/null
+++ b/docs/themes/learn2/templates/error.html.twig
@@ -0,0 +1,15 @@
+{% extends 'partials/base.html.twig' %}
+
+{% block topbar %}{% endblock %}
+{% block navigation %}{% endblock %}
+
+{% block content %}
+
+
+
{{ 'PLUGIN_ERROR.ERROR'|t }} {{ header.http_response_code }}
+
+ {{ page.content }}
+
+
+
+{% endblock %}
diff --git a/docs/themes/learn2/templates/partials/analytics.html.twig b/docs/themes/learn2/templates/partials/analytics.html.twig
new file mode 100644
index 00000000..53107dcd
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/analytics.html.twig
@@ -0,0 +1,10 @@
+
diff --git a/docs/themes/learn2/templates/partials/base.html.twig b/docs/themes/learn2/templates/partials/base.html.twig
new file mode 100644
index 00000000..69355a51
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/base.html.twig
@@ -0,0 +1,99 @@
+{% set theme_config = attribute(config.themes, config.system.pages.theme) %}
+
+
+
+ {% block head %}
+
+ {% if header.title %}{{ header.title }} | {% endif %}{{ site.title }}
+ {% include 'partials/metadata.html.twig' %}
+
+
+
+
+
+ {% block stylesheets %}
+ {% do assets.addCss('theme://css-compiled/nucleus.css',102) %}
+ {% do assets.addCss('theme://css-compiled/theme.css',101) %}
+ {% do assets.addCss('theme://css/custom.css',100) %}
+ {% do assets.addCss('theme://css/font-awesome.min.css',100) %}
+ {% do assets.addCss('theme://css/featherlight.min.css') %}
+
+ {% if browser.getBrowser == 'msie' and browser.getVersion >= 8 and browser.getVersion <= 9 %}
+ {% do assets.addCss('theme://css/nucleus-ie9.css') %}
+ {% do assets.addCss('theme://css/pure-0.5.0/grids-min.css') %}
+ {% do assets.addJs('theme://js/html5shiv-printshiv.min.js') %}
+ {% endif %}
+
+ {{ assets.css() }}
+ {% endblock %}
+
+ {% block javascripts %}
+ {% do assets.addJs('jquery',101) %}
+ {% do assets.addJs('theme://js/modernizr.custom.71422.js',100) %}
+ {% do assets.addJs('theme://js/featherlight.min.js') %}
+ {% do assets.addJs('theme://js/clipboard.min.js') %}
+ {% do assets.addJs('theme://js/jquery.scrollbar.min.js') %}
+ {% do assets.addJs('theme://js/learn.js') %}
+ {{ assets.js() }}
+ {% endblock %}
+
+ {% endblock %}
+
+
+ {% block sidebar %}
+
+ {% endblock %}
+
+ {% block body %}
+
+
+
+
+
+
+ {% block topbar %}{% if theme_config.github.position == 'top' or config.plugins.breadcrumbs.enabled %}
+
+ {% if theme_config.github.position == 'top' %}
+
+ {% include 'partials/github_link.html.twig' %}
+
+ {% endif %}
+
+ {% if config.plugins.breadcrumbs.enabled %}
+ {% include 'partials/breadcrumbs.html.twig' %}
+ {% endif %}
+
+ {% endif %}{% endblock %}
+
+ {% block content %}{% endblock %}
+
+ {% block footer %}
+ {% if theme_config.github.position == 'bottom' %}
+ {% include 'partials/github_note.html.twig' %}
+ {% endif %}
+ {% endblock %}
+
+
+ {% block navigation %}{% endblock %}
+
+ {% endblock %}
+ {% block analytics %}
+ {% if theme_config.google_analytics_code %}
+ {% include 'partials/analytics.html.twig' %}
+ {% endif %}
+ {% endblock %}
+
+
diff --git a/docs/themes/learn2/templates/partials/github_link.html.twig b/docs/themes/learn2/templates/partials/github_link.html.twig
new file mode 100644
index 00000000..f39c4ab5
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/github_link.html.twig
@@ -0,0 +1 @@
+ {{ 'THEME_LEARN2_GITHUB_EDIT_THIS_PAGE'|t }}
diff --git a/docs/themes/learn2/templates/partials/github_note.html.twig b/docs/themes/learn2/templates/partials/github_note.html.twig
new file mode 100644
index 00000000..81982208
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/github_note.html.twig
@@ -0,0 +1,7 @@
+
+
+ {{ 'THEME_LEARN2_GITHUB_NOTE'|t }}
+
+ {% include 'partials/github_link.html.twig' %}
+
+
diff --git a/docs/themes/learn2/templates/partials/logo.html.twig b/docs/themes/learn2/templates/partials/logo.html.twig
new file mode 100644
index 00000000..45f59121
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/logo.html.twig
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/docs/themes/learn2/templates/partials/metadata.html.twig b/docs/themes/learn2/templates/partials/metadata.html.twig
new file mode 100644
index 00000000..2f08a0e5
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/metadata.html.twig
@@ -0,0 +1,3 @@
+{% for meta in page.metadata %}
+
+{% endfor %}
diff --git a/docs/themes/learn2/templates/partials/page.html.twig b/docs/themes/learn2/templates/partials/page.html.twig
new file mode 100644
index 00000000..34c9f21a
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/page.html.twig
@@ -0,0 +1,6 @@
+
+
{{ page.title }}
+
+ {{ page.content }}
+
+
diff --git a/docs/themes/learn2/templates/partials/sidebar.html.twig b/docs/themes/learn2/templates/partials/sidebar.html.twig
new file mode 100644
index 00000000..3f1ff804
--- /dev/null
+++ b/docs/themes/learn2/templates/partials/sidebar.html.twig
@@ -0,0 +1,64 @@
+{% macro loop(page, parent_loop) %}
+ {% if parent_loop|length > 0 %}
+ {% set data_level = parent_loop %}
+ {% else %}
+ {% set data_level = 0 %}
+ {% endif %}
+ {% for p in page.children.visible %}
+ {% set parent_page = p.activeChild ? ' parent' : '' %}
+ {% set current_page = p.active ? ' active' : '' %}
+
+
+
+ {% if data_level == 0 %}{{ loop.index }}. {% endif %} {{ p.menu }}
+
+ {% if p.children.count > 0 %}
+
+ {{ _self.loop(p, parent_loop|default(0)+loop.index) }}
+
+ {% endif %}
+
+ {% endfor %}
+{% endmacro %}
+
+{% macro version(p) %}
+ {% set parent_page = p.activeChild ? ' parent' : '' %}
+ {% set current_page = p.active ? ' active' : '' %}
+
+ {% if p.activeChild or p.active %}
+
+ {% else %}
+
+ {% endif %}
+ {{ p.menu }}
+
+{% endmacro %}
+
+
diff --git a/docs/themes/learn2/thumbnail.jpg b/docs/themes/learn2/thumbnail.jpg
new file mode 100644
index 00000000..2f54f1ca
Binary files /dev/null and b/docs/themes/learn2/thumbnail.jpg differ
diff --git a/docs/themes/site/css/s2-docs.css b/docs/themes/site/css/s2-docs.css
new file mode 100644
index 00000000..dfd017d8
--- /dev/null
+++ b/docs/themes/site/css/s2-docs.css
@@ -0,0 +1,673 @@
+@charset "UTF-8";
+.select2-result-repository {
+ padding-top: 4px;
+ padding-bottom: 3px; }
+ .select2-result-repository__avatar {
+ float: left;
+ width: 60px;
+ margin-right: 10px; }
+ .select2-result-repository__avatar img {
+ width: 100%;
+ height: auto;
+ border-radius: 2px; }
+ .select2-result-repository__meta {
+ margin-left: 70px; }
+ .select2-result-repository__title {
+ color: black;
+ font-weight: bold;
+ word-wrap: break-word;
+ line-height: 1.1;
+ margin-bottom: 4px; }
+ .select2-result-repository__forks, .select2-result-repository__stargazers {
+ margin-right: 1em; }
+ .select2-result-repository__forks, .select2-result-repository__stargazers, .select2-result-repository__watchers {
+ display: inline-block;
+ color: #aaa;
+ font-size: 11px; }
+ .select2-result-repository__description {
+ font-size: 13px;
+ color: #777;
+ margin-top: 4px; }
+ .select2-results__option--highlighted .select2-result-repository__title {
+ color: white; }
+ .select2-results__option--highlighted .select2-result-repository__forks, .select2-results__option--highlighted .select2-result-repository__stargazers, .select2-results__option--highlighted .select2-result-repository__description, .select2-results__option--highlighted .select2-result-repository__watchers {
+ color: #c6dcef; }
+
+.s2-docs-sidebar.affix {
+ position: static; }
+@media (min-width: 768px) {
+ .s2-docs-sidebar {
+ padding-left: 20px; } }
+
+.s2-docs-sidenav {
+ margin-top: 20px;
+ margin-bottom: 20px; }
+
+.s2-docs-sidebar .nav > li > a {
+ margin-left: -1px;
+ display: block;
+ padding: 4px 20px;
+ font-size: 13px;
+ font-weight: 500;
+ color: #767676;
+ border-left: 1px solid transparent;
+ transition: color .2s, border-color .2s; }
+.s2-docs-sidebar .nav > li > a code {
+ background-color: inherit;
+ color: inherit; }
+.s2-docs-sidebar .nav > li > a:hover,
+.s2-docs-sidebar .nav > li > a:focus {
+ color: #428BCA;
+ text-decoration: none;
+ background-color: transparent;
+ border-left-color: #428BCA; }
+.s2-docs-sidebar .nav > .active > a,
+.s2-docs-sidebar .nav > .active:hover > a,
+.s2-docs-sidebar .nav > .active:focus > a {
+ padding-left: 19px;
+ font-weight: bold;
+ color: #428BCA;
+ background-color: transparent;
+ border-left: 2px solid #428BCA; }
+.s2-docs-sidebar .nav .nav {
+ display: none;
+ padding-bottom: 10px; }
+.s2-docs-sidebar .nav .nav > li > a {
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 30px;
+ font-size: 12px;
+ font-weight: normal; }
+.s2-docs-sidebar .nav .nav > li > a:hover,
+.s2-docs-sidebar .nav .nav > li > a:focus {
+ padding-left: 30px; }
+.s2-docs-sidebar .nav .nav > .active > a,
+.s2-docs-sidebar .nav .nav > .active:hover > a,
+.s2-docs-sidebar .nav .nav > .active:focus > a {
+ padding-left: 29px;
+ font-weight: 400; }
+
+@media (min-width: 992px) {
+ .s2-docs-sidebar .s2-docs-sidenav {
+ padding-top: 40px;
+ transition: border-color .2s;
+ border-left: 1px solid transparent; }
+
+ .s2-docs-sidebar.affix .s2-docs-sidenav {
+ border-left-color: #eee; }
+
+ .s2-docs-sidebar .nav > .active > ul {
+ display: block; }
+
+ .s2-docs-sidebar.affix,
+ .s2-docs-sidebar.affix-bottom {
+ width: 213px; }
+
+ .s2-docs-sidebar.affix {
+ position: fixed;
+ top: 0px; }
+
+ .s2-docs-sidebar.affix-bottom {
+ position: absolute; }
+
+ .s2-docs-sidebar.affix-bottom .s2-docs-sidenav,
+ .s2-docs-sidebar.affix .s2-docs-sidenav {
+ margin-top: 0;
+ margin-bottom: 0; } }
+@media (min-width: 1200px) {
+ .s2-docs-sidebar.affix-bottom,
+ .s2-docs-sidebar.affix {
+ width: 263px; } }
+/* Back to top (hidden on mobile) */
+.back-to-top {
+ display: none;
+ padding: 4px 10px;
+ margin-top: 10px;
+ margin-left: 10px;
+ font-size: 12px;
+ font-weight: 400;
+ color: #999; }
+ .back-to-top:hover {
+ color: #428BCA;
+ text-decoration: none; }
+ @media (min-width: 768px) {
+ .back-to-top {
+ display: block; } }
+
+.navbar-toggle {
+ border: none;
+ background: transparent !important; }
+ .navbar-toggle:hover {
+ background: transparent !important; }
+ .navbar-toggle .icon-bar {
+ width: 22px;
+ transition: all 0.2s; }
+ .navbar-toggle .top-bar {
+ transform: rotate(45deg);
+ transform-origin: 10% 10%; }
+ .navbar-toggle .middle-bar {
+ opacity: 0; }
+ .navbar-toggle .bottom-bar {
+ transform: rotate(-45deg);
+ transform-origin: 10% 90%; }
+ .navbar-toggle.collapsed .top-bar {
+ transform: rotate(0); }
+ .navbar-toggle.collapsed .middle-bar {
+ opacity: 1; }
+ .navbar-toggle.collapsed .bottom-bar {
+ transform: rotate(0); }
+
+h2 code,
+h3 code,
+h4 code {
+ background-color: inherit; }
+
+pre.prettyprint {
+ padding: 9px 14px;
+ margin-bottom: 14px;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8; }
+
+.s2-docs-featurette {
+ color: #777;
+ padding: 15px 0;
+ text-align: center; }
+ .s2-docs-featurette h4 {
+ margin: 30px 0 15px; }
+ .s2-docs-featurette .fa {
+ font-size: 28px;
+ color: #777; }
+
+.s2-docs-container {
+ line-height: 1.6; }
+
+section {
+ margin-bottom: 40px; }
+
+.page-header {
+ padding-bottom: 19px;
+ margin-bottom: 29px; }
+
+.s2-docs-nav {
+ margin-bottom: 0;
+ border-color: #eee;
+ background-color: #f6f6f6; }
+ .s2-docs-nav .navbar-brand {
+ font-weight: 500; }
+ .s2-docs-nav .navbar-brand > img {
+ display: inline;
+ margin-right: 4px; }
+ .s2-docs-nav .navbar-nav > .active > a,
+ .s2-docs-nav .navbar-nav > .active > a:hover,
+ .s2-docs-nav .navbar-nav > .active > a:focus {
+ background-color: #f0f0f0;
+ color: #000; }
+ @media (min-width: 768px) {
+ .s2-docs-nav .navbar-nav > li > .dropdown-menu:before {
+ position: absolute;
+ top: -21px;
+ left: 24px;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0.1);
+ border-style: solid;
+ border-width: 10px;
+ content: ""; }
+ .s2-docs-nav .navbar-nav > li > .dropdown-menu:after {
+ position: absolute;
+ top: -20px;
+ left: 24px;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #FFF;
+ border-style: solid;
+ border-width: 10px;
+ content: ''; }
+ .s2-docs-nav .navbar-nav .dropdown-menu {
+ border-radius: 4px;
+ border-color: #ddd;
+ margin-top: -1px; } }
+
+.s2-docs-footer {
+ border-top: 1px solid #eee;
+ color: #767676;
+ padding-top: 40px;
+ padding-bottom: 40px;
+ margin-top: 100px;
+ text-align: center; }
+ .s2-docs-footer-links {
+ padding-left: 0;
+ margin-top: 20px; }
+ .s2-docs-footer-links li {
+ display: inline;
+ padding: 0 2px; }
+ .s2-docs-footer-links li:after {
+ content: "·";
+ padding-left: 8px; }
+ .s2-docs-footer-links li:first-child {
+ padding-left: 0; }
+ .s2-docs-footer-links li:last-child:after {
+ content: "";
+ padding-left: 0; }
+ @media (min-width: 768px) {
+ .s2-docs-footer p {
+ margin-bottom: 0; } }
+
+.alert {
+ background: #fff;
+ border: 1px solid #eee;
+ border-left-width: 5px;
+ border-radius: 3px;
+ color: #333;
+ margin: 20px 0;
+ padding: 20px; }
+ .alert h4 {
+ font-size: 18px;
+ margin-top: 0;
+ margin-bottom: 5px; }
+ .alert-danger {
+ border-left-color: #ce4844; }
+ .alert-danger h4 {
+ color: #ce4844; }
+ .alert-info {
+ border-left-color: #1b809e; }
+ .alert-info h4 {
+ color: #1b809e; }
+ .alert-warning {
+ border-left-color: #aa6708; }
+ .alert-warning h4 {
+ color: #aa6708; }
+
+.s2-docs-home .jumbotron {
+ margin-bottom: 0;
+ color: #000; }
+ .s2-docs-home .jumbotron h1 {
+ color: #000;
+ margin-top: 20px; }
+.s2-docs-home .lead {
+ text-align: center;
+ max-width: 800px;
+ margin: 0 auto 40px; }
+.s2-docs-home .notice-previous {
+ background: #f6f6f6;
+ color: #666;
+ border-bottom: 1px solid #eee;
+ padding: 15px 20px; }
+.s2-docs-home .half-rule {
+ width: 100px;
+ margin: 40px auto; }
+
+.s2-example {
+ position: relative;
+ padding: 45px 15px 15px;
+ margin: 0 -15px 15px;
+ background-color: #fafafa;
+ box-shadow: inset 0 3px 6px rgba(0, 0, 0, 0.05);
+ border-color: #e5e5e5 #eee #eee;
+ border-style: solid;
+ border-width: 1px 0; }
+ .s2-example:after {
+ content: "Example";
+ position: absolute;
+ top: 15px;
+ left: 15px;
+ font-size: 12px;
+ font-weight: bold;
+ color: #bbb;
+ text-transform: uppercase;
+ letter-spacing: 1px; }
+ @media (min-width: 768px) {
+ .s2-example {
+ margin-left: 0;
+ margin-right: 0;
+ background-color: #fff;
+ border-width: 1px;
+ border-color: #eee;
+ border-radius: 4px 4px 0 0;
+ box-shadow: none; } }
+
+.s2-event-log {
+ background: #002451;
+ color: white;
+ font-family: Menlo, 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', Monaco, Consolas, monospace;
+ margin: 0 -15px 15px;
+ padding: 45px 15px 15px;
+ position: relative; }
+ .s2-event-log:after {
+ content: "Event Log";
+ position: absolute;
+ top: 15px;
+ left: 15px;
+ font-size: 12px;
+ font-weight: bold;
+ color: #BBB;
+ text-transform: uppercase;
+ letter-spacing: 1px; }
+ @media (min-width: 768px) {
+ .s2-event-log {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: -15px;
+ border-width: 1px;
+ border-color: #eee;
+ box-shadow: none; } }
+
+.s2-example + pre,
+.s2-example + figure,
+.s2-event-log + pre {
+ margin: -15px -15px 15px;
+ border-radius: 0;
+ border-width: 0 0 1px; }
+ @media (min-width: 768px) {
+ .s2-example + pre,
+ .s2-example + figure,
+ .s2-event-log + pre {
+ margin-top: -16px;
+ margin-left: 0;
+ margin-right: 0;
+ border-width: 1px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px; } }
+
+.s2-example + .s2-event-log {
+ margin-top: -15px; }
+
+.s2-docs-social {
+ margin-bottom: 20px;
+ text-align: center; }
+
+.s2-docs-social-buttons {
+ display: inline-block;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none; }
+ .s2-docs-social-buttons li {
+ display: inline-block;
+ padding: 5px 8px;
+ line-height: 1; }
+ .s2-docs-social-buttons .twitter-follow-button {
+ width: 225px !important; }
+ .s2-docs-social-buttons .twitter-share-button {
+ width: 98px !important; }
+
+.github-btn {
+ overflow: hidden;
+ border: 0; }
+
+.btn-outline-inverse {
+ color: #428BCA;
+ background-color: transparent;
+ border-color: #428BCA;
+ padding: 15px 30px;
+ font-size: 20px;
+ transition: all .1s ease-in-out; }
+ .btn-outline-inverse:hover {
+ color: #fff;
+ border-color: #428BCA;
+ background-color: #428BCA; }
+
+.btn-toolbar {
+ margin-bottom: 20px; }
+
+.jumbotron {
+ background-color: #F6F6F6;
+ border-bottom: 1px solid #eee;
+ color: #777;
+ padding-left: 0;
+ padding-right: 0; }
+ .jumbotron h1 {
+ color: #777;
+ font-size: 36px;
+ margin-top: 10px; }
+ .jumbotron .version {
+ color: #999;
+ font-size: 14px;
+ font-weight: normal;
+ margin-bottom: 30px; }
+
+.com {
+ color: #999; }
+
+.lit {
+ color: #195f91; }
+
+.pun, .opn, .clo {
+ color: #93a1a1; }
+
+.fun {
+ color: #dc322f; }
+
+.str, .atv {
+ color: #C7254E; }
+
+.kwd, .prettyprint .tag {
+ color: #2F6F9F; }
+
+.typ, .atn, .dec, .var {
+ color: #428BCA; }
+
+.pln {
+ color: #333; }
+
+.prettyprint {
+ padding: 9px 14px;
+ margin-bottom: 20px;
+ margin-top: 20px;
+ border: 1px solid #eee; }
+ .prettyprint.linenums {
+ -webkit-box-shadow: inset 40px 0 0 #fbfbfb, inset 41px 0 0 #f6f6f6;
+ -moz-box-shadow: inset 40px 0 0 #fbfbfb, inset 41px 0 0 #f6f6f6;
+ box-shadow: inset 40px 0 0 #fbfbfb, inset 41px 0 0 #f6f6f6; }
+
+ol.linenums {
+ margin: 0 0 0 -12px; }
+ ol.linenums li {
+ padding-left: 12px;
+ color: #bebebe;
+ line-height: 18px; }
+
+.highlight {
+ background: #fff; }
+ .highlight .nx {
+ color: #333; }
+ .highlight .k, .highlight .o {
+ font-weight: bold; }
+ .highlight .na {
+ color: #428BCA; }
+ .highlight .s, .highlight .s1, .highlight .s2, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .se, .highlight .sh, .highlight .si, .highlight .sx {
+ color: #C7254E; }
+ .highlight .m, .highlight .mf, .highlight mh, .highlight .mi, .highlight .mo {
+ color: #195f91; }
+ .highlight .p {
+ color: #93a1a1; }
+ .highlight .nt {
+ color: #2F6F9F; }
+ .highlight .c {
+ color: #999;
+ font-style: italic; }
+ .highlight .err {
+ background-color: #e3d2d2;
+ color: #a61717; }
+ .highlight .gr {
+ color: #a00; }
+ .highlight pre {
+ border: none;
+ margin: 0; }
+ .highlight > pre {
+ border: 1px solid #eee;
+ padding: 0;
+ margin-bottom: 14px; }
+ .highlight .lineno {
+ background-color: #fbfbfb;
+ color: #bebebe;
+ -ms-user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none; }
+
+.highlight .cm {
+ color: #999988;
+ font-style: italic; }
+
+/* Comment.Multiline */
+.highlight .cp {
+ color: #999999;
+ font-weight: bold; }
+
+/* Comment.Preproc */
+.highlight .c1 {
+ color: #999988;
+ font-style: italic; }
+
+/* Comment.Single */
+.highlight .cs {
+ color: #999999;
+ font-weight: bold;
+ font-style: italic; }
+
+/* Comment.Special */
+.highlight .gd {
+ color: #000000;
+ background-color: #ffdddd; }
+
+/* Generic.Deleted */
+.highlight .gd .x {
+ color: #000000;
+ background-color: #ffaaaa; }
+
+/* Generic.Deleted.Specific */
+.highlight .ge {
+ font-style: italic; }
+
+/* Generic.Emph */
+.highlight .gh {
+ color: #999999; }
+
+/* Generic.Heading */
+.highlight .gi {
+ color: #000000;
+ background-color: #ddffdd; }
+
+/* Generic.Inserted */
+.highlight .gi .x {
+ color: #000000;
+ background-color: #aaffaa; }
+
+/* Generic.Inserted.Specific */
+.highlight .go {
+ color: #888888; }
+
+/* Generic.Output */
+.highlight .gp {
+ color: #555555; }
+
+/* Generic.Prompt */
+.highlight .gs {
+ font-weight: bold; }
+
+/* Generic.Strong */
+.highlight .gu {
+ color: #aaaaaa; }
+
+/* Generic.Subheading */
+.highlight .gt {
+ color: #aa0000; }
+
+/* Generic.Traceback */
+.highlight .kc {
+ font-weight: bold; }
+
+/* Keyword.Constant */
+.highlight .kd {
+ font-weight: bold; }
+
+/* Keyword.Declaration */
+.highlight .kp {
+ font-weight: bold; }
+
+/* Keyword.Pseudo */
+.highlight .kr {
+ font-weight: bold; }
+
+/* Keyword.Reserved */
+.highlight .kt {
+ color: #445588;
+ font-weight: bold; }
+
+/* Keyword.Type */
+.highlight .nb {
+ color: #0086B3; }
+
+/* Name.Builtin */
+.highlight .nc {
+ color: #445588;
+ font-weight: bold; }
+
+/* Name.Class */
+.highlight .no {
+ color: #008080; }
+
+/* Name.Constant */
+.highlight .ni {
+ color: #800080; }
+
+/* Name.Entity */
+.highlight .ne {
+ color: #990000;
+ font-weight: bold; }
+
+/* Name.Exception */
+.highlight .nf {
+ color: #990000;
+ font-weight: bold; }
+
+/* Name.Function */
+.highlight .nn {
+ color: #555555; }
+
+/* Name.Namespace */
+.highlight .nv {
+ color: #008080; }
+
+/* Name.Variable */
+.highlight .ow {
+ font-weight: bold; }
+
+/* Operator.Word */
+.highlight .w {
+ color: #bbbbbb; }
+
+/* Text.Whitespace */
+.highlight .sr {
+ color: #009926; }
+
+/* Literal.String.Regex */
+.highlight .ss {
+ color: #990073; }
+
+/* Literal.String.Symbol */
+.highlight .bp {
+ color: #999999; }
+
+/* Name.Builtin.Pseudo */
+.highlight .vc {
+ color: #008080; }
+
+/* Name.Variable.Class */
+.highlight .vg {
+ color: #008080; }
+
+/* Name.Variable.Global */
+.highlight .vi {
+ color: #008080; }
+
+/* Name.Variable.Instance */
+.highlight .il {
+ color: #009999; }
+
+/* Literal.Number.Integer.Long */
+h1[id] {
+ padding-top: 20px;
+ margin-top: 0; }
+
diff --git a/docs/themes/site/css/theme.css b/docs/themes/site/css/theme.css
new file mode 100644
index 00000000..e6ab54cc
--- /dev/null
+++ b/docs/themes/site/css/theme.css
@@ -0,0 +1,47 @@
+.logo-title {
+ color: #fff;
+ font-size: 30px;
+ text-transform: uppercase;
+ padding-top: 10px;
+ vertical-align: middle;
+ font-weight: 700;
+ font-family: "Montserrat", "Helvetica Neue", "Helvetica" , "Arial" ,sans-serif;
+ border-bottom: 2px solid #000000;
+}
+
+.logo-image {
+ vertical-align:middle;
+}
+
+.s2-docs-featurette {
+ padding-top: 20px;
+ text-align: center;
+}
+
+.s2-docs-featurette [class*='size-'] h4 {
+ font-size: 1.5rem;
+}
+
+/* Padding for paragraphs in featurette grid */
+.s2-docs-featurette [class*='size-'] p {
+ padding: 0 30px;
+ font-size: 1rem !important;
+}
+
+.form-control {
+ width: 100%;
+ display: block;
+}
+
+img.img-flag {
+ margin: 0 !important;
+ display: inherit !important;
+ height: 15px;
+ width: 18px;
+}
+
+/* Override some styles for Select2 component elements */
+input.select2-search__field {
+ margin-bottom: 0;
+ line-height: inherit;
+}
diff --git a/docs/themes/site/images/android-chrome-36x36.png b/docs/themes/site/images/android-chrome-36x36.png
new file mode 100644
index 00000000..12a3dc6b
Binary files /dev/null and b/docs/themes/site/images/android-chrome-36x36.png differ
diff --git a/docs/themes/site/images/android-chrome-48x48.png b/docs/themes/site/images/android-chrome-48x48.png
new file mode 100644
index 00000000..64aa46a4
Binary files /dev/null and b/docs/themes/site/images/android-chrome-48x48.png differ
diff --git a/docs/themes/site/images/android-chrome-72x72.png b/docs/themes/site/images/android-chrome-72x72.png
new file mode 100644
index 00000000..2c2c829b
Binary files /dev/null and b/docs/themes/site/images/android-chrome-72x72.png differ
diff --git a/docs/themes/site/images/apple-touch-icon-57x57.png b/docs/themes/site/images/apple-touch-icon-57x57.png
new file mode 100644
index 00000000..ae24323d
Binary files /dev/null and b/docs/themes/site/images/apple-touch-icon-57x57.png differ
diff --git a/docs/themes/site/images/apple-touch-icon-60x60.png b/docs/themes/site/images/apple-touch-icon-60x60.png
new file mode 100644
index 00000000..e3f8d21f
Binary files /dev/null and b/docs/themes/site/images/apple-touch-icon-60x60.png differ
diff --git a/docs/themes/site/images/apple-touch-icon-72x72.png b/docs/themes/site/images/apple-touch-icon-72x72.png
new file mode 100644
index 00000000..e5399209
Binary files /dev/null and b/docs/themes/site/images/apple-touch-icon-72x72.png differ
diff --git a/docs/themes/site/images/apple-touch-icon-precomposed.png b/docs/themes/site/images/apple-touch-icon-precomposed.png
new file mode 100644
index 00000000..31b912e7
Binary files /dev/null and b/docs/themes/site/images/apple-touch-icon-precomposed.png differ
diff --git a/docs/themes/site/images/apple-touch-icon.png b/docs/themes/site/images/apple-touch-icon.png
new file mode 100644
index 00000000..e5399209
Binary files /dev/null and b/docs/themes/site/images/apple-touch-icon.png differ
diff --git a/docs/themes/site/images/favicon-16x16.png b/docs/themes/site/images/favicon-16x16.png
new file mode 100644
index 00000000..ab60a1d1
Binary files /dev/null and b/docs/themes/site/images/favicon-16x16.png differ
diff --git a/docs/themes/site/images/favicon-32x32.png b/docs/themes/site/images/favicon-32x32.png
new file mode 100644
index 00000000..5319e04a
Binary files /dev/null and b/docs/themes/site/images/favicon-32x32.png differ
diff --git a/docs/themes/site/images/favicon.ico b/docs/themes/site/images/favicon.ico
new file mode 100644
index 00000000..91dcfd50
Binary files /dev/null and b/docs/themes/site/images/favicon.ico differ
diff --git a/docs/themes/site/images/favicon.png b/docs/themes/site/images/favicon.png
new file mode 100644
index 00000000..5319e04a
Binary files /dev/null and b/docs/themes/site/images/favicon.png differ
diff --git a/docs/themes/site/images/manifest.json b/docs/themes/site/images/manifest.json
new file mode 100644
index 00000000..99bc8aa4
--- /dev/null
+++ b/docs/themes/site/images/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "Select2",
+ "icons": [
+ {
+ "src": "\/images\/android-chrome-36x36.png?v=699Nxpjr2A",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": 0.75
+ },
+ {
+ "src": "\/images\/android-chrome-48x48.png?v=699Nxpjr2A",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": 1
+ },
+ {
+ "src": "\/images\/android-chrome-72x72.png?v=699Nxpjr2A",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": 1.5
+ }
+ ]
+}
diff --git a/docs/themes/site/images/mstile-150x150.png b/docs/themes/site/images/mstile-150x150.png
new file mode 100644
index 00000000..9dede7da
Binary files /dev/null and b/docs/themes/site/images/mstile-150x150.png differ
diff --git a/docs/themes/site/images/mstile-310x150.png b/docs/themes/site/images/mstile-310x150.png
new file mode 100644
index 00000000..a266af2e
Binary files /dev/null and b/docs/themes/site/images/mstile-310x150.png differ
diff --git a/docs/themes/site/images/mstile-70x70.png b/docs/themes/site/images/mstile-70x70.png
new file mode 100644
index 00000000..f2efb68c
Binary files /dev/null and b/docs/themes/site/images/mstile-70x70.png differ
diff --git a/docs/themes/site/images/safari-pinned-tab.svg b/docs/themes/site/images/safari-pinned-tab.svg
new file mode 100644
index 00000000..700213c4
--- /dev/null
+++ b/docs/themes/site/images/safari-pinned-tab.svg
@@ -0,0 +1,17 @@
+
+
+
+
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+
+
+
+
+
diff --git a/docs/themes/site/js/data-fill-from.js b/docs/themes/site/js/data-fill-from.js
new file mode 100644
index 00000000..b08e8c34
--- /dev/null
+++ b/docs/themes/site/js/data-fill-from.js
@@ -0,0 +1,13 @@
+$(document).ready(function() {
+ $("[data-fill-from]").each(function () {
+ var $this = $(this);
+
+ var codeContainer = $this.data("fill-from");
+ var $container = $(codeContainer);
+
+ var code = $.trim($container.html());
+
+ $this.text(code);
+ $this.addClass("prettyprint");
+ });
+});
diff --git a/docs/themes/site/site.yaml b/docs/themes/site/site.yaml
new file mode 100644
index 00000000..f1ecec17
--- /dev/null
+++ b/docs/themes/site/site.yaml
@@ -0,0 +1,13 @@
+streams:
+ schemes:
+ theme:
+ type: ReadOnlyStream
+ prefixes:
+ '':
+ - user/themes/site
+ - user/themes/learn2
+google_analytics_code: UA-57144786-2
+github:
+ position: top # top | bottom | off
+ tree: https://github.com/select2/docs/blob/develop/
+ commits: https://github.com/select2/docs/commits/develop/
diff --git a/docs/themes/site/templates/partials/base.html.twig b/docs/themes/site/templates/partials/base.html.twig
new file mode 100644
index 00000000..12a83513
--- /dev/null
+++ b/docs/themes/site/templates/partials/base.html.twig
@@ -0,0 +1,109 @@
+{% set theme_config = attribute(config.themes, config.system.pages.theme) %}
+
+
+
+ {% block head %}
+
+ {% if header.title %}{{ header.title }} | {% endif %}{{ site.title }}
+ {% include 'partials/metadata.html.twig' %}
+
+
+
+
+
+ {% block stylesheets %}
+ {% do assets.addCss('theme://css-compiled/nucleus.css',102) %}
+ {% do assets.addCss('theme://css-compiled/theme.css',101) %}
+ {% do assets.addCss('theme://css/custom.css',100) %}
+ {% do assets.addCss('theme://css/font-awesome.min.css',100) %}
+ {% do assets.addCss('theme://css/featherlight.min.css') %}
+ {% do assets.addCss('https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/css/select2.min.css') %}
+ {% do assets.addCss('theme://css/s2-docs.css', 100) %}
+ {% do assets.addCss('theme://css/theme.css',100) %}
+
+ {% if browser.getBrowser == 'msie' and browser.getVersion >= 8 and browser.getVersion <= 9 %}
+ {% do assets.addCss('theme://css/nucleus-ie9.css') %}
+ {% do assets.addCss('theme://css/pure-0.5.0/grids-min.css') %}
+ {% do assets.addJs('theme://js/html5shiv-printshiv.min.js') %}
+ {% endif %}
+
+ {{ assets.css() }}
+ {% endblock %}
+
+ {% block javascripts %}
+ {% do assets.addJs('jquery',101) %}
+ {% do assets.addJs('theme://js/modernizr.custom.71422.js',100) %}
+ {% do assets.addJs('https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.full.min.js', 100) %}
+ {% do assets.addJs('https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js', 100) %}
+ {% do assets.addJs('theme://js/featherlight.min.js') %}
+ {% do assets.addJs('theme://js/clipboard.min.js') %}
+ {% do assets.addJs('theme://js/jquery.scrollbar.min.js') %}
+ {% do assets.addJs('theme://js/learn.js') %}
+ {% do assets.addJs('theme://js/data-fill-from.js') %}
+ {{ assets.js() }}
+
+ {% include "partials/js/source-states.html.twig" %}
+
+ {% endblock %}
+
+ {% endblock %}
+
+
+ {% block sidebar %}
+
+ {% endblock %}
+
+ {% block body %}
+
+
+
+
+
+
+ {% block topbar %}{% if theme_config.github.position == 'top' or config.plugins.breadcrumbs.enabled %}
+
+ {% if theme_config.github.position == 'top' %}
+
+ {% include 'partials/github_link.html.twig' %}
+
+ {% endif %}
+
+ {% if config.plugins.breadcrumbs.enabled %}
+ {% include 'partials/breadcrumbs.html.twig' %}
+ {% endif %}
+
+ {% endif %}{% endblock %}
+
+ {% block content %}{% endblock %}
+
+ {% block footer %}
+ {% if theme_config.github.position == 'bottom' %}
+ {% include 'partials/github_note.html.twig' %}
+ {% endif %}
+ {% endblock %}
+
+
+ {% block navigation %}{% endblock %}
+
+ {% endblock %}
+
+ {% block analytics %}
+ {% if theme_config.google_analytics_code %}
+ {% include 'partials/analytics.html.twig' %}
+ {% endif %}
+ {% endblock %}
+
+
diff --git a/docs/themes/site/templates/partials/js/source-states.html.twig b/docs/themes/site/templates/partials/js/source-states.html.twig
new file mode 100644
index 00000000..31512c33
--- /dev/null
+++ b/docs/themes/site/templates/partials/js/source-states.html.twig
@@ -0,0 +1,73 @@
+
+
+ Alaska
+ Hawaii
+
+
+ California
+ Nevada
+ Oregon
+ Washington
+
+
+ Arizona
+ Colorado
+ Idaho
+ Montana
+ Nebraska
+ New Mexico
+ North Dakota
+ Utah
+ Wyoming
+
+
+ Alabama
+ Arkansas
+ Illinois
+ Iowa
+ Kansas
+ Kentucky
+ Louisiana
+ Minnesota
+ Mississippi
+ Missouri
+ Oklahoma
+ South Dakota
+ Texas
+ Tennessee
+ Wisconsin
+
+
+ Connecticut
+ Delaware
+ Florida
+ Georgia
+ Indiana
+ Maine
+ Maryland
+ Massachusetts
+ Michigan
+ New Hampshire
+ New Jersey
+ New York
+ North Carolina
+ Ohio
+ Pennsylvania
+ Rhode Island
+ South Carolina
+ Vermont
+ Virginia
+ West Virginia
+
+
+
+
diff --git a/docs/themes/site/templates/partials/logo.html.twig b/docs/themes/site/templates/partials/logo.html.twig
new file mode 100644
index 00000000..138bcbbb
--- /dev/null
+++ b/docs/themes/site/templates/partials/logo.html.twig
@@ -0,0 +1,3 @@
+
+ Select2
+
diff --git a/docs/themes/site/templates/partials/sidebar.html.twig b/docs/themes/site/templates/partials/sidebar.html.twig
new file mode 100644
index 00000000..05245c6e
--- /dev/null
+++ b/docs/themes/site/templates/partials/sidebar.html.twig
@@ -0,0 +1,69 @@
+{% macro loop(page, parent_loop) %}
+ {% if parent_loop|length > 0 %}
+ {% set data_level = parent_loop %}
+ {% else %}
+ {% set data_level = 0 %}
+ {% endif %}
+ {% for p in page.children.visible %}
+ {% set parent_page = p.activeChild ? ' parent' : '' %}
+ {% set current_page = p.active ? ' active' : '' %}
+
+
+
+ {% if data_level == 0 %}{{ loop.index }}. {% endif %} {{ p.menu }}
+
+ {% if p.children.count > 0 %}
+
+ {{ _self.loop(p, parent_loop|default(0)+loop.index) }}
+
+ {% endif %}
+
+ {% endfor %}
+{% endmacro %}
+
+{% macro version(p) %}
+ {% set parent_page = p.activeChild ? ' parent' : '' %}
+ {% set current_page = p.active ? ' active' : '' %}
+
+ {% if p.activeChild or p.active %}
+
+ {% else %}
+
+ {% endif %}
+ {{ p.menu }}
+
+{% endmacro %}
+
+